来自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以外的其他服务器?
答案 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>