国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
把ActiveMQ的控制臺(tái)整合到你的web程序中-ahuaxuan -JavaEye技術(shù)社...
2007-07-19
 請(qǐng)問責(zé)任鏈真的是一種設(shè)計(jì)模式嗎 ...  |   設(shè)計(jì)模式之:解剖觀察者模式 
  

關(guān)鍵字: 企業(yè)應(yīng)用   JMS    
在使用ActiveMQ的時(shí)候把ActiveMQ的控制臺(tái)整合到web程序中是比較好的做法,這里有篇文章講解了這樣一個(gè)步驟http://www.oreillynet.com/onjava/blog/2007/06/integrating_activemq_web_conso.html。
原文作者:Dejan Bosanac
譯者:張榮華
由于水平所限,翻譯難免有不妥之處歡迎大家指正。
 
正文:
如果你的應(yīng)用程序整合了ActiveMQ,那么再把他的web控制臺(tái)也整合到你的應(yīng)用中應(yīng)該來說是很有意義的。它(ActiveMQ的web控制臺(tái))能為你的用戶提供基本的監(jiān)控和管理的操作功能。你可以采取的一個(gè)方案是把它做成一個(gè)war文件,整合進(jìn)系統(tǒng),但是如果你已經(jīng)在系統(tǒng)中整合了一大堆的ActiveMQ,你可能就只想引進(jìn)那些必需的庫(kù)和文件了。
 
事實(shí)上,我們并不能做到無縫整合(作者的無縫整合估計(jì)是指不需什么配置拿來即用的那種方式)。但是在做這項(xiàng)工作的時(shí)候我仍然發(fā)現(xiàn)了幾個(gè)步驟(希望可以幫助有同樣需求的人)。我使用maven2來作為構(gòu)建工具,它會(huì)組裝那些插件來創(chuàng)建一個(gè)最終的distribution。如果你使用一些不同的構(gòu)建環(huán)境,那么最好還是堅(jiān)持定制war文件。
 
首先,你需要使用version2.2或更新的maven assembly plugin。 然后把以下代碼片斷復(fù)制到你的pox.xml中去:
xml 代碼
  1. <build>  
  2.     <plugins>  
  3.         <plugin>  
  4.             <groupId>org.apache.maven.plugins</groupId>  
  5.             <artifactId>maven-assembly-plugin</artifactId>  
  6.             <version>2.2-beta-1</version>  
  7.             <configuration>  
  8.                 <descriptors>  
  9.                     <descriptor>  
  10.                         src/main/descriptors/unix-bin.xml   
  11.                     </descriptor>  
  12.                 </descriptors>  
  13.                 <finalName>sensatic-jqr-${pom.version}</finalName>  
  14.                 <appendAssemblyId>false</appendAssemblyId>  
  15.             </configuration>  
  16.         </plugin>  
  17.     </plugins>  
  18. </build>  
 
Version2.2的plugin需要一些額外的war解壓縮(這里的解壓縮就是指把war包中的內(nèi)容抽取出來)處理,待會(huì)我們就會(huì)看到了。
 
