我是Java EE的新手,对EJB感到困惑。 据我所知,@remote EJB正在使用RMI和JNDI进行通信。 在EJB3.0 bean需要通过EJBHome接口实现Remote接口之前 - 这样我理解了如何使用RMI。 但是现在我只需要放置@remote注释,它可以被ejb-jar.xml中的属性替换。
所以,问题是:如果没有Serializible接口和没有Remote接口的RMI,如何使用JNDI?
如果我的一些假设是错误的,请纠正我。
答案 0 :(得分:2)
EJB3仍在下面使用RMI,但应用程序容器将自动为您生成和使用RMI存根和远程接口,并将它们映射到EJB3类。
在某些情况下,您仍需要使用Serializible
。见this:
集群会话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的事实更加透明,因此更加复杂。