weblogic 與jms事例配置
阿新 • • 發佈:2017-12-11
als light ati table ram val 事先 else if null
1.在WEBLOGIC12中配置JMS服務器
參考鏈接:http://blog.csdn.net/gxlstone/article/details/41378949
2.創建java project編寫測試代碼
(1) 創建一個java project(不是web項目)
(2) 將weblogic安裝目錄中的wlclient.jar加入classpath中(註意:weblogic老版本的話使用weblogic.jar), 具體路徑:$Weblogic_HOME\wlserver_10.3\server\lib。
(3) 需要將javaee.jar加入到classpath,因為我們建的是java project項目,不會自動添加javaee包。註意:從官網下載javaee sdk,安裝後lib中有這個包。
package com.jms; import java.util.Hashtable; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueSender; import javax.jms.QueueSession; import javax.jms.Session; import javax.jms.TextMessage; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; //生產者 public class JMSSender { public static final String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory"; private static QueueConnectionFactory qconFactory; private static QueueConnection qcon; private static QueueSession qsession; private static QueueSender qsender; private static Queue queue; private static TextMessage msg; public static void init() throws NamingException, JMSException { //init JNDI context String JNDIFactory = "weblogic.jndi.WLInitialContextFactory";//define JNDI context factory String providerUrl = "t3://localhost:7001"; //define weblogic JMS url Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, JNDIFactory); env.put(Context.PROVIDER_URL, providerUrl); Context ctx = new InitialContext(env); String queueName = "SevenQueue";//生成者隊列 String connFactoryJNDI = "myJMSConnectionFactory";//工廠 //獲取一個JMS連接工廠是為了獲取與服務器的連接。前題是這個JMS工廠一定要事先創建好,註:查詢的是連接工廠的JNDI的名字,不是連接工廠的名字。 qconFactory = ((QueueConnectionFactory) ctx.lookup(connFactoryJNDI)); // 創建一個列隊或主題連接是為了獲取與JMS會話的Session qcon = qconFactory.createQueueConnection(); // 創建會話Session 是為了創建一個消息的發送者和發送內容類型。 qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); //創建一個列隊來存儲消息,是消息的存方的物理地址,前題是這個隊列需要在weblogic裏創建後。 queue = ((Queue) ctx.lookup(queueName)); ///創建一個消息的發送者 qsender = qsession.createSender(queue); //創建一個發送內容類型(Stream,byte,map,text,object)。 msg = qsession.createTextMessage();//一個字符串對象 //打開連接,設置發送文本內容。 qcon.start(); ctx = null; } public static void send(String message) throws JMSException { msg.setText(message);//設置發送內容 qsender.send(msg); } public static void close() throws JMSException { if (qsender != null) { qsender.close(); } if (qsession != null) { qsession.close(); } if (qcon != null) qcon.close(); } /** * @param args * @throws NamingException * @throws JMSException */ public static void main(String[] args) throws NamingException, JMSException { init(); send("haha"); close(); } }
package com.jms; import java.util.Hashtable; import java.util.Map; import javax.jms.BytesMessage; import javax.jms.JMSException; import javax.jms.MapMessage; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.ObjectMessage; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueReceiver; import javax.jms.QueueSession; import javax.jms.Session; import javax.jms.StreamMessage; import javax.jms.TextMessage; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import org.dom4j.Element; import com.utils.BASE64; import com.utils.XmlHelper; //消費者 public class JMSReceiver { public static void main(String[] args) throws NamingException, JMSException { //init JNDI context String JNDIFactory = "weblogic.jndi.WLInitialContextFactory";//define JNDI context factory String providerUrl = "t3://localhost:7001"; //define weblogic JMS url Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, JNDIFactory); env.put(Context.PROVIDER_URL, providerUrl); Context ctx = new InitialContext(env); //find connection factory String connFactoryJNDI = "myJMSConnectionFactory"; //jms connectionFactory JNDI name QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.lookup(connFactoryJNDI); //create queue connection QueueConnection qConn = (QueueConnection) connFactory.createConnection(); //create session QueueSession qSession = qConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); //find queue by JNDI lookup Queue queue = (Queue) ctx.lookup("SevenQueue"); //create receiver QueueReceiver qReceiver = qSession.createReceiver(queue); //create message listener qReceiver.setMessageListener(new MessageListener() { public void onMessage(Message msg) { String msgText = ""; double d = 0; try { if (msg instanceof TextMessage) { msgText = ((TextMessage) msg).getText(); } else if (msg instanceof StreamMessage) { msgText = ((StreamMessage) msg).readString(); d = ((StreamMessage) msg).readDouble(); } else if (msg instanceof BytesMessage) { byte[] block = new byte[1024]; ((BytesMessage) msg).readBytes(block); msgText = String.valueOf(block); } else if (msg instanceof MapMessage) { msgText = ((MapMessage) msg).getString("name"); } } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(msgText + " " + d); }}); qConn.start(); } }
weblogic 與jms事例配置