您的位置:jsp学习站首页 >> 应用服务器 >> JBoss >> JBoss:有状态会话Bean及其多种调用方法

JBoss:有状态会话Bean及其多种调用方法 (1)

[ 来源:互网络 | 更新日期:2007-09-08 07:41:00 | 浏览次数:12930]
简介:0 规范中, 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

  一、有状态会话 Bean 的开发和部署
  1、基础知识
  
  在第一节中,我们给出了一个 HelloWorld 无状态的会话 Bean ,在 EJB2.0 规范中, 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 来看看它的运行方式!
  
  2、一个有状态会话Bean的开发和部署
  
  开发一个会话 Bean ,基本的应遵守以下步聚,首先开发 Remote 接口,再编写 Home 接口,然后是 Bean 本身。
  
  同时,为了区别,我们应默认遵守以下命名规则, Remote 接口直接用 xxx 命名, Home 接口用 xxxHome 命名, Bean 本身用 xxxBean 命名。
  
  首先,我们手动建立开发环境,在 C:\JBOSS 目录(这里指 JBOSS 的安装目录,详见上一节)下新建一个存放我们
[1] [2] [3] [4] [5] [6] [7] [8]