Spring框架提供了一个模板机制来隐藏Java APIs的细节。开发人员可以使用JDBCTemplate和JNDITemplate类来分别访问后台数据库和JEE资源(数据源,连接池)。JMS也不例外,Spring提供JMSTemplate类,因此开发人员不用为一个JMS实现去编写样本代码。接下来是在开发JMS应用程序时Spring所具有一些的优势。
- 提供JMS抽象API,简化了访问目标(队列或主题)和向指定目标发布消息时JMS的使用。
- 开发人员不需要关心JMS不同版本(例如JMS 1.0.2与JMS 1.1)之间的差异。
- 开发人员不必专门处理JMS异常,因为Spring为所有JMS异常提供了一个未经检查的异常,并在JMS代码中重新抛出。
实战:下面是我在学习过程中的一个入门实例
1. 在web.xml文件中配置一个spring用的上下文:
<context-param>
<param-name>contextConfigLocationparam-name>
<param-value>/WEB-INF/jmsconfig.xmlparam-value>
context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
listener-class>
listener>
2. 创建jmsconfig.xml用来装配jms,内容如下:
xml version="1.0" encoding="UTF-8"?>
DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"">
<beans>
<bean id="jmsConnectionFactory"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>UIL2ConnectionFactoryvalue>
property>
bean>
<bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>topic/scJmsvalue>
property>
bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<bean
class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory"
ref="jmsConnectionFactory"/>
bean>
property>
bean>
<bean id="messageProducer" class="co.transport.jms.MessageProducer">
<property name="template" ref="jmsTemplate"/>
<property name="destination" ref="destination"/>
bean>
<bean id="messageListener" class="co.transport.jms.MessageConsumer"/>
<bean id="listenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsConnectionFactory"/>
<property name="destination" ref="destination"/>
<property name="messageListener" ref="messageListener"/>
bean>
beans>
其中:
1) jmsConnectionFactory用的是Jboss自带的一个ConnectionFactory,可以在Jboss的deploy/jms目录下的uil2-service.xml文件中找到。
2) destination使用自定义的,需要在Jboss加一个配置文件,下面会介绍。
3) MessageProducer是消息发送方
4) MessageConsumer实现了一个MessageListener,监听是否收到消息。
3. 发送和接收消息的class如下:
MessageProducer.java
public class MessageProducer {
private JmsTemplate template;
private Destination destination;
public void send(final String message) {
template.send(destination, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
Message m = session.createTextMessage(message);
return m;
}
});
}
public void setDestination(Destination destination) {
this.destination = destination;
}
public void setTemplate(JmsTemplate template) {
this.template = template;
}
}
MessageConsumer.java
public class MessageConsumer implements MessageListener {
public void onMessage(Message message) {
System.out.println("****************************************");
System.out.println(message);
}
}
4.
写一个Servlet作为测试JmsTest.java(不要忘记在web.xml中配置这个servlet哦!)
public class JmsTest extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter pw = response.getWriter();
pw.println("");
pw.println("");
pw.println("");
pw.println("");
try {
ServletContext servletContext = this.getServletContext();
WebApplicationContext wac = WebApplicationContextUtils
.getRequiredWebApplicationContext(servletContext);
MessageProducer mp = (MessageProducer) wac.getBean("messageProducer");
mp.send("Message!!!!");
pw.println("success
");
} catch (JmsException e) {
pw.println(e);
}
pw.println("
");
pw.println("");
}
}
5.
在Jboss的deploy/jms目录下创建sc-jms-service.xml
xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.jboss.mq.server.jmx.Topic"
name="jboss.mq.destination:service=Topic,name=somcJms">
<depends optional-attribute-name="DestinationManager">
jboss.mq:service=DestinationManager
depends>
<depends optional-attribute-name="SecurityManager">
jboss.mq:service=SecurityManager
depends>
<attribute name="SecurityConf">
<security>
<role name="guest" read="true" write="true"/>
<role name="publisher" read="true" write="true" create="false"/>
<role name="durpublisher" read="true" write="true" create="true"/>
security>
attribute>
mbean>
server>
6.
将工程达成war包直接放到Jboss的deploy目录下即可,然后启动Jboss访问JmsTest这个Servlet,你会在控制台看到接受到的消息,至此,一个最简单的Jms实例完成了
阅读(2236) | 评论(0) | 转发(0) |