Проблема регистрации синхронизации транзакций - PullRequest
3 голосов
/ 19 июля 2011

Для нашего веб-приложения, созданного с использованием Seam, есть несколько тестовых примеров сервера. Они работают на нескольких системах (Mac OS X и Linux); обычно вы можете клонировать репозиторий и запускать тестовые сценарии без проблем.

Однако тестовые случаи не выполняются на ноутбуке одного человека в нашей команде. Он использует Fedora Core на ноутбуке Lenovo. При развертывании приложения на встроенном JBoss, которое Seam использует для тестирования модулей / интеграции, мы сталкиваемся со следующим исключением:

javax.persistence.PersistenceException:
org.hibernate.TransactionException: Could not register synchronization
   at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
   at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:547)
   at org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:82)
   at org.hibernate.ejb.EntityManagerImpl.<init>(EntityManagerImpl.java:61)
   at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:39)
   at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:34)
   at org.jboss.ejb3.entity.InjectedEntityManagerFactory.createEntityManager(InjectedEntityManagerFactory.java:78)
   at org.jboss.seam.persistence.ManagedPersistenceContext.initEntityManager(ManagedPersistenceContext.java:79)
   at org.jboss.seam.persistence.ManagedPersistenceContext.getEntityManager(ManagedPersistenceContext.java:108)
   at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
   at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:144)
   at org.jboss.seam.Component.callComponentMethod(Component.java:2275)
   at org.jboss.seam.Component.unwrap(Component.java:2301)
   at org.jboss.seam.Component.getInstance(Component.java:2044)
   at org.jboss.seam.Component.getInstance(Component.java:1986)
   at org.jboss.seam.Component.getInstance(Component.java:1980)
   at org.jboss.seam.Component.getInstanceInAllNamespaces(Component.java:2375)
   at org.jboss.seam.Component.getValueToInject(Component.java:2327)
   at org.jboss.seam.Component.injectAttributes(Component.java:1739)
   at org.jboss.seam.Component.inject(Component.java:1557)
   at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:61)
   at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
   at org.jboss.seam.transaction.TransactionInterceptor$1.work(TransactionInterceptor.java:97)
   at org.jboss.seam.util.Work.workInTransaction(Work.java:61)
   at org.jboss.seam.transaction.TransactionInterceptor.aroundInvoke(TransactionInterceptor.java:91)
   at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
   at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44)
   at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
   at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
   at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:185)
   at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:103)
   at com.ambitz.everest.bootstrap.EverestBootstrap_$$_javassist_seam_9.initializeEverest(EverestBootstrap_$$_javassist_seam_9.java)
   at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
   at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:144)
   at org.jboss.seam.Component.callComponentMethod(Component.java:2275)
   at org.jboss.seam.core.Events.raiseEvent(Events.java:85)
   at org.jboss.seam.contexts.ServletLifecycle.endInitialization(ServletLifecycle.java:145)
   at org.jboss.seam.init.Initialization.init(Initialization.java:747)
   at org.jboss.seam.mock.AbstractSeamTest.startSeam(AbstractSeamTest.java:919)
   at com.ambitz.everest.test.JUnitSeamTest.startContainer(JUnitSeamTest.java:65)
   at com.ambitz.everest.test.EverestServerTestSuite.setUpBeforeClass(EverestServerTestSuite.java:47)
Caused by: org.hibernate.TransactionException: Could not register synchronization
   at org.hibernate.transaction.CMTTransaction.registerSynchronization(CMTTransaction.java:213)
   at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:470)
Caused by: java.lang.IllegalStateException: [com.arjuna.ats.internal.jta.transaction.arjunacore.syncsnotallowed] [com.arjuna.ats.internal.jta.transaction.arjunacore.syncsnotallowed] Synchronizations are not allowed!
   at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.registerSynchronizationImple(TransactionImple.java:473)
   at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.registerSynchronization(TransactionImple.java:441)
   at org.hibernate.transaction.CMTTransaction.registerSynchronization(CMTTransaction.java:210)

В тестовой среде используется HSQLDB 2.1.0.

Как я уже говорил, тестовые примеры работают на других компьютерах с Linux (также с Fedora Core). Кто-нибудь знает, что может повлиять на CMTTransaction, так что на этом конкретном компьютере регистрация синхронизации транзакций не разрешена?

1 Ответ

2 голосов
/ 20 июля 2011

Тем временем мы нашли проблему и решение: проблема заключалась в том, что arjuna не смог разрешить имя хоста машины и, следовательно, не смог создать UID для транзакций. Интересно, что эта информация регистрировалась только с серьезностью WARN, но имела влияние на синхронизацию транзакций.

Решение: мы добавили имя хоста машины в /etc/hosts для 127.0.0.1.

...