【发布时间】:2014-04-23 04:10:28
【问题描述】:
我不确定这是否应该工作,但我正在尝试使用带有 wildfly 的 cdi 编写一个 JMS 生产者,并坚持将资源注入 cdi 托管 bean:
public class CdiProducer {
@Resource(name = "java:jboss/DefaultJMSConnectionFactory")
@Produces
QueueConnectionFactory qcf;
@Resource(name = "java:/queue/HELLOWORLDMDBQueue")
@Produces
@Hello
Queue helloWordQueue;
运行此程序我收到以下错误:
JBAS016076:将资源注入 CDI 托管 bean 时出错。找不到名为...的资源。
然而非常奇怪的是,当我将资源复制并粘贴到企业 bean 中时,一切正常!
@Stateless
public class QueueSender {
@Resource(name="java:jboss/DefaultJMSConnectionFactory")
QueueConnectionFactory qcf;
@Resource(name="java:/queue/HELLOWORLDMDBQueue")
Queue helloWordQueue;
队列定义为:
<jms-destinations>
<jms-queue name="HelloWorldQueue">
<entry name="/queue/HELLOWORLDMDBQueue"/>
<entry name="java:jboss/exported/queue/HELLOWORLDMDBQueue"/>
</jms-queue>
</jms-destinations>
这应该以这种方式工作吗?还是wildfly中的错误?
【问题讨论】:
-
你不应该使用@Resource(mappedName="...")吗?
-
@Rudi 为什么?资源应该能够使用本地 jndi 名称?
-
在您的问题中,您写了“JBAS016076:将资源注入 CDI 托管 bean 时出错。找不到名为 ... 的资源”,但是您似乎已经切断了关键部分。你能包括这个关键部分吗?
Queue或ConnectionFactory是否失败?此外,如果您使用的是 WildFly 8,您可以简单地注入JMSContext并避免很多这些默认值。 -
@John:两者都失败了,带有相同的错误消息,似乎与各种资源一致。至于JMSContext,我很想用,但是我们使用wildfly进行本地开发,最终产品需要部署在websphere 8.5上,只有JEE6/JMS 1.1,所以没有JMSContext :(