EJB3通信机制

时间:2018-01-30 17:14:09

标签: java java-ee javabeans

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

所以,问题是:如果没有Seri​​alizible接口和没有Remote接口的RMI,如何使用JNDI?

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

2 个答案:

答案 0 :(得分:2)

  1. EJB3仍在下面使用RMI,但应用程序容器将自动为您生成和使用RMI存根和远程接口,并将它们映射到EJB3类。

  2. 在某些情况下,您仍需要使用Serializible。见this

  3.   

    集群会话Bean(SLSB& SFSB)

         

    首先,集群EJB3   SLSB或SFSB不需要实现Serializable。事实上,它是   建议他们不要。对于群集SLSB,没有状态   发生复制,因此甚至不需要它们的实例变量   序列化。但是,对于群集的SFSB,相同的序列化   用于SFSB钝化的规则适用于SFSB状态复制。在   换句话说,所有非瞬态实例变量都不是   必须是对bean,会话上下文或用户事务的引用   serializable,或在复制时为null。有关的更多信息   SFSB钝化(并通过扩展复制,因为在两者中   在需要序列化SFSB bean上下文的情况下,请检查   EJB3核心规范的第4.2.1节。

         

    群集实体豆

         

    这些只需要标记为Serializable if   群集实体实例将作为分离的值传递   对象(例如,通过远程接口)。否则,没有必要   将它们标记为Serializable。

答案 1 :(得分:1)

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