在 Jboss 5.x 中,JMS 模型-队列(点对点)过去是按如下方式实现的(MDB 类和 ejb-jar.xml)
MDB
package receiver;
import javax.jms.JMSException;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import javax.jms.Message;
public class WildFlyJmsQueueReceiveLocal implements MessageListener {
public void onMessage(Message msg) {
try {
System.out.println("[WildFlyJmsQueueReceiveLocal][onMessage]There are three kinds of basic JMS connection-factory that depends on the type of connectors that is used.");
String msgText;
if (msg instanceof TextMessage) {
msgText = ((TextMessage)msg).getText();
} else {
msgText = msg.toString();
}
if (msgText.equalsIgnoreCase("quit")) {
synchronized(this) {
this.notifyAll(); // Notify main thread to quit
}
}
} catch (JMSException | InterruptedException jmse) {
jmse.printStackTrace();
}
}
}
ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
<display-name>MDB</display-name>
<enterprise-beans>
<message-driven>
<display-name>MDB1</display-name>
<ejb-name>MDB1</ejb-name>
<ejb-class>receiver.WildFlyJmsQueueReceiveLocal</ejb-class>
<transaction-type>Container</transaction-type>
<activation-config>
<activation-config-property>
<activation-config-property-name>destinationType</activation-config-property-name>
<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>destination</activation-config-property-name>
<activation-config-property-value>jms/queue/TestQ</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>maxSession</activation-config-property-name>
<activation-config-property-value>2</activation-config-property-value>
</activation-config-property>
</activation-config>
</message-driven>
</enterprise-beans>
</ejb-jar>
现在我正在从 jboss 5.x 迁移到 wildfly10。在 Wildfly 10 中,JMS 功能已使用“Apache ActiveMQ Artemis”实现。 所以在 Wildfly 10 中,首先我配置了队列“jms/queue/TestQ”并尝试部署相同的代码(在 jboss 5.x 中使用),它运行成功。我以为我必须创建“ActiveMQConnectionFactory”对象并执行进一步的操作,但事实并非如此。我在 Jboss 5.x 中使用的 JMS API 在 wildfly10 中运行良好。
JMS 发送方和接收方部署在同一个 Wildfly 实例上。我是否正确实现了 JMS 队列功能?这是在 Wildfly10 中执行的正确方法吗?如果没有,请引导我访问链接/文档。
我的阙是 我在 Jboss 5.x 中使用的 Java 代码(用于 JMS-Queue 实现)将在 Wildfly-10 中工作而无需任何更改?
对于 Jboss 5.x,请访问 JMS 链接:
https://docs.jboss.org/jbossas/guides/j2eeguide/r2/en/html/ch6.chapt.html