我正在将我们的应用程序中的实体bean从EJB 2.0升级到3.0版本。我在weblogic服务器(10.3.0)上使用openjpa 1.2.2版,交易类型为JTA。javax.transaction.SystemException:非法状态(预期:预先准备)。 BEA1-0A15322BC6A35D331713
我对着下面的错误,同时提交事务后坚持实体:
javax.transaction.SystemException: Illegal state (Expected: PrePrepared). BEA1-0A15322BC6A35D331713 at weblogic.transaction.internal.TransactionImpl.abortUnsync(TransactionImpl.java:1134) at weblogic.transaction.internal.ServerTransactionImpl.globalPrepare(ServerTransactionImpl.java:2172) at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:270) at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:230) at weblogic.transaction.internal.TransactionManagerImpl.commit(TransactionManagerImpl.java:283) at weblogic.transaction.internal.TransactionManagerImpl.commit(TransactionManagerImpl.java:277) at com.bt.cp.entities.EntityBeansMultiThreadTest$Loader.call(EntityBeansMultiThreadTest.java:104) at com.bt.cp.entities.EntityBeansMultiThreadTest$Loader.call(EntityBeansMultiThreadTest.java:78) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java.lang.Thread.run(Thread.java:619)
下面的代码片段导致这个错误:
public Boolean call() throws Exception {
EntityManager entityManager = entityManagerSingleton.createEntityManager();
UserTransaction tx = entityManagerSingleton.createTransaction();
try {
tx.begin();
// Join the EntityManager operations to this UserTransaction
entityManager.joinTransaction();
entityManager.persist(new Party());
tx.commit();
} catch(Exception e) {
e.printStackTrace()
}
return true;
}
下面是我的persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="testDataSource" transaction-type="JTA">
<jta-data-source>testDataSource</jta-data-source>
<class>test.Party</class>
<class>
.........................
</class>
<properties>
<property name="openjpa.QueryCache" value="true(CacheSize=1000)"/>
</properties>
</persistence-unit>
</persistence>
没有见过OpenJPA的1.1.0版本(网络的一部分,此错误逻辑10.3.0)。但是,版本1.1.0(https://issues.apache.org/jira/browse/OPENJPA-466)存在一个主要错误,因此我使用的是版本1.2.2。
如何解决此问题?任何人都有这方面的指点。任何帮助表示赞赏。
感谢您的答复:)我提到的错误是用1.1.0版本,因此我使用1.2.2这给了我提到的错误(请参阅我的编辑) 。我也同意这是与weblogic/JTA交易问题有关的事情,但是我试图找出造成这个问题的原因。我还证实,这不是多线程问题,因为在单线程环境中发生相同的错误。 – Niru