日期:2014-05-16  浏览次数:20627 次

JMS和消息驱动Bean(MDB)

一、说明

本示例使用的ActiveMQ作为消息中间件,服务器为Glassfish,使用JMS发送消息,在MDB接收到消息之后做打印输出。

二、ActiveMQ安装配置

1、安装console

war包安装到服务器不需要特殊配置,默认监听端口为61616,可通过修改activemq.xml修改默认端口,测试使用的console版本为activemq-web-console-5.5.1,当然console可以是与客户端不同的服务器,而且我们也一般都这样使用。

2、安装ActiveMq应用端

安装rar包,如果你下载的rar包中缺少slf4j-log4j12的jar包请手工加入,与安装普通的app一样,不需要特殊配置,我采用的为activemq-rar-5.5.0.rar,不同版本对服务器可能会存在兼容性问题。

3、配置服务器

依次配置如下内容:

资源适配器(Resource Adapter Config)
	资源:activemq-rar-5.5.0;
	线程池ID:thread-pool-1
	serverurl:tcp://localhost:61616 [如果console在其他机器,请配置对应机器的IP]
连接器连接池(Connector Connection Pools)
	连接池名字:jms/ConnectionFactory
	资源适配器名:activemq-rar-5.5.0
	连接定义:javax.jms.ConnectionFactory
连接器资源(Connector Resources)
	JNDI名字:jms/ConnectionFactory
	连接池名:jms/ConnectionFactory
受管对象资源(Admin Object Resources)
	JNDI名:jms/JMSINBOX
	资源适配器名:activemq-rar-5.5.0
	资源类型:javax.jms.Queue
	PhysicalName:jmsQueue

三、开发MDB(消息驱动Bean)

1、maven配置

    <dependency>
      <groupId>org.glassfish</groupId>
      <artifactId>javax.ejb</artifactId>
      <version>3.0.1</version>
    </dependency>
  	<dependency>
  	  <groupId>org.glassfish</groupId>
  	  <artifactId>javax.jms</artifactId>
  	  <version>3.0.1</version>
  	  <scope>provided</scope>
  	</dependency>

2、配置/WEB-INF/ejb-jar.xml (glassfish下必须配置)
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" version="3.1"
	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/ejb-jar_3_1.xsd">
	<display-name>Ejb1</display-name>
	<enterprise-beans>
		<message-driven>
			<display-name>MyMDB</display-name>
			<ejb-name>MyMDB</ejb-name>
			<ejb-class>com.wcs.TestMDB.mdb.MyMDB</ejb-class>
			<messaging-type>javax.jms.MessageListener</messaging-type>
			<transaction-type>Container</transaction-type>
			<activation-config>
				<activation-config-property>
					<activation-config-property-name>DestinationType</activation-config-property-name>
					<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
				</activation-config-property>
				<activation-config-property>
					<activation-config-property-name>Destination</activation-config-property-name>
					<activation-config-property-value>jmsQueue</activation-config-property-value>
				</activation-config-property>
			</activation-config>
		</message-driven>
	</enterprise-beans>
	<assembly-descriptor>
		<container-transaction>
			<method>
				<ejb-name>MyMDB</ejb-name>
				<method-name>onMessage</method-name>
				<method-params>
					<method-param>java.lang.String</method-param>
				</method-params>
			</method>
			<trans-attribute>Required</trans-attribute>
		</container-transaction>
	</assembly-descriptor>
</ejb-jar>

3、配置/WEB-INF/glassfish-ejb-jar.xml (glassfish下必须配置)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org