2012-01-04 10 views
4

私はJBoss 5.1にSolr 3.5.0を設定しようとしています。すべてうまく動作します。私はwarをdeployディレクトリにコピーし、distとcontribディレクトリのすべての依存関係をlibディレクトリ(またはそれ以前のdeployディレクトリ)にコピーしました。なぜ私はDataImportHandlerをJBossのSolrでインスタンス化できませんか?

私はサーバーを起動できますが、すべて正常に動作しますが、DB内のデータをインデックス化するDataImportHandlerを有効にするときはいつでもエラーが発生します。

基本的に私はコピーは私が/ 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) 

私は私の要求ハンドラの定義が正しいですが、念のためにかなり確信している:このエラー

私の知る限りが見つけることができるよう可能DataImportHaによって引き起こされるndlerとSolrRequestHandlerは異なるクラスローダーを保持しているはずです。

私はstart.jarアプリケーションからSolrを起動するたびに(私はJettyサーバーを起動すると思う)、うまく動作します。

私の質問です:これは本当にクラスローダーの問題、またはいくつかの他のもののためですか?さらに重要なことは、どうすれば修正できるのでしょうか?

+0

解決しましたか?私たちの答えは役に立ちませんでしたか? – javanna

+0

はい、彼らのおかげで、私は最終的にそれを作ることができました。しかし、当時は、付属のjettyサーバーで簡単に作業することがわかりました。 – r3mbol

+0

[Solr RequestHandler init failure]の重複可能性があります(http://stackoverflow.com/questions/19134881/solr-requesthandler-init-failure) – kenorb

答えて

7

これは、クラスローダの問題であり、このpost on the Lucene Developer Mailing Listに応じて次の操作を行う必要があります

make sure that the dataimport jars are NOT in the classpath and not loaded by other classloaders but from the path specified in solrconfig.xml. This will ensure that the dataimport classes are loaded by the same classloader.

詳細は、スレッドを参照してください。

+0

"solrconfig.xmlで指定されたパス" ..これを記述できますか? jarをsolr/confフォルダに追加する必要がありますか? – mahesh

1

ページクックの答えは正確ですが、いくつかの詳細を追加したいと思います。私は、すべてのソルバーがのsolr.warの中にあるのに対し、dataimporthandler jarをアプリケーションサーバーの共通のlibディレクトリに置くと思います。つまり、別のクラスローダーからdataimporthandler jarをロードしています。 solrライブラリを別のlib(external)ディレクトリに置くことで、それを解決できます。次に、solr.xmlにlibフォルダをsharedLib属性で参照する必要があります。

<?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をロードします。

関連する問題