【问题标题】:Wildfly 9 @Resource lookup stopped workingWildfly 9 @Resource 查找停止工作
【发布时间】:2015-09-27 03:47:41
【问题描述】:

我有一个使用 JMS 队列的 web 应用程序,这在 Wildfly 8.2 上运行良好。但在 Wildfly 9.0 上,我遇到了命名异常。

根据指南中的示例: https://docs.jboss.org/author/display/WFLY9/Messaging+configuration

本地客户端可以使用 “java:jboss/exported/jms/queue/test”、“java:jms/queue/test”或更多 只需“jms/queue/test”:

standalone.xml:

<subsystem xmlns="urn:jboss:domain:messaging:2.0">
   <hornetq-server>
      [...]
      <jms-destinations>
         <jms-queue name="testQueue">
             <entry name="jms/queue/test"/>
             <entry name="java:jboss/exported/jms/queue/test"/>
         </jms-queue>
      </jms-destinations>
   </hornetq-server>
</subsystem>

Java 类:

@Inject
private JMSContext context;

@Resource(lookup="java:jboss/exported/jms/queue/test")
private Destination queueDestination;

...
private void foo() {
        JMSConsumer consumer = context.createConsumer(queueDestination);
}

升级到 Wildfly 到 9.0 Final 后,我在 context.createConsumer 上收到以下异常:

 java.lang.RuntimeException: javax.naming.NameNotFoundException: DefaultJMSConnectionFactory -- service jboss.naming.context.java.module.AAA.AAA.DefaultJMSConnectionFactory

我尝试将@Resource 查找更改为“java:jms/queue/test”或“jms/queue/test”

似乎没有任何效果。

谢谢

【问题讨论】:

    标签: jakarta-ee jms jndi wildfly


    【解决方案1】:

    您必须根据 JavaEE7 规范定义默认连接工厂。 http://www.oracle.com/technetwork/articles/java/jms20-1947669.html

    <pooled-connection-factory name="hornetq-ra">
    <transaction mode="xa"/>
    <connectors>
        <connector-ref connector-name="in-vm"/>
    </connectors>
    <entries>
        <entry name="java:/JmsXA"/>
        <!-- Global JNDI entry used to provide a default JMS Connection factory to EE application -->
        <entry name="java:jboss/DefaultJMSConnectionFactory"/>
    </entries>
    

    并设置默认绑定:

    <default-bindings jms-connection-factory="java:jboss/DefaultJMSConnectionFactory" ...."/>
    

    如果你想使用特定的连接工厂,那么你必须使用JMSConnectionFactory。如果没有这个注解,则使用默认的连接工厂。

    @Inject
    @JMSConnectionFactory("jms/customConnFactory")
    JMSContext ctx;
    

    【讨论】:

    • 问题是Wildfly 9.0 自带的standalone-full.xml 文件在&lt;default-bindings&gt; 中丢失了jms-connection-factory="java:jboss/DefaultJMSConnectionFactory"。不知道为什么当所有其他绑定都在那里时他们忽略了它。
    猜你喜欢
    • 1970-01-01
    • 2015-10-17
    • 2016-05-22
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    相关资源
    最近更新 更多