1. Spring JMS整合类图

 


Active MQ (四) Spring JMS 整合
 

 

2. 程序

  • applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
 
 <!-- MQ Provider -->
 <bean name="actualJMSConnFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jms/NormalConnectionFactory"/>
 </bean>
 
 <bean name="queueSendTo" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jms/queue/sender"/>
 </bean>
 
 <bean name="queueReceiveFrom" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jms/queue/receiver"/>
 </bean>
 
 <!-- Spring JMS -->
 <bean name="jmsConnFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
  <property name="targetConnectionFactory" ref="actualJMSConnFactory"/>
 </bean>
 
 <bean name="sender" class="org.springframework.jms.core.JmsTemplate">
  <property name="connectionFactory" ref="jmsConnFactory"/>
  <property name="defaultDestination" ref="queueSendTo"/>
 </bean>
 
 <bean name="receiver" class="org.springframework.jms.core.JmsTemplate">
  <property name="connectionFactory" ref="jmsConnFactory"/>
  <property name="defaultDestination" ref="queueReceiveFrom"/>
  <property name="receiveTimeout" value="3000"/>
 </bean>
 
 <!-- Application -->
 <bean name="jmsSender" class="springJMS.JMSSender">
  <property name="sender" ref="sender"/>
 </bean>
 
 <bean name="jmsReceiver" class="springJMS.JMSReceiver">
  <property name="receiver" ref="receiver"/>
 </bean>
 
 <!-- ApplicationContext Aware -->
 <bean name="appContext" class="springJMS.AppContext"/>
 
</beans>

  • JMSSender

package springJMS;

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

import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

public class JMSSender {
 
 private JmsTemplate sender;

 /**
  * @return the sender
  */
 public JmsTemplate getSender() {
  return sender;
 }

 /**
  * @param sender the sender to set
  */
 public void setSender(JmsTemplate sender) {
  this.sender = sender;
 }
 
 public void send(final String msg) {
  sender.send(new MessageCreator() {
   public Message createMessage(Session session) throws JMSException {
    return session.createTextMessage(msg);
   }
  });
 }
 
}

  • JMSReceiver

package springJMS;

import javax.jms.Message;

import org.springframework.jms.core.JmsTemplate;

public class JMSReceiver {
 
 private JmsTemplate receiver;

 /**
  * @return the receiver
  */
 public JmsTemplate getReceiver() {
  return receiver;
 }

 /**
  * @param receiver the receiver to set
  */
 public void setReceiver(JmsTemplate receiver) {
  this.receiver = receiver;
 }
 
 public Message receive() {
  return receiver.receive();
 }
 
}

  • AppContext

package springJMS;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class AppContext implements ApplicationContextAware {
 
 private static ApplicationContext appContext;
 
 public static Object getBean(String name) {
  return appContext.getBean(name);
 }
 
 public void setApplicationContext(ApplicationContext applicationContext)
   throws BeansException {
  appContext = applicationContext;
 }

}

  • springJMS.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<jsp:directive.page import="springJMS.JMSSender"/>
<jsp:directive.page import="springJMS.AppContext"/>
<jsp:directive.page import="springJMS.JMSReceiver"/>
<jsp:directive.page import="javax.jms.Message"/>
<jsp:directive.page import="javax.jms.TextMessage"/>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
JMSSender sender = (JMSSender) AppContext.getBean("jmsSender");
JMSReceiver receiver = (JMSReceiver) AppContext.getBean("jmsReceiver");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>JMS Queue Test</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head>
 
  <body>
 <%sender.send("Nice to meet u!"); %>
 <%="Send : Nice to meet u!" %><br>
 <%
  Message message = receiver.receive();
  if (message instanceof TextMessage) {
 %>
  <%="Receive : " + ((TextMessage) message).getText() %>
 <%  
  }
 %> 
  </body>
 
</html>

 

3.测试

开启MQ,创建对应的QUEUE,运行http://orange5458.iteye.com/admin/blogs/988495

的消息处理器,启动TOMCAT,进入springJMS.jsp,刷新。

4.参考资料

Spring开发者手册 http://orange5458.iteye.com/admin/blogs/981099


 
 

相关文章: