和风细雨

世上本无难事,心以为难,斯乃真难。苟不存一难之见于心,则运用之术自出。

使用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

posted on 2008-02-22 12:16 和风细雨 阅读(654) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: