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

Junglesong 发表于 2008-04-05 14:46:43

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

收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定