@EJB查找作为参数而不是硬编码

时间:2016-04-04 19:12:59

标签: java-ee jndi lookup ejb-3.1

我继承了一个Java EE Web应用程序,其中包含一组JSF,它使用EJB注入来访问@Remote接口:

@EJB(lookup = "java:global/myapp-business/myapp-services/CustomerFacadeBean")

它可以工作,但是当我正在审查部署人员的应用程序时,我想将其作为参数。

我认为开发人员必须有充分的理由只使用lookup,所以作为第一个尝试,我愿意复制相同的场景。

但是,我希望有意见使这种注射尽可能“便携”和“可配置”。如果我在Ejb 2的旧时代没有错,那么web.xml中就会有ejb-ref。

2 个答案:

答案 0 :(得分:1)

@EJB声明EJB引用,并且应用程序服务器需要在部署时支持EJB引用的可配置绑定。注释的lookup属性允许开发人员指定默认绑定,除非部署者覆盖它。您需要查阅应用程序服务器文档以确定如何配置此绑定。

注意,@EJB注释具有name属性,这是部署者必须配置的属性。如果未提供name属性,则默认为<class>/<member>。例如,如果类为test.MyBean且字段为myEjb,则EJB引用名称为test.MyBean/myEjb

答案 1 :(得分:0)

从J2EE 6+查找属性是JNDI查找以解析目标所必需的。旧版本中使用的JNDI查找的其他方式如下所示:@EJB(name =“myBean”)在组件命名空间中创建引用java:comp / env / myBean。 如果在属性中没有指定name,那么它会创建一个引用为java:comp / env / com.example.MyClass / myField