Wildfly 10 @Resource缺失/不可用的依赖关系

时间:2016-08-07 19:04:05

标签: java jms activemq ejb-3.0 wildfly-10

来自wildfly 10文档:

  

例如,绑定了以下jms-queue“testQueue”   “java:jboss / exported / jms / queue / test”表示远程客户端会   使用“jms / queue / test”查找此{{kms-queue}。本地客户可以   使用“java:jboss / exported / jms / queue / test”查找,   “java:jms / queue / test”,或者更简单地说是“jms / queue / test”

如果我使用

,请在我的MDB中
@Resource(mappedName = "java:/jboss/exported/jms/queue/TestQ")
Queue testQ;

它工作正常,但在尝试以下内容时:

@Resource(mappedName = "java:jms/queue/TestQ")
Queue testQ;

@Resource(mappedName = "jms/queue/TestQ")
Queue testQ;

在wildfly 10中部署应用程序时出现以下错误

  

{“WFLYCTL0180:缺少/不可用依赖项的服务”=> [“jboss.naming.context.java.module.app.app.env。\”com.example.jms.ExampleMdb \“。testQ缺失[jboss.naming.context.java.jboss.java:jms.queue。 TestQ]“]}

可能是什么问题?如果我使用 java:/ jboss / exported / jms / queue / TestQ 它是否适用于除wildfly以外的其他服务器?

1 个答案:

答案 0 :(得分:0)

如果您阅读资源的javadoc,它会说:

  

此资源应映射到的产品特定名称。   此资源的名称,由name定义   element或defaulta,是应用程序本地的名称   使用资源的组件。 (它是JNDI中的一个名字   java:comp/env命名空间。)许多应用程序服务器   提供一种将这些本地名称映射到资源名称的方法   应用服务器已知。这个映射名称通常是   全局 JNDI名称,但可以是任何表单的名称。

因此对于mappedName,您只能使用完整的jndi名称或java:comp / env中的名称。

你可能想要的是:

@Resource(lookup = "queue/TestQ")
Queue testQ;

然后在你的配置中设置如下:

<jms-queue name="classReportQueue">
    <entry name="queue/TestQ"/>
    <entry name="java:jboss/exported/jms/queue/TestQ"/>
</jms-queue>