有什么原因导致EJB类需要实现序列化呢?
我听说这与RMI在幕后使用有关。我知道RMI(远程方法调用)是如何工作的,服务器端注册了一个远程对象,只有远程对象的存根被发送到客户端,而不是整个对象。
因此,在RMI应用程序中,远程对象的方法需要使用可序列化的参数和返回值,因为它们会被发送到网络上,但不会发送远程对象本身。
因此,在RMI应用程序中,远程对象的方法需要使用可序列化的参数和返回值,因为它们会被发送到网络上,但不会发送远程对象本身。
旧的J2EE风格的EJB实现javax.ejb.EntityBean, javax.ejb.SessionBean和javax.ejb.MessageDrivenBean需要可序列化的原因是历史性的。这些接口扩展的原始javax.ejb.EnterpriseBean接口恰好自己扩展了java.io.Serializable。在早期的EJB时代,人们认为这是必要的,以便在JVM之间移动bean。
EJB实际上实现Serializable的所有实际理由都在EJB 2.0规范发布时消失了。
EJB 3的引入取消了任何这些接口(以及随后的java.io.Serializable)需要被实现的要求。
自EJB 2.0以来,没有EJB规范指定EJB必须是可序列化的。这只是由于接口继承而隐含地存在。