圖3.3.1:創(chuàng)建JMS模塊
選擇一個server:
圖3.3.2:創(chuàng)建JMS模塊2
在剛才的模塊創(chuàng)建一個資源,類型為外部服務(wù)器(foreign server)名為ForeignServer_JMS:
圖3.3.3:創(chuàng)建模塊資源--外部服務(wù)器
圖3.3.4:創(chuàng)建模塊資源--外部服務(wù)器2
外部服務(wù)器JND配置
圖3.3.5:JNDI參數(shù)
在外部服務(wù)器創(chuàng)建兩個目標(biāo):
圖3.3.6:兩個目標(biāo)
及兩個連接工廠:
圖3.3.7:兩個連接工廠
配置完之后,當(dāng)然要寫一個MDB測試一下:
消息驅(qū)動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("=> 發(fā)送審批結(jié)果:" + 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("=> 發(fā)送審批結(jié)果:" + 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.bea.com/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.bea.com/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>
打包并發(fā)布到weblogic。
現(xiàn)在測試一下:
在MQ管理器中,在application隊列放入一個消息:
圖3.3.8.放入測試消息
如果所有配置正確,則MDB->MQTestBean2會接收到剛剛放入的消息,并進(jìn)行處理,然后放到approval隊列:
圖3.3.9.weblogic服務(wù)器輸出(netbeans控制臺)
之后我們可以再到MQ管理器查看approval隊列,可以看到MDB處理后的消息:
圖3.3.10.到approval隊列查看處理后的消息
OK,至此,我們成功地將MQ無縫地集成到了weblogic上,使部署在weblogic上的MDB可以像使用原生的JMS一樣操控MQ隊列了。