缺少 Wildfly 8.2.0 JMS 主题

Posted

技术标签:

【中文标题】缺少 Wildfly 8.2.0 JMS 主题【英文标题】:Wildfly 8.2.0 JMS Topic is missing 【发布时间】:2016-09-02 15:39:02 【问题描述】:

我已经使用 Wildfly 8.2.0 Final 设置了一个 Web 应用程序。我现在尝试创建一个 jms 主题并通过 2 个 bean 发送和接收一些消息。

Bean 1 是我的发件人/发布者:

@Stateless
public class ChatPublisherBean implements ChatPublisherLocal, ChatPublisherRemote 


@JMSConnectionFactory("java:/ConnectionFactory")
private ConnectionFactory connectionFactory;

@Resource(lookup = "java:global/jms/ChatRoomTopic")
private Topic topic;


//more code ...

Bean 2 我的接收者/消费者:

@MessageDriven(mappedName = "java:global/jms/ChatRoomTopic",
    messageListenerInterface = MessageListener.class,
    activationConfig = 
            @ActivationConfigProperty(
            propertyName = "destinationType",
            propertyValue = "javax.jms.Topic"),
            @ActivationConfigProperty(
            propertyName = "destination",
            propertyValue = "java:global/jms/ChatRoomTopic"))
public class ChatReceiverBean implements MessageListener, ChatReceiverLocal, ChatReceiverRemote 


@Inject
private ChatServiceLocal chatService;

@Inject
private ChatPublisherBean jmsConnectionBean;


//more code

如您所见,我使用 jms 2.0 的自动资源生成(或者至少我尝试过),它与 ConnectionFactory 配合得很好,因为我在那里使用标准工厂。

现在的问题是,当我尝试部署它时,找不到正确的主题。 Wildfly 给了我这个错误:

19:03:38,187 ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 2) JBAS014613: Operation ("deploy") failed - address: ([("deployment" => "app.ear")]) - failure description: "JBAS014771: Services with missing/unavailable dependencies" => [
"jboss.deployment.subunit.\"app.ear\".\"core-ejb.jar\".component.ChatReceiverBean.CREATE is missing [jboss.ra.hornetq-ra]",
"jboss.naming.context.java.comp.app.core-ejb.ChatPublisherBean.env.\"de.app.platform.chat.services.jms.ChatPublisherBean\".topic is missing [jboss.naming.context.java.global.jms.ChatRoomTopic]"
]
19:03:38,188 ERROR [org.jboss.as.server] (management-handler-thread - 2) JBAS015870: Deploy of deployment "app.ear" was rolled back with the following failure message: 
"JBAS014771: Services with missing/unavailable dependencies" => [
"jboss.deployment.subunit.\"app.ear\".\"core-ejb.jar\".component.ChatReceiverBean.CREATE is missing [jboss.ra.hornetq-ra]",
"jboss.naming.context.java.comp.app.core-ejb.ChatPublisherBean.env.\"de.app.platform.chat.services.jms.ChatPublisherBean\".topic is missing [jboss.naming.context.java.global.jms.ChatRoomTopic]"

我的standalone.xml中声明为标准的hornetq适配器似乎也有问题:

<mdb>
    <resource-adapter-ref resource-adapter-name="$ejb.resource-adapter-name:hornetq-ra"/>
     <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
 </mdb>

现在有人做错了吗?

【问题讨论】:

【参考方案1】:

我总是不得不在代码之外创建主题。我有一个小脚本可以运行来设置它们。相关部分是这样的:

$WILDFLY_HOME/bin/jboss-cli.sh --connect --command="jms-topic add --topic-address=ChatRoomTopic --entries=java:/jms/ChatRoomTopic

稍后,如果您想删除它:

$WILDFLY_HOME/bin/jboss-cli.sh --connect --command="jms-topic remove --topic-address=ChatRoomTopic

这是在 Wildfly 8.2 中完成的

【讨论】:

不幸的是,这在我的情况下不起作用,但无论如何 ;) 也许是另一个问题:你知道为什么你不能在你的代码中创建主题吗? 什么不起作用?服务器必须正在运行才能运行命令。一般来说,您不能在代码中创建主题 - 没有标准 API 可以做到这一点。

以上是关于缺少 Wildfly 8.2.0 JMS 主题的主要内容,如果未能解决你的问题,请参考以下文章

Wildfly 8.2:缺少 component.CREATE

从wildfly发送jms消息

在wildfly8中创建jms桥的问题

Spring Boot 2 重新部署到 Wildfly 10 后无法刷新 JMS 连接

Wildfly 上的 JMS 2.0 QueueBrowser 不返回消息

使用 WildFly 在 JMS 中进行 JAAS 身份验证:javax.jms.JMSSecurityException:HQ119032:用户:null 没有权限 = 在地址 2 上发送