繁体   English   中英

Wildfly 10 @Resource缺少/不可用的依赖项

[英]Wildfly 10 @Resource Missing/Unavailable Dependencies

从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以外的其他服务器一起使用吗?

如果您阅读了Resource的Javadoc,它会说:

此资源应映射到的产品特定名称。 该资源的名称(由name元素定义或默认)是使用该资源的应用程序组件本地的名称。 (这是JNDI java:comp/env命名空间中的名称。)许多应用程序服务器提供了一种将这些本地名称映射到应用程序服务器已知资源名称的方法。 JNDI name, but may be a name of any form. 此映射的名称通常是 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM