2010-10-15 57 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