`
longgangbai
  • 浏览: 7332046 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ActiveMQ和Tomcat的整合应用

 
阅读更多

       在ActiveMQ的资源让容器Tomcat管理时候,可以在Tomcat的配置文件中添加相关的配置信息。

说明:Tomcat示例版本6.0.14,其它版本在配置上可能有一些差异

1、准备jar包:

ActiveMQ lib目录下的5jar包复制到Tomcat lib目录下:

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

geronimo-jta_1.0.1B_spec-1.0.1.jar

修改配置文件:

 修改Tomcatconf/context.xml文件:

 

   在<context></context>节点中添加以下内容:

	<Resource name="jms/ConnectionFactory"  
				auth="Container"  
				type="org.apache.activemq.ActiveMQConnectionFactory"
				description="JMS Connection Factory"
				factory="org.apache.activemq.jndi.JNDIReferenceFactory"
				brokerURL="tcp://localhost:61616"
				brokerName="LocalActiveMQBroker" />
				
	<Resource name="jms/Queue"  
				auth="Container"  
				type="org.apache.activemq.command.ActiveMQQueue"
				description="My Queue"
				factory="org.apache.activemq.jndi.JNDIReferenceFactory"
				physicalName="TomcatQueue" />	

创建一个Java Web项目:

  备注:必须是web项目,目前ActiveMQ依赖Tomcat,Tomcat是web容器,必须创建一个web容器。

 

消息接收者:

 

package easyway.activemq.app.demo2;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.springframework.jms.core.JmsTemplate;
/**
 * 消息接收者
 * @author longgangbai
 *
 */
public class MessageReceiver implements  MessageListener {
	private JmsTemplate jmsTemplate;
	  
	public JmsTemplate getJmsTemplate() {
		return jmsTemplate;
	}

	public void setJmsTemplate(JmsTemplate jmsTemplate) {
		this.jmsTemplate = jmsTemplate;
	}
    public void receive() throws JMSException{
    	 TextMessage text=(TextMessage)this.jmsTemplate.receive();
		System.out.println("receive="+text.getText());
    }
	public void onMessage(Message message) {
		 if(message instanceof TextMessage){
			 TextMessage text=(TextMessage)message;
			 try {
				System.out.println(text.getText());
			} catch (Exception e) {
			}
		 }
	}
    
}

 

消息发送者:

package easyway.activemq.app.demo2;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;

import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

/**
 * tomcat和activemq整合
 * 消息发送者
 * @author longgangbai
 *
 */
public class MessageSender {
  private JmsTemplate jmsTemplate;
  
  
  public void send(final String text){
	  jmsTemplate.send(new MessageCreator(){

		public Message createMessage(Session session) throws JMSException {
			// TODO Auto-generated method stub
			return session.createTextMessage(text);
		}
	  });
  }


	public JmsTemplate getJmsTemplate() {
		return jmsTemplate;
	}
	
	
	public void setJmsTemplate(JmsTemplate jmsTemplate) {
		this.jmsTemplate = jmsTemplate;
	}
}

 

业务类:

package easyway.activemq.app.demo2;

import javax.jms.JMSException;

import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
/**
 * 测试类
 * @author longgangbai
 *
 */
public class MessageTest {
	public void test() throws JMSException {
		ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("app-activemq-tomcat.xml");
		MessageSender sender=(MessageSender)ctx.getBean("sender");
		MessageReceiver receive=(MessageReceiver)ctx.getBean("receiver");
		sender.send("helloworld");
		receive.receive();
	}

}

 

 

 

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at
   
    http://www.apache.org/licenses/LICENSE-2.0
   
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<!-- START SNIPPET: xbean -->
<beans 
  xmlns="http://www.springframework.org/schema/beans" 
  xmlns:amq="http://activemq.apache.org/schema/core"
  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
  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
  <!-- 连接连接工厂 -->
 <bean  id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
     <property name="jndiName" value="java:comp/env/jms/ConnectionFactory"></property>
 </bean>
 
 
 <bean  id="tomcatQueue" class="org.springframework.jndi.JndiObjectFactoryBean">
     <property name="jndiName" value="java:comp/env/jms/Queue"></property>
 </bean>

 <!-- 配置JMS的模板 -->
<bean id="jmsTemplate"  class="org.springframework.jms.core.JmsTemplate">
   <property name="connectionFactory" >
     <ref  bean="jmsConnectionFactory"/>
   </property>
   <property name="defaultDestination">
      <ref bean="tomcatQueue"/>
   </property>
</bean>


<!-- 发送消息队列到目的地 -->
<bean id="sender"  class="easyway.activemq.app.demo2.MessageSender">
    <property name="jmsTemplate">
       <ref bean="jmsTemplate"/>
    </property>
</bean>
<!-- 接收消息 -->
<bean id="receiver" class="easyway.activemq.app.demo2.MessageReceiver">
    <property name="jmsTemplate">
       <ref bean="jmsTemplate"/>
    </property>
</bean>


<bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
   <property name="connectionFactory">
      <ref bean="jmsConnectionFactory"/>
   </property>
   <property name="destination">
      <ref bean="tomcatQueue"/>
   </property>
   <property name="messageListener">
      <ref bean="receiver"/>
    </property>
</bean>

</beans>

 

 

创建一个jsp页面:

<%@ page language="java" import="easyway.activemq.app.demo2.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</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>
  
    <%
        MessageTest message=new MessageTest();
        message.test();
     %>
  <br>
  </body>
</html>

 

分享到:
评论
4 楼 longgangbai 2012-09-02  
xuhang1128 写道
请问按照上面配置后,mq何时启动?上面代码或配置怎么可以看出来啊,3q

项目启动时候创建mq已经启动。
3 楼 xuhang1128 2012-08-31  
请问按照上面配置后,mq何时启动?上面代码或配置怎么可以看出来啊,3q
2 楼 longgangbai 2011-12-18  
Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

你创建context时候没有传递相关的参数,如果传递参数同时必须添加相关的包。java.naming.factory.initial所在的jar文件。
1 楼 xurichusheng 2011-12-18  
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmsConnectionFactory' defined in class path resource [app-activemq-tomcat.xml]: Invocation of init method failed; nested exception is javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1337)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:423)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at code.test.main.MessageTest.<clinit>(MessageTest.java:18)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.junit.internal.runners.JUnit4ClassRunner.createTest(JUnit4ClassRunner.java:72)
at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:79)
at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:155)
at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:88)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:153)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178)
at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105)
at org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:200)
at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:186)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1368)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334)
... 32 more

相关推荐

    ActiveMQ与Tomcat整合教程

    【ActiveMQ与Tomcat整合教程】是关于如何在Apache Tomcat服务器中集成开源消息中间件ActiveMQ的详细步骤。这个教程适用于Tomcat 6.0.14版本,但请注意不同版本可能存在配置上的差异。 首先,为了使Tomcat能够识别和...

    activemq与tomcat整合

    整合ActiveMQ和Tomcat的好处在于,它允许Web应用程序利用ActiveMQ的强大功能,如发布/订阅模式和点对点模式的消息传递,以及高可用性和故障恢复能力。同时,由于ActiveMQ是独立于Tomcat运行的,因此可以与其他应用...

    ActiveMQ与Tomcat整合

    将ActiveMQ与Tomcat整合,可以让Tomcat应用利用消息队列实现更高效的通信,提高系统的可扩展性和可靠性。 **一、ActiveMQ简介** ActiveMQ的主要功能包括: 1. **消息队列**: 提供点对点和发布/订阅两种模式的消息...

    JMS教程+activemq以及activemq和tomcat的整合

    要将ActiveMQ与Tomcat整合,你需要完成以下步骤: 1. **下载和安装ActiveMQ**: 获取ActiveMQ的最新版本,并解压到合适的位置。 2. **配置ActiveMQ**: 修改`conf.activemq.xml`配置文件,设置所需的参数,如端口、...

    ActiveMQ与Tomcat整合教程.docx

    综上所述,本教程将详细讲解如何将 ActiveMQ 整合进基于 Spring+Struts+Hibernate(SSH)的 Java 应用程序中,以实现高并发的日志接收和处理能力。同时,结合 Webservice 和第三方报表工具,实现与不同系统之间的...

    Apache ActiveMQ教程 JMS 整合Tomcat

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

    ActiveMQ+tomcat

    总结来说,ActiveMQ和Tomcat的整合为企业级应用提供了强大的消息处理能力,有助于构建更灵活、可扩展的系统架构。在开发过程中,理解JMS规范、熟悉ActiveMQ的配置和管理、以及掌握如何在Tomcat中使用JMS资源是关键...

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

    Spring和ActiveMQ的整合实例源码

    10. **Tomcat服务器**:Tomcat是一个流行的Java Web服务器,它可以部署和运行使用Spring和ActiveMQ的Web应用程序。 通过上述知识点,我们可以理解如何在Spring环境中利用ActiveMQ进行消息传递,实现高并发、解耦的...

    分享一些ActiveMQ的资料

    类似于上述的"ActiveMQ与Tomcat整合.doc",但格式为.docx,可能提供了更多细节或更新的信息。 7. **ActiveMQ实践入门指南.pdf**: 这是一本实践导向的入门指南,适合初学者,通常会包含实例代码和逐步教程,帮助...

    activemq整合spring完整实例代码(内含所有相关jar包)

    通过这个实例,开发者不仅可以学习如何整合ActiveMQ和Spring,还能了解到如何在实际项目中应用消息队列,提升系统性能。同时,这也是对容器化部署的一种实践,有助于理解和掌握Web应用服务器的使用。

    Spirng Tomcat ActiveMQ JMS

    标题“Spring Tomcat ActiveMQ JMS”涉及到的是一个集成应用,涵盖了Java企业级开发中的三个重要组件:Spring框架、Tomcat应用服务器以及ActiveMQ消息中间件。这些技术都是Java EE开发中的基石,对于理解分布式系统...

    springboot整合mybatis+activemq(activemq可以去官网下载 )

    总结来说,Spring Boot、MyBatis和ActiveMQ的整合为开发者提供了一个强大的工具集,可以轻松地构建出高性能、高可用性的企业级应用。通过合理的配置和代码设计,我们可以充分利用这些组件的优势,实现灵活、可扩展的...

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

    在本文中,我们将探讨如何在Tomcat服务器上设置和使用ActiveMQ的简单实例。 **一、ActiveMQ的特点与优势** 1. **遵循JMS1.1规范**,兼容J2EE1.4及以上版本。 2. **跨平台**,可以在任何JVM和大多数Web容器中运行,...

    ActiveMQ实例

    在这个实例中,我们将深入探讨ActiveMQ如何与Spring框架、Swing GUI和Ajax技术进行整合。 1. **ActiveMQ与Spring整合**: Spring框架是一个流行的Java企业级应用开发框架,它提供了全面的事务管理、数据访问集成、...

    Spring和ActiveMQ的整合实例源码ActiveMQSpringDemo.zip

    在IT行业中,Spring框架和ActiveMQ的整合是构建高可用、高性能消息传递系统的重要实践。本实例"Spring和ActiveMQ的整合实例源码ActiveMQSpringDemo"提供了一个完整的解决方案,帮助开发者了解如何在Spring环境中集成...

    ActiveMQ+Camel+Spring+jms Demo(一)

    ActiveMQ允许应用程序通过发布/订阅和点对点模式进行异步通信。在本示例中,ActiveMQ将作为各个组件之间的通信桥梁,负责接收、存储和转发消息,提高系统的解耦度和可扩展性。 接着,Apache Camel是一个强大的集成...

    SpringBoot+ActiveMq+MQTT实现消息的发送和接收

    它通过内嵌的Tomcat服务器和自动配置功能,使得开发者能够快速创建独立运行的、生产级别的Java应用。 接下来是ActiveMQ,它是Apache软件基金会的一个开源项目,是基于Java Message Service(JMS)规范的消息中间件...

Global site tag (gtag.js) - Google Analytics