ActiveMQ 实践之路(四) ActiveMQ 4.x +JBoss 4.x MDP实战篇
在<<ActiveMQ 实践之路(三) ActiveMQ 4.x +JBoss 4.x 整合篇 >>里面我们比较详细的讲解了ActiveMQ与JBoss的整合,
既然选择了JBoss,那么项目里面或多或少都会使用到EJB,下面我们就详细地介绍如何在ActiveMQ 4.x+JBOSS 4.x环境下开发
Message Driven Bean,并且与使用jbossMQ在配置上作了比较详细地比较。这里的OrderMessage 仅仅是一个自动生成的Message Driven Bean,在onMessage方法里面,作日志输入。
一. 配置ejb-jar.xml
1. ejb-jar.xml 不能使用XML DTD,需要使用XML Schema(XSD)
很多朋友可能使用XDoclet来生成ejb-jar.xml,我这里直接使用XDoclet生成的ejb-jar.xml是
<!---->
但是在ActiveMQ+JBoss配置中间需要使用新的XML Schema才能完成对ra的定义,如下.
xml 代码
- <ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" version="2.1">
2. ejb-jar.xml 直接使用JBossMQ的Message DriverBean 和使用ActiveMQ RA配置的区别
(1) .使用JBossMQ的MessageDrivenBean的 ejb-jar.xml配置
xml 代码
-
- <message-driven>
- <description>
-
- description>
- <display-name>Name for OrderMessagedisplay-name>
- <ejb-name>OrderMessageejb-name>
- <ejb-class>com.mostone.ejb.OrderMessageejb-class>
- <transaction-type>Containertransaction-type>
- <acknowledge-mode>Auto-acknowledgeacknowledge-mode>
- <message-driven-destination>
- <destination-type>javax.jms.Queuedestination-type>
- message-driven-destination>
- message-driven>
(2). 使用ActiveMQ RA配置的MessageDrivenBean的ejb-jar.xml配置
xml 代码
-
- <message-driven>
- <description>
-
- description>
- <display-name>Name for OrderMessagedisplay-name>
- <ejb-name>OrderMessageejb-name>
- <ejb-class>com.mostone.ejb.OrderMessageejb-class>
- <transaction-type>Containertransaction-type>
- <acknowledge-mode>Auto-acknowledgeacknowledge-mode>
-
- <activation-config>
- <activation-config-property>
- <activation-config-property-name>destinationactivation-config-property-name>
- <activation-config-property-value>queue.outboundactivation-config-property-value>
- activation-config-property>
- <activation-config-property>
- <activation-config-property-name>destinationTypeactivation-config-property-name>
- <activation-config-property-value>javax.jms.Queueactivation-config-property-value>
- activation-config-property>
- activation-config>
- message-driven>
其中destination,destinationType是ra.xml里面提供的配置属性,(这里官方的文档是Destination,DestinationType, 而实际上activemq-ra.rar里面的ra.xml是destination,destinationType,注意大小写区别)
二. 配置jboss.xml
大部分配置都是在jboss.xml里面.
1.使用JBossMQ 和使用ActiveMQ RA配置Message Driven Bean的区别
1.) 使用JBossMQ 的配置
xml 代码
- <message-driven>
- <ejb-name>OrderMessageejb-name>
- <destination-jndi-name>queue/testQueuedestination-jndi-name>
- message-driven>
2.) 使用ActiveMQ RA的配置
xml 代码
- <message-driven>
- <ejb-name>ActiveMQMDPejb-name>
-
- <resource-adapter-name>activemq-ra.rarresource-adapter-name>
-
- <configuration-name>ActiveMQ Message Driven Beanconfiguration-name>
- message-driven>
2. jboss.xml 配置invoker proxy和container 支持ActiveMQ RA
xml 代码
- <invoker-proxy-bindings>
- <invoker-proxy-binding>
- <name>activemq-message-driven-beanname>
- <invoker-mbean>defaultinvoker-mbean>
- <proxy-factory>org.jboss.ejb.plugins.inflow.JBossMessageEndpointFactoryproxy-factory>
- <proxy-factory-config>
- <endpoint-interceptors>
- <interceptor>org.jboss.proxy.ClientMethodInterceptorinterceptor>
- <interceptor>org.jboss.ejb.plugins.inflow.MessageEndpointInterceptorinterceptor>
- <interceptor>org.jboss.proxy.TransactionInterceptorinterceptor>
- <interceptor>org.jboss.invocation.InvokerInterceptorinterceptor>
- endpoint-interceptors>
- proxy-factory-config>
- invoker-proxy-binding>
- invoker-proxy-bindings>
MessageDrivenBean的container配置,这里的<container-name></container-name>必须和上面的<configuration-name></configuration-name>相同 才能起作用.
xml 代码
- <container-configurations>
- <container-configuration>
- <container-name>ActiveMQ Message Driven Beancontainer-name>
- <call-logging>falsecall-logging>
- <invoker-proxy-binding-name>activemq-message-driven-beaninvoker-proxy-binding-name>
- <container-interceptors>
- <interceptor>org.jboss.ejb.plugins.ProxyFactoryFinderInterceptorinterceptor>
- <interceptor>org.jboss.ejb.plugins.LogInterceptorinterceptor>
- <interceptor>org.jboss.ejb.plugins.RunAsSecurityInterceptorinterceptor>
-
- <interceptor transaction="Container">org.jboss.ejb.plugins.TxInterceptorCMTinterceptor>
- <interceptor transaction="Container">org.jboss.ejb.plugins.CallValidationInterceptorinterceptor>
- <interceptor transaction="Container" metricsEnabled="true">org.jboss.ejb.plugins.MetricsInterceptorinterceptor>
- <interceptor transaction="Container">org.jboss.ejb.plugins.MessageDrivenInstanceInterceptorinterceptor>
-
- <interceptor transaction="Bean">org.jboss.ejb.plugins.MessageDrivenInstanceInterceptorinterceptor>
- <interceptor transaction="Bean">org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMTinterceptor>
- <interceptor transaction="Bean">org.jboss.ejb.plugins.CallValidationInterceptorinterceptor>
- <interceptor transaction="Bean" metricsEnabled="true">org.jboss.ejb.plugins.MetricsInterceptorinterceptor>
- <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptorinterceptor>
- container-interceptors>
- <instance-pool>org.jboss.ejb.plugins.MessageDrivenInstancePoolinstance-pool>
- <instance-cache>instance-cache>
- <persistence-manager>persistence-manager>
- <container-pool-conf>
- <MaximumSize>100MaximumSize>
- container-pool-conf>
- container-configuration>
- container-configurations>
以上就是ActiveMQ+JBoss InBound 的配置
三.在Servlet中通过发送消息,验证上面的Message Driven Bean
为了验证这个MessageDrivenBean能够正常工作,我使用一个很简单的servlet向这个queue发送消息,前一篇的activemq-ds.xml 已经提供在启动的时候绑定了JNDI activemq/QueueConnectionFactory,activemq/queue/outbound,我们直接使用就行了,
java 代码
- try {
- initialContext = new InitialContext();
- QueueConnectionFactory connectionFactory = (QueueConnectionFactory) initialContext
- .lookup("java:activemq/QueueConnectionFactory");
- Connection con=connectionFactory.createConnection();
- Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- Queue queue = (Queue) initialContext.lookup("activemq/queue/outbound");
- MessageProducer producer = session.createProducer(queue);
- TextMessage txtMessage = session.createTextMessage();
- txtMessage.setText("A");
- producer.send(txtMessage);
- producer.close();
- session.close();
- con.close();
-
- } catch (NamingException e) {
-
- e.printStackTrace();
- } catch (JMSException e) {
-
- e.printStackTrace();
- }
四.关于durable方式订阅topic的补充说明
使用durable方式,你需要在ejb-jar.xml中额外的配置,subscriptionDurability,clientId,subscriptionName
xml 代码
- <activation-config>
- <activation-config-property>
- ......
- <activation-config-property>
- <activation-config-property-name>subscriptionDurabilityactivation-config-property-name>
- <activation-config-property-value>Durableactivation-config-property-value>
- activation-config-property>
- <activation-config-property>
- <activation-config-property-name>clientIdactivation-config-property-name>
- <activation-config-property-value>fooactivation-config-property-value>
- activation-config-property>
- <activation-config-property>
- <activation-config-property-name>subscriptionNameactivation-config-property-name>
- <activation-config-property-value>baractivation-config-property-value>
- activation-config-property>
- ......
- activation-config-property>
- activation-config>
ok 这样就可以使用durable方式订阅topic了。
参考文档:
JBoss Integration
ActiveMQ Inbound Communication
ActiveMQ Outbound Communication
分享到:
- 2007-03-09 23:02
- 浏览 5396
- 评论(0)
- 论坛回复 / 浏览 (0 / 6823)
- 查看更多
相关推荐
javaee电子商城系统课程设计样本.doc
scratch少儿编程逻辑思维游戏源码-糖果大爆险.zip
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
GIS安装施工综合方案.doc
内容概要:本文详细介绍了选题系统源码,涵盖PHP、CSS、JavaScript和MySQL四种核心技术。系统采用B/S架构,支持管理员、审核员、教师和学生四种身份登录,每种身份有独立的功能权限。文中提供了详细的环境搭建指南,如使用phpStudy和Navicat进行项目管理和数据库操作。此外,还展示了关键代码片段,如登录验证、权限管理、数据库设计以及界面优化方法。同时,针对性能优化提出了建议,如解决N+1查询问题的方法。 适合人群:适用于有一定编程基础,尤其是对PHP和Web开发感兴趣的开发者和技术爱好者。 使用场景及目标:① 学习并掌握B/S架构的应用开发流程;② 实践多角色登录和权限管理的具体实现;③ 提升Web应用的界面优化和用户体验;④ 掌握数据库设计和性能优化技巧。 其他说明:本文不仅提供了完整的代码示例,还包括了详细的开发文档和支持材料,帮助读者快速上手并深入理解整个项目的构建过程。
scratch少儿编程逻辑思维游戏源码-下水道冒险猫.zip
scratch少儿编程逻辑思维游戏源码-下雨时向北的路.zip
内容概要:本文深入探讨了三相下垂双逆变器同步并联控制技术,重点介绍了下垂控制的基本原理及其在微电网中的应用。文章详细解释了下垂控制如何通过调整频率和电压幅值来实现负载的自动分配,并讨论了在多台逆变器并联时可能出现的环流问题以及解决方案,如虚拟阻抗法。此外,还介绍了同步环节的关键技术,特别是改进型锁相环的应用,并提供了具体的实现代码示例。最后,文章分享了一些实用的调试技巧和经验,强调了参数整定的重要性。 适用人群:从事电力电子、微电网控制领域的研究人员和技术人员。 使用场景及目标:适用于希望深入了解三相下垂双逆变器同步并联控制技术的工程师和科研人员,旨在帮助他们掌握核心技术,解决实际工程中的问题。 其他说明:文中提供的代码示例和调试方法有助于读者更好地理解和应用相关技术,提高系统的稳定性和性能。
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
GEPLC机组自动化装置编程使用说明书.doc
scratch少儿编程逻辑思维游戏源码-我的领土.zip
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
scratch少儿编程逻辑思维游戏源码-我的世界 MMO V1.6.zip
scratch少儿编程逻辑思维游戏源码-坦克(1).zip
GSM移动通信网容量解决方案.doc
scratch少儿编程逻辑思维游戏源码-天台狂飙.zip
scratch少儿编程逻辑思维游戏源码-逃避猫 避险闯关游戏.zip
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;