EJB与RMI对比

4

如果我们从更高的层面分析EJB,比如无状态EJB Bean,它似乎是由RMI API创建的框架。我之所以这样说是因为:

在RMI中,我们也有远程接口。在命名查找时,我们获取存根,该存根调用骨架,骨架内部调用远程对象。

在EJB中,我们有home接口和remote接口,其实现由ejb容器提供(看起来就像存根)。在home接口上调用create会返回远程对象,在我看来,它会调用骨架,骨架内部调用会话对象。

请告诉我以上比较是否有意义?

1个回答

4

是的,EJB规范一直要求RMI兼容性(某些应用服务器是基于CORBA构建的)。在EJB 3.0之前,远程EJB需要有一个扩展EJBObject(因此java.rmi.Remote)的组件接口,并且所有方法都需要抛出java.rmi.RemoteException。实际上,在早期规范版本中不存在本地接口。EJB规范试图通过允许容器管理远程对象的生命周期和可伸缩性来简化RMI。(当然,它还有其他非远程目标。)


关于此问题还有一个吗?如果我们在远程对象上调用某个方法doDeposit(AccountInfo accInfo),存根是否会在内部使用ObjectOutputStream将accInfo写入某个文件,然后通过网络传输它。这是正确的吗?文件是唯一的通过网络传输任何Java对象的方式吗? - M Sach
如果远程对象在同一个JVM中,则存根将对“复制”对象进行一些优化(假设AccountInfo是可序列化的,而不是Remote)。否则,该对象将被“编组”(序列化)以通过套接字进行写入,然后在接收JVM上进行“取消编组”(反序列化)。文件系统不应直接参与其中。 - Brett Kail
小提示,EJB规范中实际上没有RMI要求。实际要求是应用程序必须编写为RMI“兼容”。一些供应商如WebLogic和OpenEJB拥有自己的客户端/服务器协议。一些像WebSphere则专门使用CORBA。 - David Blevins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接