2015-06-08 1 views
2

Я запускаю контейнер tomcat 8 с двумя различными webapps, 1 prod и 1 sandbox. Все классы/libs и компиляция одинаковы с некоторыми незначительными отличиями в конфигурационных параметрах. Я использую lucene core 4.10.4 (с помощью поиска в спящем режиме). Оба запуска приложений просто прекрасны, теперь после запуска, если я использую поиск в одном приложении (скажем, prod), все работает нормально. Проблема появляется, когда я затем пытаться искать на втором приложении получать эту ошибкуОшибка связи в Tomcat, когда 2 экземпляра webapp загружают классы lucene

... Caused by: java.lang.LinkageError: loader constraint violation: when resolving method "java.lang.invoke.MethodHandle.invokeExact()Lorg/apache/lucene/util/AttributeImpl;" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, org/apache/lucene/util/AttributeFactory$1, and the class loader (instance of) for resolved class, java/lang/invoke/MethodHandle, have different Class objects for the type andle.invokeExact()Lorg/apache/lucene/util/AttributeImpl; used in the signature at org.apache.lucene.util.AttributeFactory$1.createInstance(AttributeFactory.java:140) at org.apache.lucene.util.AttributeFactory$StaticImplementationAttributeFactory.createAttributeInstance(AttributeFactory.java:103) at org.apache.lucene.util.AttributeSource.addAttribute(AttributeSource.java:222) at org.apache.lucene.analysis.standard.StandardTokenizer.(StandardTokenizer.java:182) at org.apache.lucene.analysis.standard.StandardAnalyzer.createComponents(StandardAnalyzer.java:124) at org.apache.lucene.analysis.AnalyzerWrapper.createComponents(AnalyzerWrapper.java:113) at org.apache.lucene.analysis.AnalyzerWrapper.createComponents(AnalyzerWrapper.java:113) at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:144) at org.hibernate.search.query.dsl.impl.Helper.getAllTermsFromText(Helper.java:74) at org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.getAllTermsFromText(ConnectedMultiFieldsTermQueryBuilder.java:172) at org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.createQuery(ConnectedMultiFieldsTermQueryBuilder.java:89) at org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.createQuery(ConnectedMultiFieldsTermQueryBuilder.java:64) ...

После ошибки на втором приложение, которое я могу еще искать только штраф на первый. Похоже, что проблема возникает, когда tomcat загружает необходимые классы для приложения, к которому я обратился к поиску во-вторых.

Все, что я нашел в stackoverflow и онлайн-разговорах о ошибках связи, связано с тем, что webapp загружает одни и те же классы из разных библиотек или имеет классы, скомпилированные с различными версиями Java. Но в этом случае это два разных приложения, которые являются причудливыми, и они оба работают до тех пор, пока вы не будете использовать поиск по 2-му ап, после того, как он использовал его в первом приложении после чистого запуска tomcat. Самая близкая проблема, которую я мог найти, - this for a project named clarity.

Я всю ночь бил головой о стену и не мог понять, что это может быть и где еще искать.

ответ

2

Сделав еще несколько отладок в свете дня, я решил обновить jdk, чтобы быть на 100% уверенным в openjdk 1.7u79 (от 1.7_05). Это, похоже, решило проблему. Lucene говорит, что использует хотя бы обновление 55, так как есть некоторые ошибки JVM ниже (я использовал более раннюю версию lucene до недавнего времени). Я не автоматически перескакивал, пытаясь это из-за странного случая, когда второе приложение вызывало ошибку.

+0

Спасибо, человек тонны !!! Если бы я мог дать вам больше бонусов. У меня был критический результат и был застрял в этой проблеме ... !! –

+0

Без проблем, рад, что это спасло кому-то боль в голове – nightsRey

Смежные вопросы