Почему я не могу создать экземпляр DataImportHandler в Solr на JBoss?

Я пытаюсь настроить Solr 3.5.0 на JBoss 5.1. Все работает вполне нормально. Я скопировал war в каталог deploy, все зависимости из каталогов dist и contrib в каталог lib (или более ранний каталог deploy).

Я могу запустить сервер, все работает нормально, но всякий раз, когда я хочу активировать 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)

Я почти уверен, что мое определение обработчика запросов правильное, но просто чтобы быть уверенным:

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

As far as I can find, this error may be caused by DataImportHandler and SolrRequestHandler supposedly being hold different class loaders.

Всякий раз, когда я запускаю Solr из приложения start.jar в примере (я думаю, что он запускает сервер Jetty), он работает нормально.

Мой вопрос: это действительно из-за проблемы с загрузчиком классов или из-за чего-то еще? И, что более важно: как мне это исправить?


person r3mbol    schedule 04.01.2012    source источник
comment
Вы решили? Разве наши ответы не помогли?   -  person javanna    schedule 11.01.2012
comment
да, они были, благодаря им я наконец смог это сделать, хотя в то время мне было проще просто работать с включенным сервером jetty.   -  person r3mbol    schedule 12.01.2012
comment
возможный дубликат сбой инициализации Solr RequestHandler   -  person kenorb    schedule 29.03.2015


Ответы (3)


Это проблема с загрузчиком классов, и в соответствии с этим опубликовать в списке рассылки Lucene Developer вам необходимо сделать следующее:

убедитесь, что файлы JAR для импорта данных НЕ находятся в пути к классам и загружаются не другими загрузчиками классов, а из пути, указанного в solrconfig.xml. Это гарантирует, что классы импорта данных загружаются одним и тем же загрузчиком классов.

Пожалуйста, смотрите ветку для более подробной информации.

person Paige Cook    schedule 04.01.2012
comment
путь, указанный в solrconfig.xml.. можете ли вы описать это? Нам нужно добавить банку в папку solr/conf? - person mahesh; 05.12.2013

Ответ Пейдж Кук правильный, но я хотел бы добавить некоторые детали. Я думаю, вы поместили банку dataimporthandler в общий каталог lib вашего сервера приложений, в то время как все банки solr находятся внутри WEB-INF/lib из solr.war. Это означает, что вы загружаете jar dataimporthandler из другого загрузчика классов. Вы можете решить эту проблему, поместив свои библиотеки solr в другой каталог lib (внешний). Затем в вашем 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 будет загружать jar-файлы из этого внешнего расположения через свой специальный загрузчик классов.

person javanna    schedule 04.01.2012

Как сказал Пейдж Кук, это проблема с загрузчиком классов, вы должны добавить банки для импорта данных в путь, используемый загрузчиком классов Solr. Чтобы определить такой путь к библиотеке, есть много вариантов. Старые версии Solr (4.x и старше) принимают атрибут sharedLib в теге:

<solr persistent="false" sharedLib="lib"></solr>
  • #P2#

Более новые версии Solr (5.x и новее) используют sharedLib< /a> как дочерний узел элемента solr.

<?xml version='1.0' encoding='UTF-8'?>
<solr>
  <str name='sharedLib'>lib</str>
</solr>

Даже в этом случае путь lib относится к пути solr.home (где находится solr.xml).

Другой альтернативой является определение lib директива непосредственно в solrconfig.xml,

person freedev    schedule 25.02.2019