繁体   English   中英

会话bean如何工作?

[英]How does a session bean work?

假设我在应用程序中部署了一个有状态会话Bean。 在我的客户端应用程序中,我尝试在JNDI的帮助下使用此会话bean。 在获得bean的存根(而不是实际bean本身)并初始化了bean的某些字段之后,我尝试使用JNDI第二次获取该bean。

那么我将从应用程序服务器获得什么bean? 是两次相同的bean,还是我将使用bean的第二个实例? 如果我将两次获得相同的bean,如何从应用程序服务器中获得同一bean的两个不同实例? 我只是对bean本身感到困惑。 如果可能,请提供一些资源。

假设您通过JNDI获得了对远程bean实例的引用。 现在,让我们说,你调用的远程豆,两个业务方法methodAmethodB

有状态和无状态Bean之间的(主要)区别是:

  • 如果你的bean是无状态的,则methodAmethodB 但不保证完全相同的bean实例在服务器端运行。
  • 如果你的bean是有状态的,则methodAmethodB保证完全相同的bean实例在服务器端运行。

从客户端方面,请注意,您所拥有的只是对服务器端一个晦涩对象的引用。 在那个“存根”上调用多个方法-即使它是同一个存根对象-也不保证您将在服务器端处理完全相同的对象, 除非您的bean是有状态的。

现在,更具体地说,是您的问题。 您说您在服务器上部署了一个有状态的bean,并且通过JNDI获得了对bean实例的引用。 为此,必须在EJB的home接口上使用create方法。 create方法向您返回了一个存根,该存根映射到服务器端的一个实例。

下次您在home接口上调用create时,将在服务器端得到一个指向不同 bean的不同存根。

如果要保持对上一个bean的访问,则需要以某种方式保留对该远程对象的引用。

  • 如果您使用的是EJB 2.x,则不应将存根“缓存”在任何地方。 相反,获取对Bean句柄的引用,并将该句柄存储在某处。
  • 如果使用的是EJB 3.x,则只需存储对存根的引用。

有状态会话Bean是企业Bean(EJB组件),充当使用它的客户端的服务器端扩展。 有状态会话Bean由客户端创建,并且仅对该客户端有效,直到客户端连接断开或显式删除该Bean。

这意味着,对于相同的客户端,无论您打算从服务器获取多少次,都必须返回相同的实例。 否则,您将无法依赖状态。

另请参阅Oracle文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM