Spring JMS
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>contextConfigLocation</param-name>
<param-value>/WEB-INF/jmsconfig.xml</param-value>
</context-param>
<!-- 配置Spring容器 -->
<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"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="jmsConnectionFactory"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>UIL2ConnectionFactory</value>
</property>
</bean>
<bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>topic/scJms</value>
</property>
</bean>
<!-- Spring JmsTemplate config -->
<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>
<!-- POJO which send Message uses Spring JmsTemplate --> <!--配置消息发送者-->
<bean id="messageProducer" class="co.transport.jms.MessageProducer">
<property name="template" ref="jmsTemplate"/>
<property name="destination" ref="destination"/>
</bean>
<!-- Message Driven POJO (MDP) -->
<bean id="messageListener" class="co.transport.jms.MessageConsumer"/>
<!-- listener container,MDP无需实现接口 -->
<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("<html>");
pw.println("<head>");
pw.println("</head>");
pw.println("<body>");
try {
ServletContext servletContext = this.getServletContext();
WebApplicationContext wac = WebApplicationContextUtils
.getRequiredWebApplicationContext(servletContext);
MessageProducer mp = (MessageProducer) wac.getBean("messageProducer");
mp.send("Message!!!!");
pw.println("<h3>success</h3>");
} catch (JmsException e) {
pw.println(e);
}
pw.println("</body>");
pw.println("</html>");
}
}
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实例完成了
分享到:
相关推荐
本教程将带你逐步了解如何利用Tomcat、Spring和JMS(Java Message Service)构建一个简单的异步消息传递入门实例。 首先,让我们来理解一下核心组件: 1. **Tomcat**:这是一个流行的开源Java Servlet容器,用于...
在这个"spring jms tomcat 异步消息传递入门实例"中,我们将探讨如何在Spring框架下利用JMS和Tomcat实现异步消息传递,以提高系统性能和可扩展性。 首先,理解异步消息传递的概念至关重要。在同步通信中,发送方...
本教程将深入探讨如何将这两个强大的工具结合在一起,以创建一个简单的发送JMS消息的入门实例。 首先,我们需要理解ActiveMQ的基本概念。ActiveMQ是Apache软件基金会开发的一个开源消息代理,它实现了JMS规范,提供...
在这个入门级实例中,我们将探讨如何使用Maven、Spring和ActiveMQ来构建一个简单的Spring JMS应用。 首先,Maven是一个项目管理和综合工具,它管理项目的构建、依赖关系和报告。在Spring JMS项目中,Maven用于管理...
理解如何创建消息对象,设置其属性,并通过Session和Destination接口进行发送和接收是JMS入门的关键。 2. **网关设置** 实例中可能涉及到的消息网关配置,如ActiveMQ,是JMS实现的核心组件。ActiveMQ是Apache软件...
“Spring绝佳入门教程.pdf”将涵盖这些主题,并通过实例帮助学习者理解每个概念。教程可能包括创建第一个Spring应用、配置bean、使用AOP、实现Spring MVC项目、集成数据库、安全配置等内容,逐步引导读者深入Spring...
这个“Struts+Hibernate+Spring入门教程及实例”压缩包提供了学习这三大框架基础知识和实践操作的资源。 **Struts框架**: Struts是一个开源的MVC(Model-View-Controller)框架,主要用于构建基于Java EE的Web应用...
### Spring框架入门到熟练 #### 一、Spring框架概述 Spring框架是一款开源的企业级应用框架,旨在解决企业级应用开发中的复杂性问题。它最初由Rod Johnson创建,并于2004年发布了第一个版本。Spring框架的核心优势...
### Spring框架入门教程知识点详解 #### 一、Spring框架基础知识 **1. 依赖注入 (Dependency Injection, DI) 与 控制反转 (Inversion of Control, IoC)** - **依赖注入**: 在运行期间,由外部容器动态地将依赖...
### Spring入门教程知识点详解 #### 一、理论知识 ##### 1. 依赖注入与控制反转 - **依赖注入**(Dependency Injection, DI):在应用程序的运行期间,由外部容器(例如Spring容器)动态地将一个对象所依赖的其他...
综上所述,Spring入门涉及到的概念和知识点十分丰富,包括核心概念如IoC和AOP的深入理解,搭建开发环境,学习Spring框架结构,编写和运行第一个Spring程序,掌握IoC容器的使用,了解Bean的生命周期和配置细节,以及...
### Spring入门教程知识点详解 #### 一、Spring基础概念 **1. 依赖注入 (Dependency Injection, DI)** 依赖注入是一种设计模式,在Spring框架中得到了广泛的应用。它指的是在程序运行过程中,由容器来创建对象,并...
### Spring入门纲要知识点解析 #### 一、理论知识 **1. 依赖注入与控制反转** - **依赖注入(Dependency Injection, DI)**: 在运行期间,由外部容器动态地将依赖对象注入到组件中。这种机制使得组件自身不需要...
这个"spring应用实例"的压缩包文件提供了宝贵的资源,适合初学者入门并深入理解Spring的核心概念。 1. **依赖注入(Dependency Injection)**:Spring通过DI帮助开发者管理对象之间的依赖关系,使得代码更加松耦合...
2. **服务支持**:Spring提供了许多内置服务,如事务管理、消息服务、JMS服务和持久化服务等,简化了应用的复杂性。 3. **单例模式支持**:Spring容器可以方便地创建和管理单例对象,避免了手动实现的繁琐。 4. **...