原文地址:http://madfroghe.iteye.com/blog/927637
一、修改配置文件
1.1 修改Tomcat的conf/context.xml文件:
在<context></context>节点中添加以下内容:
<Resource
name="jms/FailoverConnectionFactory"
auth="Container"
type="org.apache.activemq.ActiveMQConnectionFactory"
description="JMS Connection Factory"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
brokerURL="failover:(tcp://localhost:61616)?initialReconnectDelay=100&maxReconnectAttempts=5"
brokerName="localhost"
useEmbeddedBroker="false"/>
<Resource
name="jms/NormalConnectionFactory"
auth="Container"
type="org.apache.activemq.ActiveMQConnectionFactory"
description="JMS Connection Factory"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
brokerURL="tcp://localhost:61616"
brokerName="localhost"
useEmbeddedBroker="false"/>
<Resource name="jms/topic/MyTopic"
auth="Container"
type="org.apache.activemq.command.ActiveMQTopic"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
physicalName="MY.TEST.FOO"/>
<Resource name="jms/queue/MyQueue"
auth="Container"
type="org.apache.activemq.command.ActiveMQQueue"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
physicalName="MY.TEST.FOO.QUEUE"/>
二、详细示例
2.1 监听类
package com.flvcd.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
public class JMSListener extends HttpServlet implements MessageListener {
/** 初始化jms连接,创建topic监听器 */
public void init(ServletConfig config) throws ServletException {
try {
InitialContext initCtx = new InitialContext();
Context envContext = (Context) initCtx.lookup("java:comp/env");
ConnectionFactory connectionFactory = (ConnectionFactory) envContext
.lookup("jms/FailoverConnectionFactory");
Connection connection = connectionFactory.createConnection();
connection.setClientID("MyClient");
Session jmsSession = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
// 普通消息订阅者,无法接收持久消息 //MessageConsumer consumer =
// jmsSession.createConsumer((Destination)
// envContext.lookup("jms/topic/MyTopic"));
// //基于Topic创建持久的消息订阅者,前提:Connection必须指定一个唯一的clientId,当前为MyClient
TopicSubscriber consumer=jmsSession.createDurableSubscriber((Topic)envContext.lookup("jms/topic/MyTopic"), "MySub");
consumer.setMessageListener(this);
connection.start();
} catch (NamingException e) {
e.printStackTrace();
} catch (JMSException e) {
e.printStackTrace();
}
}
/** 接收消息,做对应处理 */
public void onMessage(Message message) {
if (checkText(message, "RefreshArticleId") != null) {
String articleId = checkText(message, "RefreshArticleId");
System.out.println("接收刷新文章消息,开始刷新文章ID=" + articleId);
} else if (checkText(message, "RefreshThreadId") != null) {
String threadId = checkText(message, "RefreshThreadId");
System.out.println("接收刷新论坛帖子消息,开始刷新帖子ID=" + threadId);
} else {
System.out.println("接收普通消息,不做任何处理!");
}
}
private static String checkText(Message m, String s) {
try {
return m.getStringProperty(s);
} catch (JMSException e) {
e.printStackTrace(System.out);
return null;
}
}
}
2.2 发布类
package com.flvcd.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyPublish extends HttpServlet implements MessageListener {
//定义初始化所需要的变量
private InitialContext initCtx;
private Context envContext;
private ConnectionFactory connectionFactory;
private Connection connection;
private Session jmsSession;
private MessageProducer producer;
public void onMessage(Message message) {
// TODO Auto-generated method stub
}
/**
* Constructor of the object.
*/
public MyPublish() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String content=request.getParameter("content");
//设置持久方式
try {
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
Message testMessage = jmsSession.createMessage();
// 发布刷新文章消息
testMessage.setStringProperty("RefreshArticleId", content);
producer.send(testMessage);
// 发布刷新帖子消息
testMessage.clearProperties();
testMessage.setStringProperty("RefreshThreadId", content);
producer.send(testMessage);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
try {
initCtx = new InitialContext();
envContext = (Context) initCtx.lookup("java:comp/env");
connectionFactory = (ConnectionFactory) envContext.lookup("jms/NormalConnectionFactory");
connection = connectionFactory.createConnection();
jmsSession = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
producer = jmsSession.createProducer((Destination) envContext.lookup("jms/topic/MyTopic"));
} catch (NamingException e) {
e.printStackTrace();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
2.3 MyPublish.jsp
<form action="myPublish.do">
<input type="text" name="content" />
<input type="submit" value="提交" >
/form>
2.4 web.xml也需要相应配置,详细见附件。
关键代码:
<servlet>
<servlet-name>jms-listener</servlet-name>
<servlet-class>
com.flvcd.servlet.JMSListener
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
因上传限制附件中缺少ActiveMq.jar,请自行下载。
分享到:
相关推荐
在tomcat 下的context.xml文件中加入 auth="Container" type="org.apache.activemq.ActiveMQConnectionFactory" description="JMS Connection Factory" factory="org.apache.activemq.jndi....
2. **Tomcat与JMS**:虽然Tomcat本身并不直接支持JMS,但可以在Tomcat中部署一个支持JMS的容器,如Apache ActiveMQ或IBM WebSphere MQ。这些服务器将作为消息代理,接收和分发消息。在Tomcat中配置JMS,需要在`...
这些库文件是Tomcat应用程序使用JMS与ActiveMQ通信所必需的。将它们放入Tomcat的`lib`目录下,以便服务器在启动时自动加载。 5. **配置Tomcat**:在Tomcat的`conf/server.xml`文件中,添加一个`Connector`元素来...
在本项目中,Spring可能被用来管理bean的生命周期,提供数据访问支持,以及与ActiveMQ的JMS整合。 Tomcat是Apache软件基金会的一个开源项目,是一个流行的Java Servlet容器,用于部署和运行Java Web应用程序。在...
Spring、JMS、ActiveMQ和Tomcat是Java开发中常用的技术组件,它们分别扮演着不同的角色,构建出高效的企业级消息通信系统。本教程将详细阐述这些技术的使用及其相互结合的方式。 首先,Spring是一个开源的Java应用...
最后,需要将JMS服务器与Web服务器集成,首先需要配置应用的web.xml文件,添加context-param和listener元素,以便 aktivemq.xml文件的配置。 在web.xml文件中,需要添加以下代码: <param-name>brokerURI ...
本教程将带你逐步了解如何利用Tomcat、Spring和JMS(Java Message Service)构建一个简单的异步消息传递入门实例。 首先,让我们来理解一下核心组件: 1. **Tomcat**:这是一个流行的开源Java Servlet容器,用于...
基于Spring+JMS+ActiveMQ+Tomcat,做一个Spring4.1.0和ActiveMQ5.11.1整合实例,实现了Point-To-Point的异步队列消息和PUB/SUB(发布/订阅)模型,简单实例,不包含任何业务。
基于Spring+JMS+ActiveMQ+Tomcat,我使用的版本情况如下所示:Spring 3.2.0,ActiveMQ 5.4.3,Tomcat 6.0.43。本例通过详细的说明和注释,实现消息服务的基本功能:发送与接收。Spring对JMS提供了很好的支持,可以...
JMS简明教程+JMS规范教程+activemq以及activemq和tomcat的整合+整合实例代码+持久化消息配置以及工程+tomcat服务器的配置+整合需要的lib文件+部署多个tomcat服务器方案等
**三、整合Tomcat与ActiveMQ** 1. **准备JAR包**:将ActiveMQ的lib目录下的5个核心JAR文件(如activemq-core-5.1.0.jar等)复制到Tomcat的lib目录。 2. **修改配置文件**: - 更新Tomcat的`conf/context.xml`文件...
Tomcat 7还加强了与Java EE 6的兼容性,提供了一个更稳定的运行环境。 Tomcat 8是在2013年推出的,它是Tomcat历史上最大的一次更新。这个版本引入了Servlet 3.1、JSP 2.3和EL 3.0等新规范,增加了对WebSocket的支持...
《Tomcat与JavaWeb开发技术详解》一书的随书源码包含了大量的示例和练习,旨在帮助读者深入理解如何在实际开发环境中运用Tomcat服务器和JavaWeb技术。以下是对这些关键技术点的详细阐述: **Tomcat服务器** Tomcat...
### Apache ActiveMQ与JMS整合Tomcat:深入解析与实践 #### 一、Apache ActiveMQ:强大而灵活的开源消息中间件 Apache ActiveMQ作为一款成熟的开源消息中间件,不仅遵循了JMS 1.1规范,还兼容J2EE 1.4以上的标准,...
在整合ActiveMQ与Tomcat的过程中,首先需要将ActiveMQ lib目录下的五个关键JAR包(activemq-core-5.1.0.jar、activemq-web-5.1.0.jar、geronimo-j2ee-management_1.0_spec-1.0.jar、geronimo-jms_1.1_spec-1.1.1.jar...
### Tomcat调用WebLogic EJB的实现方法与步骤 #### 概述 在实际的开发环境中,有时候需要实现不同应用服务器之间的交互。比如,在Tomcat应用服务器中调用部署在WebLogic服务器上的EJB(Enterprise JavaBeans)组件...
内容可能涵盖Tomcat的安装与配置、目录结构、服务器管理,以及与Java EE其他组件如JNDI(Java Naming and Directory Interface)、JMS(Java Message Service)和EJB(Enterprise JavaBeans)的集成。 【标签】:...
最后,书中可能会涉及一些高级话题,如Tomcat的性能优化、集群配置,以及与其他Java EE组件(如JNDI、JMS等)的集成。 附带的APK文件“android2011-0.6.10.1206.apk”可能是某个基于Android的版本控制工具或相关的...
最后,书中可能会涉及到与其他Java EE组件的集成,如JavaMail服务、JMS(Java Message Service)以及数据访问技术如JDBC和Hibernate。通过这些集成,开发者可以构建更复杂的企业级应用。 总的来说,《Tomcat与Java ...
标题“spring2 activemq5 tomcat6构建jms”涉及了几个关键的Java技术,主要集中在企业级应用开发中的消息传递系统。首先,我们来深入理解这些技术及其相互关系。 Spring框架是Java应用程序开发的一个核心工具,尤其...