为什么在 Wildfly 12 中注入 @Resource 需要 "java:/" 前缀?
Why do I need "java:/" prefix for @Resource injection in Wildfly 12?
从 Weblogic 12 上的 运行 EAR 开始,我也需要让这个应用程序与 Wildfly 12 一起工作。
我们有一些 JMS 队列,我们在 Weblogic 上像这样注入:
@Resource(lookup = "jms/Queues/MYQUEUE")
private Queue destination;
@Resource(lookup = "jms/QueueConnectionFactories/MYQUEUECF")
private QueueConnectionFactory connectionFactory;
对于 Wildfly,我在独立模式下定义了队列-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;
没有 "java:/" 前缀,注入将不起作用。
不幸的是,这不适用于 Weblogic(即 leading/productive 系统)。
由于我无法更改 weblogic 配置,因此我必须使我的 Wildfly 配置与其兼容或更改注入代码,以便它在两个应用程序服务器上都能正常工作。
为什么 Wildfly 在 @Resource 注解中需要这个前缀才能正确注入?
有没有办法更改其配置,使代码在没有 "java:/" 前缀的情况下工作?
提前致谢;-)
马克.
PS:当我删除 @Resource 注释并进行上下文查找时,它在没有 "java:/" 的情况下成功 - 奇怪 ;-)
请看以下参考:
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 名称
代码。
从 Weblogic 12 上的 运行 EAR 开始,我也需要让这个应用程序与 Wildfly 12 一起工作。
我们有一些 JMS 队列,我们在 Weblogic 上像这样注入:
@Resource(lookup = "jms/Queues/MYQUEUE")
private Queue destination;
@Resource(lookup = "jms/QueueConnectionFactories/MYQUEUECF")
private QueueConnectionFactory connectionFactory;
对于 Wildfly,我在独立模式下定义了队列-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;
没有 "java:/" 前缀,注入将不起作用。
不幸的是,这不适用于 Weblogic(即 leading/productive 系统)。
由于我无法更改 weblogic 配置,因此我必须使我的 Wildfly 配置与其兼容或更改注入代码,以便它在两个应用程序服务器上都能正常工作。
为什么 Wildfly 在 @Resource 注解中需要这个前缀才能正确注入?
有没有办法更改其配置,使代码在没有 "java:/" 前缀的情况下工作?
提前致谢;-)
马克.
PS:当我删除 @Resource 注释并进行上下文查找时,它在没有 "java:/" 的情况下成功 - 奇怪 ;-)
请看以下参考:
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 名称代码。