java jboss solr dih

java - ¿Por qué no puedo instanciar DataImportHandler en Solr en JBoss?



dih (2)

Estoy intentando configurar Solr 3.5.0 en JBoss 5.1. Todo funciona bastante bien Copié war en deploy dir, todas las dependencias de los directorios dist y contrib en el directorio lib (o deployment anterior).

Puedo iniciar un servidor, todo funciona bien, pero cada vez que quiero activar DataImportHandler para indexar los datos en mi base de datos, aparece un error.

Básicamente, lo que hago es copiar es copiar un núcleo de example / example-DIH / solr / db (o ejemplo completo, eso no importa), registro el núcleo en solr.xml y al inicio me sale un error:

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)

Estoy bastante seguro de que la definición de mi controlador de solicitudes es correcta, pero solo para estar seguro:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">dataimport.xml</str> </lst>

Por lo que puedo encontrar, este error puede deberse a que DataImportHandler y SolrRequestHandler supuestamente tienen diferentes cargadores de clases.

Cada vez que inicio un Solr desde la aplicación start.jar en el ejemplo (creo que se inicia un servidor Jetty) funciona bien.

Mi pregunta es: ¿esto es realmente debido al problema del cargador de clases, o alguna otra cosa? Y, más importante aún, ¿cómo lo arreglo?


Este es un problema del cargador de clases y, de acuerdo con esta publicación en la Lista de distribución de desarrolladores de Lucene , debe hacer lo siguiente:

asegúrese de que los dataimport jar NO estén en el classpath y no cargados por otros cargadores de clases, sino desde la ruta especificada en solrconfig.xml. Esto asegurará que las clases de importación de datos sean cargadas por el mismo cargador de clases.

Por favor, mira el hilo para más detalles.


La respuesta de Paige Cook es correcta, pero me gustaría agregar algunos detalles. Creo que colocas el contenedor dataimporthandler en el directorio common lib de tu servidor de aplicaciones, mientras que todos los archivos de solr están dentro de WEB-INF/lib de solr.war . Esto significa que está cargando el contenedor dataimporthandler desde un cargador de clases diferente. Puede resolverlo colocando sus bibliotecas de solr en un directorio lib (externo) diferente. Luego, en su solr.xml debe consultar esa carpeta lib a través del atributo sharedLib . Algo como esto:

<?xml version="1.0" encoding="UTF-8" ?> <solr persistent="false" sharedLib="lib"> <cores adminPath="/admin/cores"> <core name="core1" instanceDir="core1" /> </cores> </solr>

De esta forma, la aplicación web Solr cargará tarros desde esa ubicación externa a través de su cargador de clases específico.