Hibernate ENVERS Проблема загрузки классов - PullRequest
1 голос
/ 23 августа 2011

Я пытаюсь интегрировать Hibernate Envers в уже разработанное приложение.

Я отправляю JAR-файл Hibernate Envers внутри пакета EAR, и это вызывает уродливое исключение в отношении загрузчика классов и какого-либо конфликта.

Если я не буду отправлять JAR-файл Envers внутри EAR и помещу его в каталог lib на JBoss, то все будет нормально работать , но мне нужно отправить библиотеку вместе с приложением, так как У меня нет доступа к этому глобальному каталогу "lib".

Я развертываю на JBoss 5.1.0.GA, использую Hibernate 3.3.GA и Envers 1.2.2.GA.

Любая подсказка?

Исключением является следующее:

15:31:21,621 WARN  [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator_2] TwoPhaseCoordinator.beforeC
ompletion - failed for com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple@84697f
java.lang.LinkageError: loader constraint violation: when resolving interface method "org.hibernate.Transaction.register
Synchronization(Ljavax/transaction/Synchronization;)V" the class loader (instance of org/jboss/classloader/spi/base/Base
ClassLoader) of the current class, org/hibernate/envers/synchronization/AuditSyncManager, and the class loader (instance
 of org/jboss/classloader/spi/base/BaseClassLoader) for resolved class, org/hibernate/Transaction, have different Class
objects for the type javax/transaction/Synchronization used in the signature
        at org.hibernate.envers.synchronization.AuditSyncManager.get(AuditSyncManager.java:56)
        at org.hibernate.envers.event.AuditEventListener.onPostUpdate(AuditEventListener.java:163)
        at org.hibernate.action.EntityUpdateAction.postUpdate(EntityUpdateAction.java:200)
        at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:179)
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:32
1)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
        at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:504)
        at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.j
ava:101)
        at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:269)
        at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:89)
        at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:177)
        at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.ja
va:1423)
        at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:137)
        at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75)
        at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:170)
        at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)
        at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:190)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)

1 Ответ

1 голос
/ 23 августа 2011

Это похоже на классическую проблему наследования Java при работе с несколькими загрузчиками классов. Вы пытались добавить jboss-classloading.xml в каталог EAR META-INF / lib?

<classloading xmlns="urn:jboss:classloading:1.0"
              parent-first="false"
              domain="DefaultDomain"
              top-level-classloader="true"
              parent-domain="Ignored"
              export-all="NON_EMPTY"
              import-all="true">
</classloading>

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

Это также хороший ресурс http://phytodata.wordpress.com/2010/10/21/demystifying-the-jboss5-jboss-classloading-xml-file/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...