3
對於我們使用Seam構建的Web應用程序,有很多服務器測試用例。這些可以在多個系統上運行(Mac OS X和Linux);通常,您可以克隆存儲庫並運行測試用例,而不會出現任何問題。交易同步註冊問題
但是,測試用例不能在我們團隊中一個人的筆記本電腦上運行。他在聯想筆記本電腦上使用Fedora Core。我們會遇到以下異常時,將應用程序部署到Seam使用的單元/集成測試嵌入式的JBoss:
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
,以便在這臺特定的機器上不允許事務同步註冊?