- 浏览: 633797 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
liuche20083736:
非常好
从问题看本质: 研究TCP close_wait的内幕 -
xiaopohai85707:
优化算法与原来需求不符
过滤字符的性能调优?挤一挤还是有的 -
kmy_白衣:
生成的area图有时候 标签的数值和图标上看上去的数值不一致。 ...
OpenFlashChart2之恶心文档 -
tom&jerry:
大神,请教一个问题,按名称排序为何无效,用的2.4.3 XPA ...
深入浅出jackrabbit之十三 查询之AST和QT -
jd2bs:
改成精确匹配可以了< filter-mapping &g ...
细谈Ehcache页面缓存的使用
在使用ActiveMQ的时候把ActiveMQ的控制台整合到web程序中是比较好的做法,这里有篇文章讲解了这样一个步骤http://www.oreillynet.com/onjava/blog/2007/06/integrating_activemq_web_conso.html
。
原文作者:Dejan Bosanac
译者:张荣华
由于水平所限,翻译难免有不妥之处欢迎大家指正。
正文:
如果你的应用程序整合了ActiveMQ,那么再把他的web控制台也整合到你的应用中应该来说是很有意义的。它(ActiveMQ的web控制台)能为你的用户提供基本的监控和管理的操作功能。你可以采取的一个方案是把它做成一个war文件,整合进系统,但是如果你已经在系统中整合了一大堆的ActiveMQ,你可能就只想引进那些必需的库和文件了。
事实上,我们并不能做到无缝整合(作者的无缝整合估计是指不需什么配置拿来即用的那种方式)。但是在做这项工作的时候我仍然发现了几个步骤(希望可以帮助有同样需求的人)。我使用maven2来作为构建工具,它会组装那些插件来创建一个最终的distribution。如果你使用一些不同的构建环境,那么最好还是坚持定制war文件。
首先,你需要使用version2.2或更新的maven assembly plugin。 然后把以下代码片断复制到你的pox.xml中去:
xml 代码
- < build >
- < plugins >
- < plugin >
- < groupId > org.apache.maven.plugins </ groupId >
- < artifactId > maven-assembly-plugin </ artifactId >
- < version > 2.2-beta-1 </ version >
- < configuration >
- < descriptors >
- < descriptor >
- src/main/descriptors/unix-bin.xml
- </ descriptor >
- </ descriptors >
- < finalName > sensatic-jqr-${pom.version} </ finalName >
- < appendAssemblyId > false </ appendAssemblyId >
- </ configuration >
- </ plugin >
- </ plugins >
- </ build >
Version2.2的plugin需要一些额外的war解压缩(这里的解压缩就是指把war包中的内容抽取出来)处理,待会我们就会看到了。
现在让我们看看要在部署里面加些什么东西。首先我们需要创建一个依赖集(这里的依赖集其实不应该翻译,因为作者指的是下面这个<dependencySet>节点),用来将war包解压到应用的指定目录下:
xml 代码
- < dependencySet >
- < outputDirectory > /webapps/admin </ outputDirectory >
- < outputFileNameMapping > </ outputFileNameMapping >
- < unpack > true </ unpack >
- < unpackOptions >
- < excludes >
- < exclude > **/activemq.xml </ exclude >
- < exclude > **/webconsole-*.xml </ exclude >
- < exclude > WEB-INF/lib/** </ exclude >
- </ excludes >
- </ unpackOptions >
- < scope > runtime </ scope >
- < includes >
- < include > org.apache.activemq:activemq-web-console </ include >
- </ includes >
- </ dependencySet >
这个配置片断中有些部分值得注释一下。正如你看到的那样,我们已经配置了程序来解压缩war文件到/webapps/admin目录。我们需要version2.2的assembly plugin的目的就是使用<unpackOptions>,这个元素允许我们在解压的时候排除war包中某些文件。在上面的配置中,我排除了默认的配置文件,因为待会我将导入我需要的配置文件。同时,我也把WEB-INF/lib目录中的所有jar包都去掉了。正如我前面讲的,大多数的这些jar包已经在classpath下了。那些不在classpath下而且又是我们所需要的包可以用以下代码包含进来:
xml 代码
- < dependencySet >
- < outputDirectory > /webapps/admin/WEB-INF/lib </ outputDirectory >
- < scope > runtime </ scope >
- < includes >
- < include > opensymphony:sitemesh </ include >
- < include > javax.servlet:jstl </ include >
- < include > org.mortbay.jetty:jsp-2.1 </ include >
- < include > org.mortbay.jetty:jsp-api-2.1 </ include >
- < include > taglibs:standard </ include >
- < include > rome:rome </ include >
- < include > jdom:jdom </ include >
- </ includes >
- </ dependencySet >
我的应用程序是用jetty启动的, 这意味着所有需要的jar包已经在应用的classpath下了,所以这里,我们只需要包含这个特殊的web应用所需要的jar包就可以了。同时在做这项工作的同时我也发现了一些有趣的事:
1
当上面所说的一些jar包不是直接放在ActiveMQ的web控制台项目的classpath下(但是却放在父应用的classpath下),Web控制台会抛出异常(不能发现资源,如TLD)。我还不确定原因,但是我猜这是一个类加载方面的问题。 在这种情况下,我需要明确的把它放到web应用的classpath下,我并没有去深入的研究这个问题。
2
如果web控制台是用它本身的classpath中的ActiveMQ,它会抛一个异常来定位嵌入的broker。这里有三种解决方案,一个把所有的ActiveMQ的jar包从WEB-INF/lib下移除(我们用这种),设置父应用的classloader的优先级(后面将会讨论这个方法),或者使用其他的机制来配置web控制台。
在我们设置好classpath之后,就是时候来正确的配置我的web控制台了。默认情况下,web控制台会去加载webconsol-embedded.xml,并且会开启一个broker并使用这个broker。因为我们已经有了我们自己的broker,那么这个新开启的多余我们来说就是多余的了。所以我们需要提供我们自己的“轻量级”的配置:
xml 代码
- <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
- "http://www.springframework.org/dtd/spring-beans.dtd" >
- < beans >
- < bean id = "placeholderConfig"
- class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" />
- <!-- use the following bean for a local in-JVM broker -->
- < bean id = "brokerQuery"
- class = "org.apache.activemq.web.SingletonBrokerFacade"
- autowire = 'constructor' singleton = "false" />
- < bean id = "sessionPool"
- class = "org.apache.activemq.web.SessionPool" >
- < property name = "connectionFactory" ref = "connectionFactory" />
- </ bean >
- < bean id = "connectionFactory" class = "org.apache.activemq.ActiveMQConnectionFactory" >
- < property name = "brokerURL" value = "vm://localhost" />
- </ bean >
- < bean id = "queueBrowser"
- class = "org.apache.activemq.web.QueueBrowseQuery"
- autowire = 'constructor' singleton = "false" />
- < bean id = "messageQuery"
- class = "org.apache.activemq.web.MessageQuery"
- autowire = 'constructor' singleton = "false" />
- </ beans >
最后唯一剩下需要做的就是配置我们的web应用程序了。如果你没有配置jetty,那么首先你需要配置一下它。剩下的你需要做的就是提供额外的web应用程序的配置了,如下:
xml 代码
- < bean class = "org.mortbay.jetty.webapp.WebAppContext" >
- < property name = "contextPath" value = "/admin" />
- < property name = "resourceBase" value = "webapps/admin" />
- < property name = "parentLoaderPriority" value = "false" />
- </ bean >
如果你使用spring,也可以这样配置:
xml 代码
- < webAppContext contextPath = "/admin"
- resourceBase = "webapps/admin" parentLoaderPriority = "false" />
parentLoaderPriority属性的作用是告诉jetty是加载父应用的类还是本应用的类(如果两个应用有重复的类的话)。从我观察到的情况来看,在父应用的类优先级高的情况下,如果
web控制台需要老版本的jar包,那将会提高问题的发生概率,所以我把这个属性设为false。
以后,我想把这些jar包从WEB-INF/lib移到一个公用的目录,所有的web应用都可以共享它。
最后,如果你能从库(repository,指版本控制器的repository)中下载压缩版本(没有所需的jar文件,但是有现成的配置文件)的话那就太好了,解压之后嵌入到父应用中,那这个过程就变得轻而易举了。
译文结束
按照apache的说法,ActiveMQ的下一个版本5.0将默认自带web控制台,那么上面这些麻烦的步骤就可以省去了,但如果用5.0之前的版本的话,这篇文章可以作为一个参考。由于本人的语文水平问题,文章中不免有很多语句有不通顺,希望大家能多多拍砖。
发表评论
-
过滤字符的性能调优?挤一挤还是有的
2010-05-29 05:54 3548/* *auth ... -
Master-Slave,Spring,Hibernate,故事曲折离奇,情结跌宕起伏
2009-02-05 13:49 8589/** *作者:张荣华 *日期 ... -
弃成见,反省,并重新认识struts.i18n.encoding
2008-12-24 15:42 3791[size=medium]之前和大家讨论了struts2.0中 ... -
关键字:查询,事务,粒度
2008-08-22 17:05 5048[size=medium]/** *作者: ... -
看看mina和memcached的联姻(适合不同语言客户端,高并发?)
2008-07-21 17:06 7898[size=medium]/** * 作者:张荣华 * 日 ... -
如何解决mysql的master-slave模式中ReplicationDriver的使用问题
2008-06-19 18:23 8177/** * 作者:张荣华 * 日期:2008-6-19 ... -
别装了,难道你们不想把properties直接注入到object中去(spring-plugin)?
2008-04-09 18:01 3598[size=small]/** *作者:张荣华(ahuaxu ... -
用jamon来监控你的sql执行效率
2008-02-25 15:48 3668/** *作者:张荣华 *日期:2008-2-25 ... -
java同msn的通信,大家想想用途吧
2007-11-24 17:14 2486程序员的生活真是单调,除了编程还是编程,工作日 ... -
EAI企业应用集成场景及解决方案
2007-09-21 18:21 3124/** *作者:张荣华(ahuaxuan) *2007-9 ... -
quartz和应用的集群问题
2007-08-21 18:36 12740之前看到很多关于quartz的讨论,尤其是关于quar ... -
优化程序之前,可用Jamon来监测你的Spring应用
2007-08-14 18:14 8019/** *作者:张荣华(ahuaxuan) *2007-8-1 ... -
请问责任链真的是一种设计模式吗
2007-07-26 18:12 9322坛子上讨论设计模式的也挺多的,但是关于这个责任链模式还没有人提 ... -
设计模式之:解剖观察者模式
2007-07-17 16:12 6818[size=9] 论坛上很多人都 ... -
java邮件:在简单和复杂之间的方案
2007-07-11 18:07 7558/** *作者:张荣华(ahuaxu ... -
强强连手, 在模板中分页,看Freemarker和displaytag的结合
2007-07-09 09:22 6894/** *作者:张荣华(ahuaxuan) *2007-0 ... -
解惑:在spring+hibernate中,只读事务是如何被优化的。
2007-06-28 18:22 7581/** *作者:张荣华(ahuaxuan) *2007- ... -
让webwork零配置 第二章(实现)(实例已放出,大家可以下载运行)
2007-06-25 09:23 5678/** *作者:张荣华(ahuaxuan) *2007-0 ... -
让webwork2零配置,第一章(主贴再次更新)
2007-06-18 15:41 13246/** *作者:张荣华(ahuaxuan) *2007-0 ... -
Spring声明式事务管理源码解读之事务提交
2007-06-11 09:19 7259/** *作者:张荣华(ahuaxuan) *2007-0 ...
相关推荐
activeMQCockpit 作为带有struts2和bootstrap的activeMQ Web控制台的替代目标(目前还不是肯定)。 作为一个项目开始,该项目旨在简化使用活动MQ进行集成测试的过程,因为活动MQ Web控制台对于集成测试而言并不是很...
Springboot和ActiveMQ的整合实例
activemq基于web的例子
activeMQ与spring整合开发的例子程序,消息队列技术
Spring和ActiveMQ整合的完整实例
ActiveMQ 入门实战(3)--SpringBoot 整合 ActiveMQ(csdn)————程序
activemq5.3.1整合应用服务器详解,此文档适合刚开始接触activem嵌入其他容器的开发模式的开发人员参考的。
activemq-web-console的默认使用方式是通过在activemq.xml中导入jetty.xml配置一个jetty server来实现的。其实activemq-web-console完全可以和activemq-broker分开来部署。 activemq-web-console包含3个apps, 1.一...
Spring Boot 做的一个简单的增删改查,前台页面整合Thymeleaf模板,数据源druid,声明式事务,整合redis,并开启redis事务,整合ActiveMQ
源码为web工程,整合了Spring,SpringMVC、ActiveMQ,启动后,index页面输入消息,控制台输出消息。
此实例基于Spring+JMS+ActiveMQ+Tomcat,注解的完整实例,包含jar包
JMS教程+activemq以及activemq和tomcat的整合+整合实例代码+持久化消息配置以及工程+tomcat服务器的配置
ActiveMQ与spring整合进行封装,实现全注解开发,并且支持topic与queue两种模式无缝切换,对外提供统一的接口调用,简化操作。对连接池进行优化,容器实例动态生成。
将ActiveMQ和Spring进行了整合,是一个单项目的demo,可以根据其扩展为分布式项目
springboot整合activemq案例,queue,topic两种模式 定时运行和controller请求运行两种方式
spring 与ACTIVEMQ整合.
SpringMVC+JMS(ActiveMQ)整合的Demo,程序可运行。但不排除有一些小问题,请批评指正。
activemq教程,activemq与tomcat整合
maven spring mq整合,注意最新版的mq的jar包是集成了spring的,我用的5.11.1的。 运行之前,先要下载mq服务本地运行http://apache.fayea.com//activemq/5.14.3/apache-activemq-5.14.3-bin.zip