知识大全 有状态会话Bean及其多种调用方法

Posted 状态

篇首语:少年辛苦终身事,莫向光阴惰寸功。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 有状态会话Bean及其多种调用方法相关的知识,希望对你有一定的参考价值。

JBoss:有状态会话Bean及其多种调用方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   一 有状态会话 Bean 的开发和部署    基础知识     在第一节中 我们给出了一个 HelloWorld 无状态的会话 Bean 在 EJB 规范中 EJB 包括三种 Bean 第一种便是会话 Bean(Session Bean) 然后还有实体 Bean(EntityBean) 和消息驱动 Bean     会话 Bean 包括无状态会话 Bean 和有状态会话 Bean 二者的主要区别是前者在执行的过程中不保存 Bean 的状态信息 它没有状态域 也就是说 无状态会话 Bean 就只是一个执行过程 我们调用它完成我们的任务而己 它在容器池中无法保存 Bean 状态 而后者在容器中执行时会保存 Bean 的执行状态 相对应的 有状态会话 Bean 中也对应有状态域 即会话 Bean 在执行的过程中会将与固定客户端的会话状态保存起来以备后用     然而 有状态会话 Bean 它没有主键类 客户端无法查找出它对应的在容器池中的 EJBObject 那么我们如何重用我们的 EJBObject 呢?在这篇文章中 我们提供了两种方法 并给出了示例程序     第一种方法是采用有状态会话 Bean 的 Handle( 句柄 ) 为了取得句柄 可以调用 EJBObject 接口的 getHandle ()方法 返回一个 Handle 实例 为了重新构建对同一 EJBObject 的引用 可以使用 Handle 接口的 getEJBObject ()方法 此方法返回一个对应 Handle 的 EJB 对象 利用此对象 我们就可以重构出对应的 EJBObject 如下示例     Count count = counthome create();// 产生 Remote 接口对象     javax ejb Handle handle = count getHandle();// 获得 Remote 接口的句柄     …    Object obj = handle getEJBObject();// 得获得 Handle 对应的在容器池中的 EJBObject 对象     Count recount= (Count)PortableRemoteObject narrow(obj Count class);     // 将此对象重构为远程接口对象即可重新调用它的方法     第二种方法是采用有状态会话 Bean 的 HomeHandle 它类似 handle 但不能用于引用 EJBObject HomeHandle 包含足够的信息 可以重建 EJBHome ()的引用 它的做法是调用 getHomeHandle ()方法 和 getEJBHome ()方法 此方法返回一个对应 Handle 的 EJBHome 对象 利用此对象 可以重新生成出对应的 EJBObject 对象 然后调用它的方法 如下示例     Content ctx = new InitialContext();     Object h = ctx lookup( CountHome );     CountHome home = (CountHome)PortableRemoteObject narrow(h CountHome class);     HomeHandle homehandle = home getHomeHandle();// 获取 HomeHandle          CountHome reHome = (CountHome)homeHandle getEJBHome();     Count recount = rehome create();     利用以上两种方法 我们可以自动的存储并重建引用所需的会话 Bean 中的 EJB 信息     好了 了解了以上知识 下面我们就来一个真实的会话 Bean 来看看它的运行方式!      一个有状态会话Bean的开发和部署     开发一个会话 Bean 基本的应遵守以下步聚 首先开发 Remote 接口 再编写 Home 接口 然后是 Bean 本身     同时 为了区别 我们应默认遵守以下命名规则 Remote 接口直接用 xxx 命名 Home 接口用 xxxHome 命名 Bean 本身用 xxxBean 命名     首先 我们手动建立开发环境 在 C:\\JBOSS 目录(这里指 JBOSS 的安装目录 详见上一节)下新建一个存放我们项目的目录 myproject 然后再在 myproject 下建一个存放此 Count 会话 Bean 的目录 CounterStatefullSessionBean 用来存放我们的这个 Bean 的所有相关文件 然后 再在 CounterStatefullSessionBean 目录下建三个目录 ejb jsp 和 src 分别用来存放 ejb 类 Web 应用文件( jsp 文件及 Servlet 类)和我们的源程序     接着 再在 EJB 目录下建一个 client 目录和一个 counter jar 目录分别用来存放 client 端测试程序和服务器端类 然后再在 client 和 counter jar 目录下同时各新建一个 counter 目录 counter 目录下再建一个 ejb 目录 这是我们的包名 然后在 counter jar 目录下再建一个 META INF 目录 用于存放我们的 ejb 配置文件     接着 再在 jsp 目录中新建一个 counter war 目录用于保存 WEB 发部的程序 再在 counter war 下新建一个 WEB INF 目录 同时在 WEB INF 目录中新建一个 classes 目录 其下面再建包目录 counter 及 counter 目录下的 ejb 目录     好了 我们的目录己建立成功 我们的目录结构见图 所示    >   >     好了 我们利用上面的知识来建一个有状态会话 Bean 及它的测试程序 我们在这里引入《 Mastering EJB 》 (Second Edition) 中的一个会话 Bean 即 Count 这个 Bean 中有一个状态域命名为 val 它用来保存相应客户端调用 EBJ 方法 count 的次数     我们进入 src 目录 所有的类源程序我们都在此目录中编写和存放     编写 Remote 接口 代码如下     //Count java     package counter ejb;  import javax ejb *;   import java rmi RemoteException;   public interface Count extends EJBObject   public int count() throws RemoteException;        编写 Home 接口 代码如下     //CountHome java   package counter ejb;   import javax ejb *;   import java rmi RemoteException;   public interface CountHome extends EJBHome   Count create(int val) throws RemoteException CreateException;        编写 Bean 类 代码如下     //CountBean java   package counter ejb;   import javax ejb *;       public class CountBean implements SessionBean   // 当前的计数值就是对话状态   public int val;   private SessionContext ctx;   //EJB 方法   public int count()   System out println( count() );   return ++val;        //EJB 必须的方法     public void ejbCreate(int val) throws CreateException   this val=val;     System out println( ejbCreate() );          public void ejbRemove()     System out println( ejbRemove() );          public void ejbActivate()     System out println( ejbActivate() );          public void ejbPassivate()     System out println( ejbPassivate() );          public void setSessionContext(SessionContext ctx)     this ctx = ctx;          public SessionContext getSessionContext()     return this ctx;          好了 我们在 src 目录中产生了三个 java 文件 这是 EJB 必须的类 下面我们用在第一节中编写的 bat 文件来编译它们     进行 src 目录 热行 * java 即会产生三个 class 文件     下面我们部署我们的 EJB 首先编写部署描述符 进入     C \\JBOSS\\myproject\\CounterStatefullSessionBean\\ejb\\counter jar\\META INF 目录中 新建一个 ejb jar xml 文件 内容如下     <?xml version= encoding= gb ?>     <!DOCTYPE ejb jar PUBLIC //Sun Microsystems Inc //DTD Enterprise JavaBeans //EN      jar_ _ dtd >     <ejb jar>     <enterprise beans>     <session>     <display name>Count</display name>     <ejb name>Count</ejb name>     <home>counter ejb CountHome</home>     <remote>counter ejb Count</remote>     <ejb class>counter ejb CountBean</ejb class>     <session type>Stateful</session type>     <transaction type>Container</transaction type>     </session>     </enterprise beans>     </ejb jar>     此为 EJB 布署描述符文件 它里声明了此 CountBean 的一些属性 如声明了本地接口 远程接口及 Bean 的类型 其中 <session type>Stateful</session type> 一句声明此 Bean 是有状态会话 Bean 如果是无状态会话 Bean( 见第一节中的 HelloWorld) 则此处应该是 Stateless     然后 我们再在此目录中新建一个 jboss service xml 文件 它是 JBOSS 服务器特有的描述文件 它的内容如下     <?xml version= encoding= gb ?>     <jboss>     <enterprise beans>     <session>     <ejb name>Count</e cha138/Article/program/Java/ky/201311/28547

