`

activemq,spring, tomcat, jndi简单例子

    博客分类:
  • jms
阅读更多

 

 

(1)在<webapp-root>/META-INF/下建立context.xml. 这样可以不用在tomcat的context.xml中配置resource。

 

<Context antiJARLocking="true">
    <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" />	
</Context>

 

 (2)web.xml中配置spring和resource

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<resource-ref>
		<res-ref-name>jms/ConnectionFactory</res-ref-name>
		<res-type>org.apache.activemq.ActiveMQConnectionFactory</res-type>
		<res-auth>Container</res-auth>
	</resource-ref>

	<resource-ref>
		<res-ref-name>jms/Queue</res-ref-name>
		<res-type>org.apache.activemq.command.ActiveMQQueue</res-type>
		<res-auth>Container</res-auth>
	</resource-ref>
	
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
    	classpath:app-activemq-tomcat.xml
	</param-value>
	</context-param>

	<!-- Listener contextConfigLocation -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Listener log4jConfigLocation -->
	<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
	</listener>


</web-app>

 

 (3)spring的配置文件app-activemq-tomcat.xml

 

<?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="tomcatactivemq.MessageSender">
		<property name="jmsTemplate">
			<ref bean="jmsTemplate" />
		</property>
	</bean>

	<!-- 接收消息 -->
	<bean id="receiver" class="tomcatactivemq.MessageReceiver">
		<property name="jmsTemplate">
			<ref bean="jmsTemplate" />
		</property>
	</bean>
	
	<bean id="messageTest" class="tomcatactivemq.MessageTest">
		<property name="sender">
			<ref bean="sender" />
		</property>
		<property name="receiver">
			<ref bean="receiver" />
		</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>

 

 (4)三个java文件

 

package tomcatactivemq;

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

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

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

 

 

 

package tomcatactivemq;

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整合
 * 消息发送者
 *
 */
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 tomcatactivemq;


import javax.jms.JMSException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 测试类
 *
 */
public class MessageTest {
	private MessageSender sender;
	private MessageReceiver receiver;
	public void test() throws JMSException {
		sender.send("helloworld");
	}
	
	public MessageSender getSender() {
		return sender;
	}
	public void setSender(MessageSender sender) {
		this.sender = sender;
	}
	public MessageReceiver getReceiver() {
		return receiver;
	}
	public void setReceiver(MessageReceiver receiver) {
		this.receiver = receiver;
	}

	
}
 

 

(4)index.jsp

 

<%@ page language="java" import="tomcatactivemq.*" pageEncoding="UTF-8"%>

<%@ page import="org.springframework.context.ApplicationContext"%>
<%@ page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
<%@ page import="tomcatactivemq.MessageTest"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());

%>
<!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 = (MessageTest) ctx.getBean("messageTest");
        message.test();
     %>
  <br>
  hello world!
  </body>
</html>
 

参见:http://topmanopensource.iteye.com/blog/1065633

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics