當柳上原的風吹向天際的時候...

          真正的快樂來源于創造

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks
          使用Spring的MDP,我們可以與JMS服務提供者通信,向隊列或是主題發送或消費JMS消息,下面是兩個示例程序,分別是與隊列和主題通信,兩個程序大同小異,主要是配置上有些許區別,其中Weblogic中的JMS相關配置部分請見“Weblogic9.2中JMS的相關配置”。

          為了減少體積,這兩個程序去除了庫,這些庫是commons-logging-1.0.4.jar,dom4j-1.6.1.jar,log4j-1.2.14.jar,mysql-connector-java-5.0.6-bin.jar,spring.jar,weblogic.jar,其中mysql-connector-java-5.0.6-bin.jar不是必要的,因為與數據庫連接的部分程序已經刪除。大家可以自行尋找這些jar包加入工程中。

          與隊列通信的程序下載地址如下:
          http://www.aygfsteel.com/Files/heyang/SpringJMS_Topic20090924103204.rar

          此程序的Spring配置文件:
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
          <beans>
              
          <!-- jndiTemplate 配置 -->
              
          <bean id="jndiTemplate"
                  class
          ="org.springframework.jndi.JndiTemplate">
                  
          <property name="environment">
                      
          <props>
                          
          <prop key="java.naming.factory.initial">
                              weblogic.jndi.WLInitialContextFactory
                          
          </prop>
                          
          <prop key="java.naming.provider.url">
                              t3://localhost:7001
                          
          </prop>
                          
          <prop key="java.naming.factory.url.pkgs">
                              weblogic.jndi.factories
                          
          </prop>
                      
          </props>
                  
          </property>
              
          </bean>
              
              
          <!-- JMS隊列 配置 -->
              
          <bean id="destination"
                  class
          ="org.springframework.jndi.JndiObjectFactoryBean">
                  
          <property name="jndiName">
                      
          <value>MyJmsQueue</value>
                  
          </property>
                  
          <property name="jndiTemplate">
                      
          <ref local="jndiTemplate"></ref>
                  
          </property>
              
          </bean>
              
               
          <!-- JMS連接工廠 配置 -->
              
          <bean id="connectionFactory"
                  class
          ="org.springframework.jndi.JndiObjectFactoryBean">
                  
          <property name="jndiName">
                      
          <value>MyJmsConnectionFactory</value>
                  
          </property>
                  
          <property name="jndiTemplate">
                      
          <ref local="jndiTemplate"></ref>
                  
          </property>
              
          </bean>
              
              
          <!-- jmsTemplate 配置 -->
              
          <bean id="jmsTemplate"
                  class
          ="org.springframework.jms.core.JmsTemplate">
                  
          <property name="connectionFactory">
                      
          <ref local="connectionFactory" />
                  
          </property>
                  
          <property name="defaultDestination">
                      
          <ref local="destination" />
                  
          </property>
              
          </bean>    
              
              
          <!-- JMS 消息發送者 配置-->
              
          <bean id="jmsQueueSender"
                  class
          ="com.heyang.sender.JmsQueueSender">
                  
          <property name="connectionFactory" ref="connectionFactory" />
                  
          <property name="queue" ref="destination" />
              
          </bean>    

              
          <!-- JMS 消息監聽容器 -->
              
          <bean id="listenerContainer"
                  class
          ="org.springframework.jms.listener.DefaultMessageListenerContainer">        
                  
          <property name="connectionFactory" ref="connectionFactory" />
                  
          <property name="concurrentConsumers" value="1" />
                  
          <property name="destination" ref="destination" />
                  
          <property name="messageListener" ref="messageListener" />
              
          </bean>
              
              
          <!-- Message Driven POJO (MDP 消息驅動POJO) -->
              
          <bean id="messageListener" class="com.heyang.receiver.JmsQueueListener" />    
           
          </beans>

          消息發送者源碼:
          package com.heyang.sender;

          import java.io.File;

          import javax.jms.ConnectionFactory;
          import javax.jms.JMSException;
          import javax.jms.Message;
          import javax.jms.Queue;
          import javax.jms.Session;

          import org.dom4j.Document;
          import org.dom4j.DocumentException;
          import org.dom4j.Element;
          import org.dom4j.io.SAXReader;
          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;
          import org.springframework.jms.core.JmsTemplate;
          import org.springframework.jms.core.JmsTemplate102;
          import org.springframework.jms.core.MessageCreator;

          public class JmsQueueSender{
              
          private JmsTemplate jmsTemplate;

              
          private Queue queue;

              
          public void setConnectionFactory(ConnectionFactory cf) {
                  
          this.jmsTemplate = new JmsTemplate102(cf, false);
              }

              
          public void setQueue(Queue queue) {
                  
          this.queue = queue;
              }
              
              
          public void sendMsg(final String msg) {
                  
          this.jmsTemplate.send(this.queue, new MessageCreator() {
                      
          public Message createMessage(Session session) throws JMSException {
                          
          return session.createTextMessage(msg);
                      }
                  });
              }
              
              
          public static void main(String[] args) throws Exception{
                  ApplicationContext appContext 
          = new ClassPathXmlApplicationContext("bean.xml");

                  JmsQueueSender jmsSender 
          = (JmsQueueSender)appContext.getBean("jmsQueueSender");        
                  jmsSender.sendMsg(readProvinceMsgFromXMl(
          "msg.xml"));
                  System.out.println(
          "消息發送完畢");
              }

              
          /**
               * 從XML文件中讀取文本
               * 
          @param xmlFile
               * 
          @throws DocumentException 
               
          */
              
          public static String readProvinceMsgFromXMl(String xmlFile) throws DocumentException{
                  SAXReader reader
          =new SAXReader();
                  Document document
          =reader.read(new File(xmlFile));
                  Element root
          =document.getRootElement();
                  
          return root.asXML();
              }
          }

          消息消費者源碼:
          package com.heyang.receiver;

          import javax.jms.Message;
          import javax.jms.MessageListener;
          import javax.jms.TextMessage;

          import org.dom4j.Document;
          import org.dom4j.DocumentHelper;
          import org.dom4j.Element;

          public class JmsQueueListener implements MessageListener {
              
          public void onMessage(Message message) {
                  
          if (message instanceof TextMessage) {
                      
          try {
                          String msg
          =((TextMessage) message).getText();                
                          System.out.print(
          "已經收到消息:"+msg);
                      
                          Document document
          =DocumentHelper.parseText(msg);
                          Element root
          =document.getRootElement();
                          
                          System.out.println(root.asXML());

                      } 
          catch (Exception ex) {
                          
          throw new RuntimeException(ex);
                      }
                  } 
              }
          }   

          與主題通信的程序下載地址如下:
          http://www.aygfsteel.com/Files/heyang/SpringJMS_Queue20090924103214.rar

          此程序的配置文件如下:
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
          <beans>
              
          <!-- jndiTemplate 配置 -->
              
          <bean id="jndiTemplate"
                  class
          ="org.springframework.jndi.JndiTemplate">
                  
          <property name="environment">
                      
          <props>
                          
          <prop key="java.naming.factory.initial">
                              weblogic.jndi.WLInitialContextFactory
                          
          </prop>
                          
          <prop key="java.naming.provider.url">
                              t3://localhost:7001
                          
          </prop>
                          
          <prop key="java.naming.factory.url.pkgs">
                              weblogic.jndi.factories
                          
          </prop>
                      
          </props>
                  
          </property>

              
          </bean>
              
              
          <!-- JMS主題 配置 -->
              
          <bean id="destination"
                  class
          ="org.springframework.jndi.JndiObjectFactoryBean">
                  
          <property name="jndiName">
                      
          <value>MyJmsTopic</value>
                  
          </property>
                  
          <property name="jndiTemplate">
                      
          <ref local="jndiTemplate"></ref>
                  
          </property>
              
          </bean>
              
               
          <!-- JMS連接工廠 配置 -->
              
          <bean id="connectionFactory"
                  class
          ="org.springframework.jndi.JndiObjectFactoryBean">
                  
          <property name="jndiName">
                      
          <value>MyJmsConnectionFactory</value>
                  
          </property>
                  
          <property name="jndiTemplate">
                      
          <ref local="jndiTemplate"></ref>
                  
          </property>
              
          </bean>
              
              
          <!-- jmsTemplate 配置 -->
              
          <bean id="jmsTemplate"
                  class
          ="org.springframework.jms.core.JmsTemplate">
                  
          <property name="connectionFactory">
                      
          <ref local="connectionFactory" />
                  
          </property>
                  
          <property name="defaultDestination">
                      
          <ref local="destination" />
                  
          </property>
              
          </bean>    
              
              
          <!-- JMS 消息發送者 配置-->
              
          <bean id="jmsSender"
                  class
          ="com.heyang.sender.JmsSender">
                  
          <property name="connectionFactory" ref="connectionFactory" />
                  
          <property name="topic" ref="destination" />
              
          </bean>    

              
          <!-- JMS 消息監聽容器 -->
              
          <bean id="listenerContainer"
                  class
          ="org.springframework.jms.listener.DefaultMessageListenerContainer">        
                  
          <property name="connectionFactory" ref="connectionFactory" />
                  
          <property name="concurrentConsumers" value="2" />
                  
          <property name="destination" ref="destination" />
                  
          <property name="messageListener" ref="messageListener" />
              
          </bean>
              
              
          <!-- Message Driven POJO (MDP 消息驅動POJO) -->
              
          <bean id="messageListener" class="com.heyang.receiver.JmsListener" />    
           
          </beans>

          消息發布者源碼:
          package com.heyang.sender;

          import java.io.File;

          import javax.jms.ConnectionFactory;
          import javax.jms.JMSException;
          import javax.jms.Message;
          import javax.jms.Session;
          import javax.jms.Topic;

          import org.dom4j.Document;
          import org.dom4j.DocumentException;
          import org.dom4j.Element;
          import org.dom4j.io.SAXReader;
          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;
          import org.springframework.jms.core.JmsTemplate;
          import org.springframework.jms.core.JmsTemplate102;
          import org.springframework.jms.core.MessageCreator;

          public class JmsSender{
              
          private JmsTemplate jmsTemplate;

              
          private Topic topic;

              
          public void setConnectionFactory(ConnectionFactory cf) {
                  
          this.jmsTemplate = new JmsTemplate102(cf, true);
              }

              
          public void setTopic(Topic queue) {
                  
          this.topic = queue;
              }
              
              
          public void sendMsg(final String msg) {
                  
          this.jmsTemplate.send(this.topic, new MessageCreator() {
                      
          public Message createMessage(Session session) throws JMSException {
                          
          return session.createTextMessage(msg);
                      }
                  });
              }
              
              
          public static void main(String[] args) throws Exception{
                  ApplicationContext appContext 
          = new ClassPathXmlApplicationContext("bean.xml");

                  JmsSender jmsSender 
          = (JmsSender)appContext.getBean("jmsSender");        
                  jmsSender.sendMsg(readProvinceMsgFromXMl(
          "msg.xml"));
                  System.out.println(
          "消息發送完畢");
              }

              
          /**
               * 從XML文件中讀取文本
               * 
          @param xmlFile
               * 
          @throws DocumentException 
               
          */
              
          public static String readProvinceMsgFromXMl(String xmlFile) throws DocumentException{
                  SAXReader reader
          =new SAXReader();
                  Document document
          =reader.read(new File(xmlFile));
                  Element root
          =document.getRootElement();
                  
          return root.asXML();
              }
          }

          消息訂閱者源碼:
          package com.heyang.receiver;

          import javax.jms.Message;
          import javax.jms.MessageListener;
          import javax.jms.TextMessage;

          import org.dom4j.Document;
          import org.dom4j.DocumentHelper;
          import org.dom4j.Element;

          public class JmsListener implements MessageListener {
              
          public void onMessage(Message message) {
                  
          if (message instanceof TextMessage) {
                      
          try {
                          String msg
          =((TextMessage) message).getText();                
                          System.out.print(
          "已經收到消息:"+msg);
                      
                          Document document
          =DocumentHelper.parseText(msg);
                          Element root
          =document.getRootElement();
                          
                          System.out.println(root.asXML());
                      } 
          catch (Exception ex) {
                          
          throw new RuntimeException(ex);
                      }
                  } 
              }
          }

          posted on 2009-09-24 10:45 何楊 閱讀(1054) 評論(0)  編輯  收藏
          主站蜘蛛池模板: 克什克腾旗| 林州市| 徐汇区| 都匀市| 华宁县| 贵溪市| 秀山| 蒙阴县| 乌鲁木齐市| 云霄县| 郸城县| 隆林| 佛坪县| 成安县| 乐东| 吉林省| 泽州县| 抚顺县| 铁岭县| 鹤庆县| 南丰县| 扎赉特旗| 五原县| 晋城| 绵竹市| 济南市| 松桃| 古田县| 喀喇| 新丰县| 任丘市| 平果县| 乌鲁木齐县| 武汉市| 孟村| 将乐县| 南昌县| 大悟县| 永登县| 滦南县| 新河县|