Я пытаюсь использовать Hibernate-поиск в одном из моих JavaEE проектов и, как запустить в точно такую же проблему, как described by Rallenaldo:java.lang.ClassCastException: ... Lucene40PostingsFormat
Моего Maven-проект с использованием
- Java JDK 1.8.0_73
- Hibernate 5.0.6.Final
- Hibernate-Search 5.5.2.Final (который использует Lucene 5.3.1)
и попробуйте развернуть на сервере приложений Glassfish 4.1.1 (с минимальными изменениями стандартной конфигурации).
При развертывании моего приложения процесс развертывания заканчивается в следующем ClassCastException, когда Lucene пытается загрузить кодеки из пакета Lucene-отсталых-кодеков (версия 5.3.1):
java.lang.ClassCastException: class org.apache.lucene.codecs.lucene40.Lucene40PostingsFormat
at java.lang.Class.asSubclass(Class.java:3404)
at org.apache.lucene.util.SPIClassIterator.next(SPIClassIterator.java:141)
at org.apache.lucene.util.NamedSPILoader.reload(NamedSPILoader.java:65)
at org.apache.lucene.util.NamedSPILoader.<init>(NamedSPILoader.java:47)
at org.apache.lucene.util.NamedSPILoader.<init>(NamedSPILoader.java:37)
at org.apache.lucene.codecs.PostingsFormat$Holder.<clinit>(PostingsFormat.java:49)
at org.apache.lucene.codecs.PostingsFormat.forName(PostingsFormat.java:112)
at org.apache.lucene.codecs.lucene40.Lucene40Codec.<init>(Lucene40Codec.java:115)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at java.lang.Class.newInstance(Class.java:442)
at org.apache.lucene.util.NamedSPILoader.reload(NamedSPILoader.java:67)
at org.apache.lucene.util.NamedSPILoader.<init>(NamedSPILoader.java:45)
at org.apache.lucene.util.NamedSPILoader.<init>(NamedSPILoader.java:37)
at org.apache.lucene.codecs.Codec$Holder.<clinit>(Codec.java:47)
at org.apache.lucene.codecs.Codec.forName(Codec.java:113)
at org.apache.lucene.index.SegmentInfos.readCodec(SegmentInfos.java:469)
...
Как был предложен в другом месте , Я уже проверил, что на моем компьютере нет другой версии Lucene или Hibernate-Search.
Если я исключить Lucene-отсталые-кодеками зависимые пакеты из Maven-проекта, я получаю подобную ClassCastException на том же месте в Lucene-код:
java.lang.ClassCastException: class org.apache.lucene.codecs.lucene50.Lucene50PostingsFormat
at java.lang.Class.asSubclass(Class.java:3404)
at org.apache.lucene.util.SPIClassIterator.next(SPIClassIterator.java:141)
at org.apache.lucene.util.NamedSPILoader.reload(NamedSPILoader.java:65)
at org.apache.lucene.util.NamedSPILoader.<init>(NamedSPILoader.java:47)
at org.apache.lucene.util.NamedSPILoader.<init>(NamedSPILoader.java:37)
at org.apache.lucene.codecs.PostingsFormat$Holder.<clinit>(PostingsFormat.java:49)
at org.apache.lucene.codecs.PostingsFormat.forName(PostingsFormat.java:112)
at org.apache.lucene.codecs.lucene53.Lucene53Codec.<init>(Lucene53Codec.java:160)
at org.apache.lucene.codecs.lucene53.Lucene53Codec.<init>(Lucene53Codec.java:80)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
...
Я не смог найти решение этой проблемы. И я знаю, что Rallenaldo's question также активно открыт. Кто-нибудь знает, что вызывает эту проблему? Является ли это проблемой Glassfish 4.1.1?
Edit: Я хочу добавить следующее замечание в мой оригинальный пост: часть моего проекта создает отдельное приложение упакованное как самораспаковывающийся Jar-файл с идентичным Hibernate и зависимостями, связанными с Lucene, где я также используйте диспетчер сущностей с по существу той же конфигурацией для контекста сохранения. В этом случае я делаю , а не имеют вышеуказанную проблему с hibernate-search. Он запускается без каких-либо проблем, и я вижу, что он генерирует ожидаемые файлы индексов. Вот соответствующие строки из persistence.xml:
<persistence-unit name="puName" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
...
<property name="hibernate.search.default.directory_provider" value="filesystem"/>
<property name="hibernate.search.default.indexBase" value="/path/to/lucene/indexes"/>
...
</properties>
</persistence-unit>
Спасибо за информацию! :-) Это выглядит многообещающим. Однако сейчас я в отпуске. Я должен заглянуть в него снова, когда вернусь и немного поработаю. Я выложу свои выводы, как только доберусь до него. –
@kalosh, можете ли вы уточнить, я не очень разбираюсь в загрузчиках классов, я столкнулся с тем же исключением – sumanth232
@ krishna222 Просто поместите упомянутые lucene libs в/yourdomainFolder/lib – kalosh