[英]Why can't I instantiate DataImportHandler in Solr on JBoss?
我正在嘗試在JBoss 5.1上設置Solr 3.5.0。 一切正常。 我將war復制到deploy dir中,將dist和contrib目錄中的所有依賴項都復制到lib(或更早的deploy)目錄中。
我可以啟動服務器,一切正常,但是每當我想激活DataImportHandler來索引數據庫中的數據時,都會出現錯誤。
基本上,我要做的就是復制是從example / example-DIH / solr / db復制一個核心(或者整個示例,都沒關系),我在solr.xml中注冊了核心,並且在啟動時出現錯誤:
15:17:10,707 SEVERE [RequestHandlers] org.apache.solr.common.SolrException: Error Instantiating Request Handler, org.apache.solr.handler.dataimport.DataImportHandler is not a org.apache.solr.request.SolrRequestHandler
at org.apache.solr.core.SolrCore.createInstance(SolrCore.java:427)
at org.apache.solr.core.SolrCore.createRequestHandler(SolrCore.java:461)
at org.apache.solr.core.RequestHandlers.initHandlersFromConfig(RequestHandlers.java:157)
我很確定我的請求處理程序定義正確,但是請確保:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">dataimport.xml</str>
</lst>
據我所知,此錯誤可能是由DataImportHandler和SolrRequestHandler可能持有不同的類加載器引起的。
在示例中,只要我從start.jar應用程序啟動Solr(我認為它會啟動Jetty服務器),就可以正常工作。
我的問題是:這是否真的是由於類加載器問題或其他原因引起的? 而且,更重要的是:我該如何解決?
這是一個類加載器問題,根據Lucene Developer Mailing List上的這篇文章,您需要執行以下操作:
確保dataimport罐不在類路徑中,也不由其他類加載器加載,而是從solrconfig.xml中指定的路徑加載。 這將確保數據導入類由相同的類加載器加載。
請參閱主題以獲取更多詳細信息。
Paige Cook的答案是正確的,但我想補充一些細節。 我認為您將dataimporthandler jar放入應用程序服務器的公共lib目錄中,而所有solr jar都位於solr.war
的WEB-INF/lib
中。 這意味着您正在從其他類加載器加載dataimporthandler jar。 您可以通過將solr庫放在其他lib(外部)目錄中來解決此問題。 然后,在您的solr.xml
您應該通過sharedLib
屬性引用該lib文件夾。 像這樣:
<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="false" sharedLib="lib">
<cores adminPath="/admin/cores">
<core name="core1" instanceDir="core1" />
</cores>
</solr>
這樣,Solr Web應用程序將通過其特定的類加載器從該外部位置加載jar。
正如Paige Cook所說的,這是一個類加載器問題,您應該將dataimport jar添加到Solr類加載器使用的路徑中。 為了定義這樣的lib路徑,有很多選項。 舊版本的Solr(4.x及更早版本)在標記中接受屬性sharedLib
:
<solr persistent="false" sharedLib="lib"></solr>
sharedLib-包含.jar文件的目錄的路徑,該文件已添加到每個核心的類路徑中。 該路徑相對於
solr.home
(solr.xml
所在的位置)。
較新版本的Solr(5.x及更高版本)將sharedLib
用作solr
元素的子節點。
<?xml version='1.0' encoding='UTF-8'?>
<solr>
<str name='sharedLib'>lib</str>
</solr>
即使在這種情況下, lib
路徑也相對於solr.home
( solr.xml
所在的位置)。
另一種選擇是直接在solrconfig.xml
定義一個lib指令 ,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.