2011-07-19 61 views
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,以便在這臺特定的機器上不允許事務同步註冊?

回答

2

在此期間,我們發現問題和解決方案:問題是arjuna無法解析機器的主機名,因此無法爲事務創建UID。有趣的是,這個信息只記錄了WARN的嚴重性,但對事務同步有影響。

解決方案:我們將機器的主機名添加到/etc/hosts,127.0.0.1