2013-02-25 94 views
1

我最近遇到了將Apache SOLR 4.1 war文件部署到我們的tomcat 6服務器的問題。在服務器庫($ CATALINA_HOME/lib)中,我們有一箇舊的lucene實現庫(2.9+)用於一些傳統的搜索應用程序。 SOLR在其.war文件的WEB-INF/lib中有較新的4.1 lucene實現jar文件。通過檢查Tomcat 6文檔,看起來SOLR庫應該加載FIRST;然而,根據經驗,情況並非如此:如果我將其部署到正在運行的服務器上,則管理控制檯將顯示其加載2.9.0 lucene實現。使用lucene實現的Apache SOLR 4.1類加載器問題

要添加另一個扭曲:如果我停止並重新啓動Tomcat服務器,則會切換到4.1!正如你大概可以想象的那樣,這讓我的奴隸複製悲傷;因爲我相信我的初始索引是通過2.9 lucene構建的,在某個時候重新啓動了容器,使用隨後加載的4.1進行更新,並試圖複製到2.9 lucene實現從屬,導致它們全部失敗。

這裏的任何建議都會受到歡迎。我嘗試從SOLR war文件中刪除4.1庫,但是它無法加載,因爲有些依賴似乎需要它們(儘管類加載器在部署之後選擇「通用庫」lucene實現!)更新所有遺留代碼是不可行的將這些服務器上的軟件轉換爲lucene 4,儘可能多地重寫。任何想法爲什麼類加載器會以這種方式執行?

編輯:更復雜的事情,如果我有一個剛開始的Tomcat顯示4.1.0 lucene實現,然後RELOAD核心或通過Tomcat管理器做一個webapp重新加載,它會返回到2.9.0 !這顯然是不可接受的。

回答

0

在給定的場景中,我會選擇在另一個Web容器中運行Solr(可能是像碼頭這樣的輕量級的)。但我不確定您的架構是否具有這種靈活性,或者您可能擔心這些容器的可維護性。如果您不受這些擔憂的影響,您可以繼續使用此方法。

另一個選擇是讓您的Tomcat使用您的WEB-INF庫(WEB-INF/lib)用於Solr和服務器庫($ CATALINA_HOME/lib),以便使用lucene進行傳統搜索。

您可以通過參數在網絡邏輯服務器實現這一目標,

<container-descriptor> 
    <prefer-web-inf-classes>true</prefer-web-inf-classes> 
</container-descriptor> 
在 「weblogic.xml中」 爲Solr的web應用程序

希望有一個選項可以在Tomcat中做到這一點!