和風細雨

          世上本無難事,心以為難,斯乃真難。茍不存一難之見于心,則運用之術(shù)自出。

          使用Spring2.0發(fā)送和接受JMS消息

          1.JmsQueueSender類,用于發(fā)送消息
          package com.sitinspring.springjms;

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

          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.FileSystemXmlApplicationContext;
          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 simpleSend() {
                  
          this.jmsTemplate.send(this.queue, new MessageCreator() {
                      
          public Message createMessage(Session session) throws JMSException {
                          
          return session.createTextMessage("hello queue world");
                      }

                  }
          );
              }

              
              
          public static void main(String[] args){
                  
                  ApplicationContext appContext 
          = new FileSystemXmlApplicationContext("spring-jms.xml");

                  JmsQueueSender jmsSender 
          = (JmsQueueSender)appContext.getBean("jmsQueueSender");        
                  jmsSender.simpleSend();
              }

          }


          2.ExampleListener,用于接受消息,他是一個Message Driven Pojo.
          package com.sitinspring.springjms;

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

          public class ExampleListener implements MessageListener {

              
          public void onMessage(Message message) {
                  
          //org.springframework.jms.listener.DefaultMessageListenerContainer102
                  if (message instanceof TextMessage) {
                      System.out.print(
          "I have received a msg:");
                      
          try {
                          System.out.println(((TextMessage) message).getText());
                      }
           catch (JMSException ex) {
                          
          throw new RuntimeException(ex);
                      }

                  }
           else {
                      
          throw new IllegalArgumentException(
                              
          "Message must be of type TextMessage");
                  }

              }

          }

          3.配置文件spring-jms.xml,所有配置均在其中.
          值得注意的是標有102處,如果你使用的是DefaultMessageListenerContainer,你將為異常所困擾.
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
          <beans>
              
          <!-- JMS 配置-->
              
          <bean id="jmsQueueSender"
                  
          class="com.sitinspring.springjms.JmsQueueSender">
                  
          <property name="connectionFactory" ref="connectionFactory" />
                  
          <property name="queue" ref="destination" />
              
          </bean>    

              
          <!-- and this is the attendant message listener container -->
              
          <bean id="listenerContainer"
                  
          class="org.springframework.jms.listener.DefaultMessageListenerContainer102">        
                  
          <property name="connectionFactory" ref="connectionFactory" />
                  
          <property name="concurrentConsumers" value="5" />
                  
          <property name="destination" ref="destination" />
                  
          <property name="messageListener" ref="messageListener" />
              
          </bean>
              
              
          <!-- this is the Message Driven POJO (MDP) -->
              
          <bean id="messageListener" class="com.sitinspring.springjms.ExampleListener" />

              
          <bean id="connectionFactory"
                  
          class="org.springframework.jndi.JndiObjectFactoryBean">
                  
          <property name="jndiName">
                      
          <value>MyJMSConnectionFactory</value>
                  
          </property>
                  
          <property name="jndiTemplate">
                      
          <ref local="jndiTemplate"></ref>
                  
          </property>
              
          </bean>

              
          <bean id="destination"
                  
          class="org.springframework.jndi.JndiObjectFactoryBean">
                  
          <property name="jndiName">
                      
          <value>MyJMSQueue</value>
                  
          </property>
                  
          <property name="jndiTemplate">
                      
          <ref local="jndiTemplate"></ref>
                  
          </property>
              
          </bean>

              
          <bean id="jmsTemplate"
                  
          class="org.springframework.jms.core.JmsTemplate">
                  
          <property name="connectionFactory">
                      
          <ref local="connectionFactory" />
                  
          </property>
                  
          <property name="defaultDestination">
                      
          <ref local="destination" />
                  
          </property>
              
          </bean>

              
          <!-- JNDI 配置 -->
              
          <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>
          </beans>


          程序下載(程序用到的jar請自行添加,主要是Weblogic.jar和Spring.jar及jakatar commons的一些包):
          http://www.aygfsteel.com/Files/sitinspring/SpringJMS20070910171622.rar

          參考資料下載:
          Spring2.0的參考手冊(兩個文件下載到同一目錄再解壓)
          http://www.aygfsteel.com/Files/junglesong/spring2.0_ref.part1.rar
          http://www.aygfsteel.com/Files/junglesong/spring2.0_ref.part2.rar

          posted on 2008-02-22 12:16 和風細雨 閱讀(666) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 始兴县| 延吉市| 高碑店市| 大同市| 旬邑县| 宜州市| 阿拉善左旗| 旌德县| 会东县| 宁武县| 阳朔县| 剑河县| 乡宁县| 镇平县| 绥宁县| 丹棱县| 雷波县| 汉阴县| 呼图壁县| 保德县| 安吉县| 沭阳县| 六安市| 和林格尔县| 济南市| 德安县| 彩票| 车致| 来凤县| 应用必备| 高尔夫| 琼海市| SHOW| 陆丰市| 白城市| 丰顺县| 静宁县| 东乌珠穆沁旗| 普洱| 蚌埠市| 彭泽县|