`

tomcat与JMS

阅读更多
原文地址: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&amp;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,请自行下载。
分享到:
评论

相关推荐

    String+tomcat+jms实例

    在tomcat 下的context.xml文件中加入 auth="Container" type="org.apache.activemq.ActiveMQConnectionFactory" description="JMS Connection Factory" factory="org.apache.activemq.jndi....

    spring jms tomcat 异步消息传递入门实例

    2. **Tomcat与JMS**:虽然Tomcat本身并不直接支持JMS,但可以在Tomcat中部署一个支持JMS的容器,如Apache ActiveMQ或IBM WebSphere MQ。这些服务器将作为消息代理,接收和分发消息。在Tomcat中配置JMS,需要在`...

    tomcat activemq jms所需包

    这些库文件是Tomcat应用程序使用JMS与ActiveMQ通信所必需的。将它们放入Tomcat的`lib`目录下,以便服务器在启动时自动加载。 5. **配置Tomcat**:在Tomcat的`conf/server.xml`文件中,添加一个`Connector`元素来...

    Spirng Tomcat ActiveMQ JMS

    在本项目中,Spring可能被用来管理bean的生命周期,提供数据访问支持,以及与ActiveMQ的JMS整合。 Tomcat是Apache软件基金会的一个开源项目,是一个流行的Java Servlet容器,用于部署和运行Java Web应用程序。在...

    Spring+JMS+ActiveMQ+Tomcat jar下载

    Spring、JMS、ActiveMQ和Tomcat是Java开发中常用的技术组件,它们分别扮演着不同的角色,构建出高效的企业级消息通信系统。本教程将详细阐述这些技术的使用及其相互结合的方式。 首先,Spring是一个开源的Java应用...

    解析Tomcat下应用JMS开发技巧

    最后,需要将JMS服务器与Web服务器集成,首先需要配置应用的web.xml文件,添加context-param和listener元素,以便 aktivemq.xml文件的配置。 在web.xml文件中,需要添加以下代码: &lt;param-name&gt;brokerURI ...

    tomcat spring jms 异步消息传递入门实例

    本教程将带你逐步了解如何利用Tomcat、Spring和JMS(Java Message Service)构建一个简单的异步消息传递入门实例。 首先,让我们来理解一下核心组件: 1. **Tomcat**:这是一个流行的开源Java Servlet容器,用于...

    基于Spring+JMS+ActiveMQ+Tomcat整合

    基于Spring+JMS+ActiveMQ+Tomcat,做一个Spring4.1.0和ActiveMQ5.11.1整合实例,实现了Point-To-Point的异步队列消息和PUB/SUB(发布/订阅)模型,简单实例,不包含任何业务。

    Spring+JMS+ActiveMQ+Tomcat实现消息服务的demo

    基于Spring+JMS+ActiveMQ+Tomcat,我使用的版本情况如下所示:Spring 3.2.0,ActiveMQ 5.4.3,Tomcat 6.0.43。本例通过详细的说明和注释,实现消息服务的基本功能:发送与接收。Spring对JMS提供了很好的支持,可以...

    JMS教程+activemq以及activemq和tomcat的整合+整合实例代码+持久化消息配置以及工程+tomcat服务器的配置

    JMS简明教程+JMS规范教程+activemq以及activemq和tomcat的整合+整合实例代码+持久化消息配置以及工程+tomcat服务器的配置+整合需要的lib文件+部署多个tomcat服务器方案等

    ActiveMq-JMS简单实例使用tomcat.doc

    **三、整合Tomcat与ActiveMQ** 1. **准备JAR包**:将ActiveMQ的lib目录下的5个核心JAR文件(如activemq-core-5.1.0.jar等)复制到Tomcat的lib目录。 2. **修改配置文件**: - 更新Tomcat的`conf/context.xml`文件...

    tomcat7tomcat8tomcat9

    Tomcat 7还加强了与Java EE 6的兼容性,提供了一个更稳定的运行环境。 Tomcat 8是在2013年推出的,它是Tomcat历史上最大的一次更新。这个版本引入了Servlet 3.1、JSP 2.3和EL 3.0等新规范,增加了对WebSocket的支持...

    Tomcat与JavaWeb开发技术详解-随书源码

    《Tomcat与JavaWeb开发技术详解》一书的随书源码包含了大量的示例和练习,旨在帮助读者深入理解如何在实际开发环境中运用Tomcat服务器和JavaWeb技术。以下是对这些关键技术点的详细阐述: **Tomcat服务器** Tomcat...

    Apache ActiveMQ教程 JMS 整合Tomcat

    ### Apache ActiveMQ与JMS整合Tomcat:深入解析与实践 #### 一、Apache ActiveMQ:强大而灵活的开源消息中间件 Apache ActiveMQ作为一款成熟的开源消息中间件,不仅遵循了JMS 1.1规范,还兼容J2EE 1.4以上的标准,...

    ActiveMq-JMS简单实例使用tomcat.pdf

    在整合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的实现方法与步骤 #### 概述 在实际的开发环境中,有时候需要实现不同应用服务器之间的交互。比如,在Tomcat应用服务器中调用部署在WebLogic服务器上的EJB(Enterprise JavaBeans)组件...

    Tomcat与Java Web开发技术详解(光盘)

    内容可能涵盖Tomcat的安装与配置、目录结构、服务器管理,以及与Java EE其他组件如JNDI(Java Naming and Directory Interface)、JMS(Java Message Service)和EJB(Enterprise JavaBeans)的集成。 【标签】:...

    [Tomcat与Java.Web开发技术详解][第一版][孙卫琴][PDF清晰版]+APK

    最后,书中可能会涉及一些高级话题,如Tomcat的性能优化、集群配置,以及与其他Java EE组件(如JNDI、JMS等)的集成。 附带的APK文件“android2011-0.6.10.1206.apk”可能是某个基于Android的版本控制工具或相关的...

    Tomcat与Java Web开发技术详解(第2版).pdf

    最后,书中可能会涉及到与其他Java EE组件的集成,如JavaMail服务、JMS(Java Message Service)以及数据访问技术如JDBC和Hibernate。通过这些集成,开发者可以构建更复杂的企业级应用。 总的来说,《Tomcat与Java ...

    spring2 activemq5 tomcat6构建jms

    标题“spring2 activemq5 tomcat6构建jms”涉及了几个关键的Java技术,主要集中在企业级应用开发中的消息传递系统。首先,我们来深入理解这些技术及其相互关系。 Spring框架是Java应用程序开发的一个核心工具,尤其...

Global site tag (gtag.js) - Google Analytics