Я обновляю объекты в нашем приложении с версии EJB 2.0 до 3.0. Я использую openjpa версии 1.2.2 на веб-сервере (10.3.0), и тип транзакции будет 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