使用Spring2.0发送和接受JMS消息

使用Spring2.0发送和接受JMS消息

1.JmsQueueSender类,用于发送消息
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.blogjava.net/Files/sitinspring/SpringJMS20070910171622.rar

参考资料下载:
Spring2.0的参考手册(两个文件下载到同一目录再解压)
http://www.blogjava.net/Files/junglesong/spring2.0_ref.part1.rar
http://www.blogjava.net/Files/junglesong/spring2.0_ref.part2.rar

你可能感兴趣的:(使用Spring2.0发送和接受JMS消息)