我们的代码是这样的:
@Resource(name = "java:comp/resource/foo/bar/ONE_QUEUE")
private Queue queue;
但是,在一种部署场景中,队列注释应如下所示:
@Resource(name = "java:comp/resource/foo/bar/SECOND_QUEUE")
private Queue queue;
我想选择与 Maven 构建配置文件一起使用的名称。
我有什么选择?
这不是正确的做事方式。资源应添加到本地 jndi 名称各个 EJB 的数量。这是为了将bean代码中使用的jndi名称与全局 jndi 绑定由 bean 部署者设置。 bean 的映射本地 jndi 绑定和全局绑定可以通过以下方式处理ejb-jar.xml
和应用程序服务器特定的部署描述符。
因此,您应该声明您的@Resource
(这相当于<resource-ref>
指示资源引用名称和类型的元素)如下所示:
@Resource(name = "jms/queue/aQueue")
private Queue queue;
然后,在特定于应用程序服务器的部署描述符中(对于 GlassFish,它是sun-ejb-jar.xml
,对于 JBoss 来说是jboss.xml
,对于 WebLogic 来说是weblogic-ejb-jar.xml
等),声明一个<resource-ref>
元素指示资源引用名称和全局 jndi 绑定<jndi-name>
元素。
<resource-ref>
<res-ref-name>jms/queue/aQueue</res-ref-name>
<jndi-name>resource/foo/bar/ONE_QUEUE</jndi-name>
</resource-ref>
一旦你让整个事情正常工作,就可以很容易地使用 Maven 通过配置文件和过滤来针对不同的环境来改变这个特定于应用程序服务器的部署描述符。只需使用属性,激活资源过滤,并在配置文件中设置不同的值。像这样的东西:
<resource-ref>
<res-ref-name>jms/queue/aQueue</res-ref-name>
<jndi-name>${my.jndi.name}</jndi-name>
</resource-ref>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)