我是Java的新手,对EJB感到困惑。据我所知,@remote EJB使用RMI和JNDI进行通信。在EJB3.0Bean需要通过EJBHome接口实现远程接口之前,我理解了RMI是如何使用的。但现在我只需要放置@remote注释,它可以由ejb-jar.xml中的属性替换。
因此,问题是:没有Serializible接口的JNDI和没有远程接口的RMI怎么可能使用JNDI?
如果我的一些假设是错误的,请纠正我。
发布于 2018-01-31 01:29:30
Serializible。请参阅this群集会话Bean (SLSB和SFSB)
首先,集群EJB3 SLSB或SFSB不需要实现Serializable。事实上,我们建议它们不要这样做。在集群SLSB的情况下,不会发生状态复制,所以它们的实例变量甚至不需要是可序列化的。但是,对于群集SFSB,用于SFSB钝化的相同序列化规则也适用于SFSB状态复制。换句话说,所有非引用bean、会话上下文或用户事务的非瞬态实例变量必须是可序列化的,或者在复制时为null。有关SFSB钝化(以及扩展复制,因为在这两种情况下都需要序列化SFSB bean上下文)的更多信息,请查看EJB3核心规范的4.2.1节。
群集实体Bean
只有当集群实体实例要通过值作为分离对象传递(例如,通过远程接口)时,才需要将这些实例标记为可序列化。否则,就没有必要将它们标记为可序列化的。
发布于 2018-01-31 01:31:24
EJB使用RMI,但它并不完全等同于RMI。容器在运行时生成符合RMI规范的类和接口,并对您隐藏它们。这就是为什么在EJB项目中,您的远程客户端通常需要在其类路径中包含一组特定于容器的库。在这一点上,EJB2.0对它在幕后使用RMI的事实更加透明,因此更加复杂。
https://stackoverflow.com/questions/48527013
复制相似问题