相关参考

知识大全 用SQL Server保持会话状态

用SQLServer保持会话状态  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在调用服务器后要

知识大全 自然的访问spring容器中的bean

   Spring依赖其IOC特征轻松的管理著一堆非常有价值的bean这些bean在spring容器中的依赖关系都已注入好所以相互调用非常方便  但既然是有价值的bean

知识大全 JAVA中Session的会话状态

JAVA中Session的会话状态  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  会话状态的维持

知识大全 ASP.NET MVC 4框架揭秘:Controller的释放和会话状态行为的控制[2]

ASP.NETMVC4框架揭秘:Controller的释放和会话状态行为的控制[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的

知识大全 ASP.NET MVC 4框架揭秘:Controller的释放和会话状态行为的控制[1]

ASP.NETMVC4框架揭秘:Controller的释放和会话状态行为的控制[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的

知识大全 java内省机制

  内省是Java语言对Bean类属性事件的一种处理方法(也就是说给定一个javabean对象我们就可以得到/调用它的所有的get/set方法)  例如类A中有属性name那我们可以通过getName

知识大全 孤立会话

SQL实战新手入门:孤立会话  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  孤立会话  当客户端

知识大全 会话

SQL实战新手入门:会话  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  第章多用户环境  数据库

知识大全 无Cookie会话的实现

无Cookie会话的实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  无Cookie会话  在

知识大全 详解PHP会话存储方式

详解PHP会话存储方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  先确认会话是否自动开启还是