Wildfly 9 @Resource查找停止工作

时间:2015-07-09 00:25:37

标签: java-ee jms jndi wildfly

我有一个使用JMS队列的webapp,这在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查找更改为&#34; java:jms / queue / test&#34;或者&#34; jms / queue / test&#34;

似乎什么都没有用。

由于

1 个答案:

答案 0 :(得分:2)

您必须根据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;