Interface 更改远程EJB接口中的本地EJB接口-结果到客户端应用程序

Interface 更改远程EJB接口中的本地EJB接口-结果到客户端应用程序,interface,dependency-injection,ejb-3.0,local,remote-access,Interface,Dependency Injection,Ejb 3.0,Local,Remote Access,我有一个使用本地EJB接口的JavaEE/JSF应用程序,我想将业务层与另一个客户机应用程序(在不同的JVM中)一起使用 因此,我需要使用远程EJB接口在新的客户端应用程序中使用依赖项注入 但是如果我更改EJB接口,我还必须更改“第一个”客户机应用程序的managedBean中的所有依赖项注入 本地接口使用按引用传递,而远程接口使用按深度复制传递。这意味着(1)所有参数和返回值都必须是可序列化的,(2)必须依赖于按引用传递,无论是性能(非常大的映射等)还是正确性(将对象传递给方法,更改对象,期望

我有一个使用本地EJB接口的JavaEE/JSF应用程序,我想将业务层与另一个客户机应用程序(在不同的JVM中)一起使用

因此,我需要使用远程EJB接口在新的客户端应用程序中使用依赖项注入


但是如果我更改EJB接口,我还必须更改“第一个”客户机应用程序的managedBean中的所有依赖项注入

本地接口使用按引用传递,而远程接口使用按深度复制传递。这意味着(1)所有参数和返回值都必须是可序列化的,(2)必须依赖于按引用传递,无论是性能(非常大的映射等)还是正确性(将对象传递给方法,更改对象,期望结果对调用方可见)


也就是说,当你说“本地EJB接口”,您是指
@Local
,还是指EJBLocalHome?如果是前者,那么您可以尝试更改为
@Remote
,它可能会正常工作。如果是后者,那么您需要更新接口以使用
EJBHome
/
EJBObject
,这意味着您需要向接口上的所有方法添加RemoteException,这意味着您至少需要更新调用方来处理异常。

>本地接口使用引用传递-虽然这是EJB规范使用的原始术语,但规范中现在有一个脚注说明了这一点。Java没有引用传递,而是传递指针(引用)按值。远程接口使用的是可以描述为“通过深度复制传递”的东西。当然,进行了更新。但我不确定将来是否可以重新训练我的大脑/手指不说“通过值传递”,尽管:-)。