2010-10-15 56 views
2

我正在在執行。我現在用它來了解project.Project的一部分unti測試用例(JUNIT)以下錯誤是基於project.Project網絡使用OpenJPA的問題與使用JPA

<openjpa-1.2.1-SNAPSHOT-r422266:686069 fatal store error> org.apache.openjpa.persistence.RollbackException: Unable to obtain a TransactionManager using null. 
    at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:523) 
    at com.XYZ.cloud.admin.loadCatalog.LoadCatalogTest.populateOffering(LoadCatalogTest.java:253) 
    at com.XYZ.cloud.admin.loadCatalog.LoadCatalogTest.CatalogUploadTest(LoadCatalogTest.java:160) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
    at java.lang.reflect.Method.invoke(Method.java:599) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:44) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41) 
    at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:220) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) 
Caused by: <openjpa-1.2.1-SNAPSHOT-r422266:686069 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: Unable to obtain a TransactionManager using null. 
    at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4231) 
    at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4196) 
    at org.apache.openjpa.jdbc.sql.DB2Dictionary.newStoreException(DB2Dictionary.java:503) 
    at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102) 
    at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88) 
    at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64) 
    at org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.next(AbstractJDBCSeq.java:65) 
    at org.apache.openjpa.util.ImplHelper.generateValue(ImplHelper.java:160) 
    at org.apache.openjpa.util.ImplHelper.generateFieldValue(ImplHelper.java:144) 
    at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignField(JDBCStoreManager.java:698) 
    at org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:487) 
    at org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:463) 
    at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignObjectId(JDBCStoreManager.java:682) 
    at org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:134) 
    at org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:519) 
    at org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:2823) 
    at org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:39) 
    at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:959) 
    at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1948) 
    at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1908) 
    at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1826) 
    at org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81) 
    at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1350) 
    at org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:877) 
    at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:512) 
    ... 26 more 
Caused by: java.sql.SQLException: Unable to obtain a TransactionManager using null. 
    at org.apache.openjpa.jdbc.kernel.TableJDBCSeq.allocateSequence(TableJDBCSeq.java:419) 
    at org.apache.openjpa.jdbc.kernel.TableJDBCSeq.nextInternal(TableJDBCSeq.java:290) 
    at org.apache.openjpa.jdbc.kernel.AbstractJDBCSeq.next(AbstractJDBCSeq.java:60) 
    ... 44 more 
Caused by: javax.transaction.NotSupportedException: Unable to obtain a TransactionManager using null. 
    at org.apache.openjpa.ee.AutomaticManagedRuntime.doNonTransactionalWork(AutomaticManagedRuntime.java:306) 
    at org.apache.openjpa.jdbc.kernel.TableJDBCSeq.allocateSequence(TableJDBCSeq.java:415) 
    ... 46 more 
Caused by: <openjpa-1.2.1-SNAPSHOT-r422266:686069 fatal user error> org.apache.openjpa.util.InvalidStateException: Could not perform automatic lookup of EJB container's javax.transaction.TransactionManager implementation. Please ensure that you are running the application from within an EJB 1.1 compliant EJB container, and then set the org.apache.openjpa.ManagedRuntime property to 
    at org.apache.openjpa.ee.AutomaticManagedRuntime.getTransactionManager(AutomaticManagedRuntime.java:250) 
    at org.apache.openjpa.ee.AutomaticManagedRuntime.doNonTransactionalWork(AutomaticManagedRuntime.java:304) 
    ... 47 more 
Caused by: javax.naming.ConfigurationException: Name space accessor for the java: name space has not been set. Possible cause is that the user is specifying a java: URL name in a JNDI Context method call but is not running in a J2EE client or server environment. 
    at com.XYZ.ws.naming.java.javaURLContextFactory.isNameSpaceAccessable(javaURLContextFactory.java:93) 
    at com.XYZ.ws.naming.urlbase.UrlContextFactory.getObjectInstance(UrlContextFactory.java:82) 
    at javax.naming.spi.NamingManager.getURLContext(NamingManager.java:655) 
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:434) 
    at javax.naming.InitialContext.lookup(InitialContext.java:450) 
    at org.apache.openjpa.ee.RegistryManagedRuntime.getTransactionManager(RegistryManagedRuntime.java:61) 
    at org.apache.openjpa.ee.AutomaticManagedRuntime.getTransactionManager(AutomaticManagedRuntime.java:154) 
    ... 48 more 
+0

你是否開始交易? EntityManager.getTransaction()。begin() – Dewfy 2010-10-15 08:26:22

回答

2

我的猜測是,您正嘗試在單元測試上下文(即在Java SE上下文中)中使用聲明jta-data-sourcepersistence.xml

換句話說,你不使用適當的persistence.xml的測試環境。您需要使用RESOURCE_LOCAL事務類型的特定persistence.xml,並將其配置爲使用內置連接池(而不是數據源)。

顯示你persistence.xml如果你需要更多的指導。

+0

謝謝:我評論出jta和它的工作 – akp 2010-10-15 12:54:28

+0

但我有一個問題,我使用2個單獨的數據庫,所以我必須使用JTA來處理分佈式數據庫。所以我可以使用JTA測試我的代碼嗎? – akp 2010-10-15 12:56:05

+0

@akp這是一個不同的問題,我不打算在評論框中加以說明。用所需的細節打開另一個問題。 – 2010-10-15 12:59:07

1

就像錯誤消息所示:您需要確保您在符合EJB 1.1的EJB容器內運行應用程序。

+0

感謝您的回覆:但我想單元測試這個項目的唯一部分,我該怎麼做? – akp 2010-10-15 08:28:28

+0

我調試的代碼,並發現,當tx.commit()是called.I已粘貼適當的異常now.Can你普萊舍suggent我一些辦法讓我可以運行項目的只有這部分拋出一個異常? – akp 2010-10-15 08:30:17

+0

考慮使用模擬框架,而不是連接到真正的DB或嘗試DBUnit的 – 2010-10-15 08:30:28