【发布时间】:2018-05-02 10:06:24
【问题描述】:
从在 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;
没有“java:/”前缀,注入将不起作用。
不幸的是,这不适用于 Weblogic(这是领先/高效的系统)。
由于我无法更改 weblogic 配置,我必须使我的 Wildfly 配置与其兼容或更改注入代码,以便它在两个应用服务器上都能正常工作。
为什么Wildfly 需要在@Resource 注解中使用这个前缀才能正确注入?
有没有办法改变它的配置,让代码在没有“java:/”前缀的情况下工作?
提前致谢 ;-)
标记。
PS:当我删除 @Resource 注释并进行上下文查找时,它会在没有“java:/”的情况下成功 - 奇怪 ;-)
【问题讨论】:
-
好问题...但是您是否在 Wildfly 上进行测试然后部署到 Weblogic?
-
啊,你认为我们的开发环境是 Wildfly 而产品是 Weblogic?不——我们正在评估 Wildfly 作为替代目标,目前现有的代码库应该可以在两个应用服务器上运行。稍后我们将有两个生产环境 - 旧的使用 Weblogic,另一个使用 Wildfly。
标签: java jakarta-ee jboss resources wildfly