Java EJB3通信机制

Java EJB3通信机制,java,jakarta-ee,javabeans,Java,Jakarta Ee,Javabeans,我是JavaEE新手,对EJB感到困惑。 据我所知,@remoteejb正在使用RMI和JNDI进行通信。 在EJB3.0之前,beans需要通过EJBHome接口实现远程接口——这样我就理解了RMI是如何使用的。 但是现在我只需要放置@remote注释,它可以被ejb-jar.xml中的属性替换 所以,问题是:没有可序列化接口的JNDI和没有远程接口的RMI怎么可能使用 如果我的一些假设是错误的,请纠正我 EJB3仍然在底层使用RMI,除了应用程序容器将为您自动生成和使用RMI存根和远程接口,

我是JavaEE新手,对EJB感到困惑。 据我所知,@remoteejb正在使用RMI和JNDI进行通信。 在EJB3.0之前,beans需要通过EJBHome接口实现远程接口——这样我就理解了RMI是如何使用的。 但是现在我只需要放置@remote注释,它可以被ejb-jar.xml中的属性替换

所以,问题是:没有可序列化接口的JNDI和没有远程接口的RMI怎么可能使用

如果我的一些假设是错误的,请纠正我

  • EJB3仍然在底层使用RMI,除了应用程序容器将为您自动生成和使用RMI存根和远程接口,并将它们映射到EJB3类之外

  • 在某些情况下,您仍然需要使用可序列化的
    。见:

  • 群集会话bean(SLSB和SFSB)

    首先,集群EJB3 SLSB或SFSB不需要实现可序列化。事实上,它是 建议他们不要这样做。在集群SLSB的情况下,没有状态 复制发生,因此它们的实例变量甚至不需要 可序列化。但是,对于集群SFSB,相同的序列化 用于SFSB钝化的规则适用于SFSB状态复制。在里面 换句话说,所有非瞬态实例变量 必须删除对bean、会话上下文或用户事务的引用 可序列化,或在复制时为空。有关 SFSB钝化(以及扩展复制),因为 如果需要序列化SFSBbean上下文),请检查 EJB3核心规范第4.2.1节

    集群实体bean

    只有在以下情况下,才需要将其标记为可序列化 集群实体实例将作为分离实体按值传递 对象(例如,通过远程接口)。否则,就没有必要了 将它们标记为可序列化

    EJB使用RMI,但它并不完全等同于RMI。容器在运行时生成符合RMI规范的类和接口,并对您隐藏它们。这就是为什么在EJB项目中,远程客户端通常需要在其类路径中包含一组特定于容器的库。 在这方面,EJB2.0更加透明,因为它在幕后使用RMI,因此更加复杂