Wildfly 9 @Resource 查找停止工作
Wildfly 9 @Resource lookup stopped working
我有一个使用 JMS 队列的 Web 应用程序,它在 Wildfly 8.2 上运行良好。但是在 Wildfly 9.0 上我遇到了命名异常。
按照指南中的示例:
https://docs.jboss.org/author/display/WFLY9/Messaging+configuration
A local client could look it up using
"java:jboss/exported/jms/queue/test", "java:jms/queue/test", or more
simply "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 class:
@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"
似乎没有任何效果。
谢谢
您必须根据 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;
我有一个使用 JMS 队列的 Web 应用程序,它在 Wildfly 8.2 上运行良好。但是在 Wildfly 9.0 上我遇到了命名异常。
按照指南中的示例: https://docs.jboss.org/author/display/WFLY9/Messaging+configuration
A local client could look it up using "java:jboss/exported/jms/queue/test", "java:jms/queue/test", or more simply "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 class:
@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"
似乎没有任何效果。
谢谢
您必须根据 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;