在 WildFly 中配置/注入 JMS 连接工厂和主题
Posted
技术标签:
【中文标题】在 WildFly 中配置/注入 JMS 连接工厂和主题【英文标题】:Configuring/injecting a JMS connection factory and a topic in WildFly 【发布时间】:2015-05-02 01:13:45 【问题描述】:我想在 jBoss WildFly 8.2 上使用 JMS 做一些实验。
默认的 WildFly standalone-full.xml
配置文件有以下片段:
<hornetq-server>
<connectors>
...
<in-vm-connector name="in-vm" server-id="0"/>
</connectors>
...
<jms-connection-factories>
<connection-factory name="InVmConnectionFactory">
<connectors>
<connector-ref connector-name="in-vm"/>
</connectors>
<entries>
<entry name="java:/ConnectionFactory"/>
</entries>
</connection-factory>
...
</jms-connection-factories>
<jms-destinations>
<!-- this destination I have added myself as I need a "topic", but
the default configuration has only two preconfigured "queues". -->
<jms-topic name="MyTestTopic">
<entry name="java:/jms/topic/MyTestTopic"/>
</jms-topic>
</jms-destinations>
</hornetq-server>
我正在尝试通过以下方式将此连接工厂和此主题注入 EJB:
@Stateless
public class JmsPublisher
@Resource(mappedName = "java:/ConnectionFactory")
ConnectionFactory jmsConnectionFactory;
@Resource(mappedName = "java:/jms/topic/MyTestTopic")
Topic topic;
但我在部署时收到以下错误消息:
Operation ("deploy") failed ... Services with missing/unavailable dependencies" => ...
...JmsPublisher\".jmsConnectionFactory is missing [jboss.naming.context.java.ConnectionFactory]"
...JmsPublisher\".topic is missing [jboss.naming.context.java.jms.topic.MyTestTopic]"
我做错了什么?
【问题讨论】:
【参考方案1】:您应该使用 mappedName
注入您的目的地/连接工厂,并且您可能需要考虑 JMS 2.0 新 API - JMSContext
@Resource(mappedName = "java:/topic/someTopic")
private Topic topic;
假设您有这样的条目
<jms-topic name="someTopic">
<entry name="topic/someTopic"/>
</jms-topic>
对于连接工厂,建议使用默认注入点
@Resource
private ConnectionFactory connectionFactory;
但更好的是,只需使用 @Inject JMSContext context
并使用它发送消息。
【讨论】:
感谢您的回复!但我在注射时确实使用了mappedName
。我认为您响应中的前两个代码片段与我使用的代码相同。不是吗?
我的主题定义和你的不一样。
我试过你的代码。 topic
字段仍然存在相同的错误。 connectionFactory
字段的错误消失了。可能那里注入了什么。
当您说代码时,您的意思是描述符更改?请更新您的问题以澄清。
我更新了 XML(standalone-full.xml
)和我的 Java 代码。我从您的答案中复制了所有三个 sn-ps 并尝试部署。如果您在我的问题中需要更多信息,请说出您想看的内容。【参考方案2】:
正如here 解释的那样,standalone.xml
支持 Java EE Web-Profile 以及一些扩展,standalone-full.xml
支持 Java EE Full-Profile。
我的问题是我在standalone-full.xml
中定义了JMS 连接工厂和JMS 主题。 jBoss WildFly 默认使用standalone.xml
。
this question 的答案解释了如何配置 WildFly 以使用 standalone-full.xml
而不是 standalone.xml
。切换到standalone-full.xml
解决了我的问题。
【讨论】:
以上是关于在 WildFly 中配置/注入 JMS 连接工厂和主题的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 2 重新部署到 Wildfly 10 后无法刷新 JMS 连接
如何使用 ActiveMQ Artemis 在 Wildfly 24 服务上配置 jms-queue