我有一个使用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;
似乎什么都没有用。由于
答案 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;