如果我们从更高的层面分析EJB,比如无状态EJB Bean,它似乎是由RMI API创建的框架。我之所以这样说是因为:
在RMI中,我们也有远程接口。在命名查找时,我们获取存根,该存根调用骨架,骨架内部调用远程对象。
在EJB中,我们有home接口和remote接口,其实现由ejb容器提供(看起来就像存根)。在home接口上调用create会返回远程对象,在我看来,它会调用骨架,骨架内部调用会话对象。
请告诉我以上比较是否有意义?
如果我们从更高的层面分析EJB,比如无状态EJB Bean,它似乎是由RMI API创建的框架。我之所以这样说是因为:
在RMI中,我们也有远程接口。在命名查找时,我们获取存根,该存根调用骨架,骨架内部调用远程对象。
在EJB中,我们有home接口和remote接口,其实现由ejb容器提供(看起来就像存根)。在home接口上调用create会返回远程对象,在我看来,它会调用骨架,骨架内部调用会话对象。
请告诉我以上比较是否有意义?
是的,EJB规范一直要求RMI兼容性(某些应用服务器是基于CORBA构建的)。在EJB 3.0之前,远程EJB需要有一个扩展EJBObject(因此java.rmi.Remote)的组件接口,并且所有方法都需要抛出java.rmi.RemoteException。实际上,在早期规范版本中不存在本地接口。EJB规范试图通过允许容器管理远程对象的生命周期和可伸缩性来简化RMI。(当然,它还有其他非远程目标。)