現(xiàn)在讓我們看看要在部署里面加些什么東西。首先我們需要?jiǎng)?chuàng)建一個(gè)依賴集(這里的依賴集其實(shí)不應(yīng)該翻譯,因?yàn)樽髡咧傅氖窍旅孢@個(gè)節(jié)點(diǎn)),用來將war包解壓到應(yīng)用的指定目錄下:
xml 代碼
  1. <dependencySet>  
  2.     <outputDirectory>/webapps/admin</outputDirectory>  
  3.         <outputFileNameMapping></outputFileNameMapping>  
  4.         <unpack>true</unpack>  
  5.         <unpackOptions>  
  6.             <excludes>  
  7.                 <exclude>**/activemq.xml</exclude>  
  8.                 <exclude>**/webconsole-*.xml</exclude>  
  9.                 <exclude>WEB-INF/lib/**</exclude>  
  10.             </excludes>  
  11.         </unpackOptions>  
  12.         <scope>runtime</scope>  
  13.         <includes>  
  14.             <include> org.apache.activemq:activemq-web-console </include>  
  15.         </includes>  
  16. </dependencySet>  
  17.    
這個(gè)配置片斷中有些部分值得注釋一下。正如你看到的那樣,我們已經(jīng)配置了程序來解壓縮war文件到/webapps/admin目錄。我們需要version2.2的assembly plugin的目的就是使用,這個(gè)元素允許我們?cè)诮鈮旱臅r(shí)候排除war包中某些文件。在上面的配置中,我排除了默認(rèn)的配置文件,因?yàn)榇龝?huì)我將導(dǎo)入我需要的配置文件。同時(shí),我也把WEB-INF/lib目錄中的所有jar包都去掉了。正如我前面講的,大多數(shù)的這些jar包已經(jīng)在classpath下了。那些不在classpath下而且又是我們所需要的包可以用以下代碼包含進(jìn)來:
xml 代碼
  1. <dependencySet>  
  2.     <outputDirectory>/webapps/admin/WEB-INF/lib</outputDirectory>  
  3.         <scope>runtime</scope>  
  4.         <includes>  
  5.             <include>opensymphony:sitemesh</include>  
  6.             <include>javax.servlet:jstl</include>  
  7.             <include>org.mortbay.jetty:jsp-2.1</include>  
  8.             <include>org.mortbay.jetty:jsp-api-2.1</include>  
  9.             <include>taglibs:standard</include>  
  10.             <include>rome:rome</include>  
  11.             <include>jdom:jdom</include>  
  12.         </includes>  
  13. </dependencySet>  
 
我的應(yīng)用程序是用jetty啟動(dòng)的, 這意味著所有需要的jar包已經(jīng)在應(yīng)用的classpath下了,所以這里,我們只需要包含這個(gè)特殊的web應(yīng)用所需要的jar包就可以了。同時(shí)在做這項(xiàng)工作的同時(shí)我也發(fā)現(xiàn)了一些有趣的事:
    1當(dāng)上面所說的一些jar包不是直接放在ActiveMQ的web控制臺(tái)項(xiàng)目的classpath下(但是卻放在父應(yīng)用的classpath下),Web控制臺(tái)會(huì)拋出異常(不能發(fā)現(xiàn)資源,如TLD)。我還不確定原因,但是我猜這是一個(gè)類加載方面的問題。 在這種情況下,我需要明確的把它放到web應(yīng)用的classpath下,我并沒有去深入的研究這個(gè)問題。
 
    2如果web控制臺(tái)是用它本身的classpath中的ActiveMQ,它會(huì)拋一個(gè)異常來定位嵌入的broker。這里有三種解決方案,一個(gè)把所有的ActiveMQ的jar包從WEB-INF/lib下移除(我們用這種),設(shè)置父應(yīng)用的classloader的優(yōu)先級(jí)(后面將會(huì)討論這個(gè)方法),或者使用其他的機(jī)制來配置web控制臺(tái)。
 
在我們?cè)O(shè)置好classpath之后,就是時(shí)候來正確的配置我的web控制臺(tái)了。默認(rèn)情況下,web控制臺(tái)會(huì)去加載webconsol-embedded.xml,并且會(huì)開啟一個(gè)broker并使用這個(gè)broker。因?yàn)槲覀円呀?jīng)有了我們自己的broker,那么這個(gè)新開啟的多余我們來說就是多余的了。所以我們需要提供我們自己的“輕量級(jí)”的配置:
xml 代碼
  1. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"   
  2.     "http://www.springframework.org/dtd/spring-beans.dtd">  
  3. <beans>  
  4.     
  5.  <bean id="placeholderConfig"  
  6.       class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" />  
  7.     
  8.  <!-- use the following bean for a local in-JVM broker -->  
  9.  <bean id="brokerQuery"  
  10.       class="org.apache.activemq.web.SingletonBrokerFacade"  
  11.       autowire=‘constructor‘ singleton="false"/>  
  12.     
  13.  <bean id="sessionPool"  
  14.       class="org.apache.activemq.web.SessionPool">  
  15.         <property name="connectionFactory" ref="connectionFactory"/>  
  16.  </bean>  
  17.     
  18.  <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  
  19.    <property name="brokerURL" value="vm://localhost"/>  
  20.  </bean>  
  21.     
  22.  <bean id="queueBrowser"  
  23.       class="org.apache.activemq.web.QueueBrowseQuery"  
  24.       autowire=‘constructor‘ singleton="false"/>  
  25.  <bean id="messageQuery"  
  26.       class="org.apache.activemq.web.MessageQuery"  
  27.       autowire=‘constructor‘ singleton="false"/>  
  28.     
  29. </beans>  
 
最后唯一剩下需要做的就是配置我們的web應(yīng)用程序了。如果你沒有配置jetty,那么首先你需要配置一下它。剩下的你需要做的就是提供額外的web應(yīng)用程序的配置了,如下:
xml 代碼
  1. <bean class="org.mortbay.jetty.webapp.WebAppContext">  
  2.     <property name="contextPath" value="/admin"/>  
  3.     <property name="resourceBase" value="webapps/admin"/>  
  4.     <property name="parentLoaderPriority" value="false"/>  
  5. </bean>  
 
如果你使用spring,也可以這樣配置:
xml 代碼
  1. <webAppContext contextPath="/admin"  
  2. resourceBase="webapps/admin" parentLoaderPriority="false" />  
 
parentLoaderPriority屬性的作用是告訴jetty是加載父應(yīng)用的類還是本應(yīng)用的類(如果兩個(gè)應(yīng)用有重復(fù)的類的話)。從我觀察到的情況來看,在父應(yīng)用的類優(yōu)先級(jí)高的情況下,如果web控制臺(tái)需要老版本的jar包,那將會(huì)提高問題的發(fā)生概率,所以我把這個(gè)屬性設(shè)為false。
 
以后,我想把這些jar包從WEB-INF/lib移到一個(gè)公用的目錄,所有的web應(yīng)用都可以共享它。
 
最后,如果你能從庫(kù)(repository,指版本控制器的repository)中下載壓縮版本(沒有所需的jar文件,但是有現(xiàn)成的配置文件)的話那就太好了,解壓之后嵌入到父應(yīng)用中,那這個(gè)過程就變得輕而易舉了。
譯文結(jié)束
 
按照apache的說法,ActiveMQ的下一個(gè)版本5.0將默認(rèn)自帶web控制臺(tái),那么上面這些麻煩的步驟就可以省去了,但如果用5.0之前的版本的話,這篇文章可以作為一個(gè)參考。由于本人的語(yǔ)文水平問題,文章中不免有很多語(yǔ)句有不通順,希望大家能多多拍磚。
 
 
最后更新:2007-07-19 12:13
12:06  |   永久鏈接  |   瀏覽 (344)  |   評(píng)論 (0)  |    收藏  |   java隨想  |   進(jìn)入論壇  |  
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JBPM4.4與SSH2的整合
Maven實(shí)戰(zhàn)(六)依賴
Spring Boot 面試題
WEBLOGIC6.0的一些使用經(jīng)驗(yàn)
Spring中使用classpath加載配置文件淺析
linux下ant的安裝
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服