为什么我需要" java:/" Wildfly 12中@Resource注入的前缀?

时间:2018-05-02 10:06:25

标签: java java-ee jboss resources wildfly

从Weblogic 12上运行的EAR开始,我需要让这个应用程序与Wildfly 12一起使用。

我们有一些JMS队列,我们​​在Weblogic上注入了这样的队列:

@Resource(lookup = "jms/Queues/MYQUEUE")
private Queue destination;

@Resource(lookup = "jms/QueueConnectionFactories/MYQUEUECF")
private QueueConnectionFactory connectionFactory;

使用Wildfly我在standalone-full.xml中定义了队列

<jms-queue name="MYQUEUE" entries="jms/Queues/MYQUEUE" durable="true"/>
<connection-factory name="MYQUEUECF" entries="jms/QueueConnectionFactories/MYQUEUECF" connectors="in-vm"/>

但是服务器启动时注入失败。

service jboss.naming.context.java.comp.XXX.ejb.JMSMessageProducer.env.jms.Queues.MYQUEUE (missing) dependents: [service jboss.naming.context.java.comp.XXX.ejb.JMSMessageProducer.env."com.xxx.webservices.components.communication.ejb.JMSMessageProducerBean".destination] [[...]

要解决此问题,我需要使用

@Resource(lookup = "java:/jms/Queues/MYQUEUE")
private Queue destination;

没有&#34; java:/&#34;前缀,注射赢了工作。

不幸的是,这不适用于Weblogic(这是领先/生产系统)。

由于我无法更改weblogic配置,因此我必须使我的Wildfly配置与其兼容或更改注入代码,以便它可以在两个应用服务器上运行。

为什么Wildfly在@Resource注释中需要这个前缀才能正确注入?

有没有办法改变它的配置,所以代码可以在没有&#34; java:/&#34;前缀?

提前致谢; - )

标记。

PS:当我删除@Resource注释并进行上下文查找时,它会在没有&#34; java:/&#34;的情况下成功。 - 奇怪; - )

1 个答案:

答案 0 :(得分:0)

请查看以下参考文献:

https://developer.jboss.org/thread/261022

如果要在其中找到,我要引用该片段:

<?xml version="1.0" encoding="UTF-8"?>  
<jboss-web>  
  <resource-ref>  
    <res-ref-name>jdbc/fs</res-ref-name>  
    <jndi-name>java:jboss/datasources/FS</jndi-name>  
  </resource-ref>  
</jboss-web>  

使用上面的部署描述符,您可以说某个资源名称映射到您喜欢的任何jndi名称。 因此,您可以将资源批注注入与可在weblogic中使用的名称一起使用,并将它们映射到需要java://

的tje wildfly jndi名称。

代码。