Java 会话bean是如何工作的?
假设在我的应用程序中部署了一个有状态会话bean。在我的客户机应用程序中,我尝试在JNDI的帮助下使用这个会话bean。在获得bean的存根(不是实际的bean本身)并初始化该bean的一些字段之后,我尝试使用JNDI第二次获取该bean 那么,我将从AppServer获得什么bean呢?它将是同一个bean两次还是我将使用该bean的第二个实例?如果我将获得相同的bean两次,如何从AppServer获得相同bean的两个不同实例?我只是不知道豆子本身是什么。如果可能,提供一些资源 有状态会话bean是一个企业bean(EJB组件),它 充当使用它的客户端的服务器端扩展。这个 有状态会话bean是由客户机创建的,并且只适用于 直到客户机连接断开或bean被删除 明确删除 这意味着,对于同一个客户机,无论您要从服务器获取多少次,都必须返回相同的实例。否则,你不能依赖国家Java 会话bean是如何工作的?,java,jakarta-ee,ejb,rmi,jndi,Java,Jakarta Ee,Ejb,Rmi,Jndi,假设在我的应用程序中部署了一个有状态会话bean。在我的客户机应用程序中,我尝试在JNDI的帮助下使用这个会话bean。在获得bean的存根(不是实际的bean本身)并初始化该bean的一些字段之后,我尝试使用JNDI第二次获取该bean 那么,我将从AppServer获得什么bean呢?它将是同一个bean两次还是我将使用该bean的第二个实例?如果我将获得相同的bean两次,如何从AppServer获得相同bean的两个不同实例?我只是不知道豆子本身是什么。如果可能,提供一些资源 有状态会话
另请参阅。假设您通过JNDI获得对远程bean实例的引用。现在,假设您在远程bean上调用了两个业务方法,
methodA
和methodB
有状态bean和无状态bean之间的(主要)区别是:
- 如果您的bean是无状态的,那么
和methodA
不能保证在服务器端的同一bean实例上运行methodB
- 如果bean是有状态的,那么
和methodA
保证在服务器端的同一bean实例上运行methodB
create
方法。create
方法向您返回了一个存根,该存根映射到服务器端的一个实例
下次在主界面上调用create
,您将得到一个指向服务器端不同bean的不同存根
如果希望保持对前一个bean的访问,那么需要以某种方式保留对该远程对象的引用
- 如果您使用的是EJB2.x,那么您不应该在任何地方“缓存”存根;相反,获取bean句柄的引用并将句柄存储在某个地方
- 如果您使用的是EJB3.x,那么您可以简单地存储对存根的引用