为什么EJB需要实现可序列化的接口?

use*_*986 5 java serialization ejb java-ee

有没有理由为什么EJB类需要可序列化?我听说它与RMI正在被引用的事实有关.我知道RMI(远程方法调用)是如何工作的,在服务器端注册了一个远程对象,只有远程对象的存根被发送到客户端,而不是整个对象.

因此,在RMI应用程序中,远程对象的方法需要获取参数并返回可序列化的值,因为它们是通过网络发送的,而不是远程对象本身.

Ste*_*e C 11

实现javax.ejb.EntityBean,javax.ejb.SessionBeanjavax.ejb.MessageDrivenBean的旧J2EE样式EJBS 应该可序列化的原因是历史的.这些扩展发生的原始javax.ejb.EnterpriseBean接口本身扩展了java.io.Serializable.在早期的EJB时代,人们认为这有助于在JVM之间移动bean.

实际实现Serializable的EJB的所有实际原因在EJB 2.0规范发布时消失了.

EJB 3的引入消除了对任何这些接口(以及随后的java.io.Serializable)的实现要求.

没有EJB规范,因为EJB 2.0已经指定EJB必须是可序列化的.由于接口继承,这只是隐含的.

隐式要求与EJB 3.x完全消失.

  • 另请注意,有状态EJB的属性(state)应该是可序列化的,因为有状态EJB可以被钝化. (2认同)
  • @MaxG你问的是javax.ejb.EntityBeans还是javax.persistence.Entity bean?在前一种情况下,一些实现会缓存bean的状态而不是bean本身.在后一种现代JPA案例中,如果实体bean在一个在JVM实例之间复制/移动实例的环境中运行,则它们应该实现Serializable. (2认同)