2012-01-04 75 views
4

我试图在JBoss 5.1上设置Solr 3.5.0。一切工作都很好。我将war复制到deploy目录中,将dist和contrib目录中的所有依赖项复制到lib(或更早部署)目录中。为什么我无法在JBoss上的Solr中实例化DataImportHandler?

我可以启动一个服务器,一切正常,但每当我想激活DataImportHandler索引我的数据库中的数据时,我收到一个错误。

基本上我所做的是我复制是从example/example-DIH/solr/db(或整个例子,这没关系)复制一个核心,我在solr.xml中注册核心并在启动时I得到一个错误:

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 2012-01-11 08:17:57

+0

是的,他们是,感谢他们,我终于可以做到了,尽管当时我发现简单地使用附带的码头服务器更容易。 – r3mbol 2012-01-12 14:30:30

+0

[Solr RequestHandler初始化失败](http://stackoverflow.com/questions/19134881/solr-requesthandler-init-failure) – kenorb 2015-03-29 14:05:53

回答

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中指定的路径”的可能的重复..你能描述这个吗?我们需要在solr/conf文件夹中添加jar吗? – mahesh 2013-12-05 09:03:55

1

Paige Cook的答案是正确的,但我想补充一些细节。我认为你把dataimporthandler jar放到应用服务器的公共lib目录中,而所有的solr jar都在的solr.war之内。这意味着您正在从不同的类加载器加载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应用程序将通过其特定的类加载器加载从外部位置罐子。

相关问题