我是Java EE的新手,对EJB感到困惑。
据我了解,@ remote EJB使用RMI和JNDI进行通信。
在EJB3.0 Bean需要通过EJBHome接口实现远程接口之前-这样,我便知道如何使用RMI。
但是现在我只需要添加@remote批注,即可将其替换为ejb-jar.xml中的属性。
因此,问题是:如何在没有Serializible接口的情况下使用JNDI和在没有Remoteinterface的情况下使用RMI?
如果我的某些假设是错误的,请纠正我。
最佳答案
EJB3仍然在下面使用RMI,只是应用程序容器将负责为您自动生成和使用RMI存根和远程接口,并将它们映射到EJB3类。
在某些情况下,仍然需要使用Serializible
。参见this:
集群会话Bean(SLSB和SFSB)
首先,集群EJB3
SLSB或SFSB不需要实现Serializable。实际上,
建议他们不要。如果是集群式SLSB,则没有状态
复制发生,因此它们的实例变量甚至不需要
可序列化。但是,对于集群式SFSB,相同的序列化
用于SFSB钝化的规则适用于SFSB状态复制。在
换句话说,所有非瞬时实例变量
对bean,会话上下文或用户事务的引用必须是
可序列化的,或在复制时为null。有关更多信息
SFSB钝化(以及扩展复制,因为两者
如果需要序列化SFSB bean上下文),请检查
EJB3核心规范的4.2.1节。
集群实体Bean
这些仅在以下情况下需要标记为可序列化
集群实体实例将按值作为分离的值传递
对象(例如,通过远程接口)。否则就没有必要了
将其标记为可序列化。