我想知道我是否有一个远程接口MyService
和相应的实现 EJB MyServiceBean
,我是否仍然可以使用注释将 bean 实例注入@EJB
到其他 ejbs 或来自运行在同一应用程序服务器上的 jsf 的托管 bean。
如果是这种情况,我是否必须将注释放在接口或实现上?例如:
@EJB
private MyService myService;
或者
@EJB
private MyServiceBean myService;
我想知道我是否有一个远程接口MyService
和相应的实现 EJB MyServiceBean
,我是否仍然可以使用注释将 bean 实例注入@EJB
到其他 ejbs 或来自运行在同一应用程序服务器上的 jsf 的托管 bean。
如果是这种情况,我是否必须将注释放在接口或实现上?例如:
@EJB
private MyService myService;
或者
@EJB
private MyServiceBean myService;
如果您从与 EJB 相同的 JVM 中的客户端访问 EJB,则不需要远程接口。远程接口由驻留在部署 EJB 的 JVM 之外的 EJB 客户端使用。因此,在您的特定情况下,您所需要的只是
@EJB
private MyServiceBean myService;
在您的情况下使用远程接口注入机制将导致不必要的往返来达到相同的结果。
不同 EJB 调用模式的用例是
@Remote
:表示远程业务接口。方法参数按值传递,需要作为 RMI 协议的一部分进行序列化。(引自 Apress 的初始 Java EE6 平台)
@Local
:表示本地业务接口。方法参数通过引用从客户端传递到 bean。(引自 Apress 的开头 Java EE6 平台)
无:这是没有指定接口的普通注入类型。在与 EJB 相同的 JVM 中,这很好。从设计的角度来看(松耦合原则),您可能希望使用@Local
注入方法
如何获取本地或远程企业 bean@EJB
的引用并不重要。使用注释
@EJB
ExampleBean exampleBean;