| 2007-07-19 | ![]() ![]() |
| 在使用ActiveMQ的時(shí)候把ActiveMQ的控制臺整合到web程序中是比較好的做法,這里有篇文章講解了這樣一個(gè)步驟http://www.oreillynet.com/onjava/blog/2007/06/integrating_activemq_web_conso.html。 原文作者:Dejan Bosanac 譯者:張榮華 由于水平所限,翻譯難免有不妥之處歡迎大家指正。 正文: 如果你的應用程序整合了ActiveMQ,那么再把他的web控制臺也整合到你的應用中應該來(lái)說(shuō)是很有意義的。它(ActiveMQ的web控制臺)能為你的用戶(hù)提供基本的監控和管理的操作功能。你可以采取的一個(gè)方案是把它做成一個(gè)war文件,整合進(jìn)系統,但是如果你已經(jīng)在系統中整合了一大堆的ActiveMQ,你可能就只想引進(jìn)那些必需的庫和文件了。 事實(shí)上,我們并不能做到無(wú)縫整合(作者的無(wú)縫整合估計是指不需什么配置拿來(lái)即用的那種方式)。但是在做這項工作的時(shí)候我仍然發(fā)現了幾個(gè)步驟(希望可以幫助有同樣需求的人)。我使用maven2來(lái)作為構建工具,它會(huì )組裝那些插件來(lái)創(chuàng )建一個(gè)最終的distribution。如果你使用一些不同的構建環(huán)境,那么最好還是堅持定制war文件。 首先,你需要使用version2.2或更新的maven assembly plugin。 然后把以下代碼片斷復制到你的pox.xml中去: xml 代碼
Version2.2的plugin需要一些額外的war解壓縮(這里的解壓縮就是指把war包中的內容抽取出來(lái))處理,待會(huì )我們就會(huì )看到了。 現在讓我們看看要在部署里面加些什么東西。首先我們需要創(chuàng )建一個(gè)依賴(lài)集(這里的依賴(lài)集其實(shí)不應該翻譯,因為作者指的是下面這個(gè) xml 代碼
這個(gè)配置片斷中有些部分值得注釋一下。正如你看到的那樣,我們已經(jīng)配置了程序來(lái)解壓縮war文件到/webapps/admin目錄。我們需要version2.2的assembly plugin的目的就是使用 xml 代碼
我的應用程序是用jetty啟動(dòng)的, 這意味著(zhù)所有需要的jar包已經(jīng)在應用的classpath下了,所以這里,我們只需要包含這個(gè)特殊的web應用所需要的jar包就可以了。同時(shí)在做這項工作的同時(shí)我也發(fā)現了一些有趣的事: 1當上面所說(shuō)的一些jar包不是直接放在A(yíng)ctiveMQ的web控制臺項目的classpath下(但是卻放在父應用的classpath下),Web控制臺會(huì )拋出異常(不能發(fā)現資源,如TLD)。我還不確定原因,但是我猜這是一個(gè)類(lèi)加載方面的問(wèn)題。 在這種情況下,我需要明確的把它放到web應用的classpath下,我并沒(méi)有去深入的研究這個(gè)問(wèn)題。 2如果web控制臺是用它本身的classpath中的ActiveMQ,它會(huì )拋一個(gè)異常來(lái)定位嵌入的broker。這里有三種解決方案,一個(gè)把所有的ActiveMQ的jar包從WEB-INF/lib下移除(我們用這種),設置父應用的classloader的優(yōu)先級(后面將會(huì )討論這個(gè)方法),或者使用其他的機制來(lái)配置web控制臺。 在我們設置好classpath之后,就是時(shí)候來(lái)正確的配置我的web控制臺了。默認情況下,web控制臺會(huì )去加載webconsol-embedded.xml,并且會(huì )開(kāi)啟一個(gè)broker并使用這個(gè)broker。因為我們已經(jīng)有了我們自己的broker,那么這個(gè)新開(kāi)啟的多余我們來(lái)說(shuō)就是多余的了。所以我們需要提供我們自己的“輕量級”的配置: xml 代碼
最后唯一剩下需要做的就是配置我們的web應用程序了。如果你沒(méi)有配置jetty,那么首先你需要配置一下它。剩下的你需要做的就是提供額外的web應用程序的配置了,如下: xml 代碼
如果你使用spring,也可以這樣配置: xml 代碼
parentLoaderPriority屬性的作用是告訴jetty是加載父應用的類(lèi)還是本應用的類(lèi)(如果兩個(gè)應用有重復的類(lèi)的話(huà))。從我觀(guān)察到的情況來(lái)看,在父應用的類(lèi)優(yōu)先級高的情況下,如果web控制臺需要老版本的jar包,那將會(huì )提高問(wèn)題的發(fā)生概率,所以我把這個(gè)屬性設為false。 以后,我想把這些jar包從WEB-INF/lib移到一個(gè)公用的目錄,所有的web應用都可以共享它。 最后,如果你能從庫(repository,指版本控制器的repository)中下載壓縮版本(沒(méi)有所需的jar文件,但是有現成的配置文件)的話(huà)那就太好了,解壓之后嵌入到父應用中,那這個(gè)過(guò)程就變得輕而易舉了。 譯文結束 按照apache的說(shuō)法,ActiveMQ的下一個(gè)版本5.0將默認自帶web控制臺,那么上面這些麻煩的步驟就可以省去了,但如果用5.0之前的版本的話(huà),這篇文章可以作為一個(gè)參考。由于本人的語(yǔ)文水平問(wèn)題,文章中不免有很多語(yǔ)句有不通順,希望大家能多多拍磚。 |
聯(lián)系客服