1. 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