图3.3.1:创建JMS模块
选择一个server:
图3.3.2:创建JMS模块2
在刚才的模块创建一个资源,类型为外部服务器(foreign server)名为ForeignServer_JMS:
图3.3.3:创建模块资源--外部服务器
图3.3.4:创建模块资源--外部服务器2
外部服务器JND配置
图3.3.5:JNDI参数
在外部服务器创建两个目标:
图3.3.6:两个目标
及两个连接工厂:
图3.3.7:两个连接工厂
配置完之后,当然要写一个MDB测试一下:
消息驱动bean代码如下:
- package mq;
-
- import javax.annotation.Resource;
- import javax.ejb.ActivationConfigProperty;
- import javax.ejb.MessageDriven;
- import javax.jms.Message;
- import javax.jms.MessageListener;
- import javax.jms.QueueConnection;
- import javax.jms.QueueSender;
- import javax.jms.QueueSession;
- import javax.jms.Session;
- import javax.jms.TextMessage;
-
-
-
-
-
- @MessageDriven(name = "TestMDB2", mappedName = "jms/applicationJMSQueue",
- activationConfig = {
- @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
- })
- public class MQTestBean2 implements MessageListener {
-
- @Resource(mappedName = "jms/approvalJMSQueue")
- private javax.jms.Queue approvalJMSQueue;
- @Resource(mappedName = "jms/approvalFactory")
- private javax.jms.QueueConnectionFactory approvalFactory;
-
- public void onMessage(Message message) {
-
- try {
- String msg = ((TextMessage) message).getText();
- System.out.println("=> 收到申请: " + msg);
- sendMessage("同意申请:" + msg);
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
-
- private void sendMessage(String msg) throws Exception {
- QueueConnection conn = null;
- QueueSession session = null;
- try {
- conn = approvalFactory.createQueueConnection();
- session = conn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
- QueueSender sender = session.createSender(approvalJMSQueue);
- Message newMsg = session.createTextMessage(msg);
- sender.send(newMsg);
- System.out.println("=> 发送审批结果:" + msg);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- session.close();
- conn.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
package mq;
import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.QueueConnection;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
/**
*
* @author Justin
*/
@MessageDriven(name = "TestMDB2", mappedName = "jms/applicationJMSQueue",
activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class MQTestBean2 implements MessageListener {
@Resource(mappedName = "jms/approvalJMSQueue")
private javax.jms.Queue approvalJMSQueue;
@Resource(mappedName = "jms/approvalFactory")
private javax.jms.QueueConnectionFactory approvalFactory;
public void onMessage(Message message) {
try {
String msg = ((TextMessage) message).getText();
System.out.println("=> 收到申请: " + msg);
sendMessage("同意申请:" + msg);
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void sendMessage(String msg) throws Exception {
QueueConnection conn = null;
QueueSession session = null;
try {
conn = approvalFactory.createQueueConnection();
session = conn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueSender sender = session.createSender(approvalJMSQueue);
Message newMsg = session.createTextMessage(msg);
sender.send(newMsg);
System.out.println("=> 发送审批结果:" + msg);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
session.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
部署文件如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <weblogic-ejb-jar xmlns="http://www./ns/weblogic/90">
- <weblogic-enterprise-bean>
- <ejb-name>TestMDB2</ejb-name>
- <message-driven-descriptor>
- <destination-jndi-name>
- jms/applicationJMSQueue
- </destination-jndi-name>
- <connection-factory-jndi-name>
- jms/applicationFactory
- </connection-factory-jndi-name>
- </message-driven-descriptor>
- </weblogic-enterprise-bean>
- </weblogic-ejb-jar>
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-ejb-jar xmlns="http://www./ns/weblogic/90">
<weblogic-enterprise-bean>
<ejb-name>TestMDB2</ejb-name>
<message-driven-descriptor>
<destination-jndi-name>
jms/applicationJMSQueue
</destination-jndi-name>
<connection-factory-jndi-name>
jms/applicationFactory
</connection-factory-jndi-name>
</message-driven-descriptor>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
打包并发布到weblogic。
现在测试一下:
在MQ管理器中,在application队列放入一个消息:
图3.3.8.放入测试消息
如果所有配置正确,则MDB->MQTestBean2会接收到刚刚放入的消息,并进行处理,然后放到approval队列:
图3.3.9.weblogic服务器输出(netbeans控制台)
之后我们可以再到MQ管理器查看approval队列,可以看到MDB处理后的消息:
图3.3.10.到approval队列查看处理后的消息
OK,至此,我们成功地将MQ无缝地集成到了weblogic上,使部署在weblogic上的MDB可以像使用原生的JMS一样操控MQ队列了。