Details
Description
When a call to commit() in the class
"org.drools.persistence.SingleSessionCommandService.java" ( please see
[1] below ) throws a NullPointerException,
1) the commit() fails
2) the attempt to rollback() also fails
&
3) the original exception ( in this case the NullPointerException ) gets
obfuscated ( hidden )
A solution is needed to:
1) Keep the original exception so that their application code can trace it
2) Understand why the rollback() also fails when the commit() fails. Ideally when the call to "commit()" throws a NullPointerException, the rollback() should go ahead successfully.
[2]
java.lang.RuntimeException: Could not commit session or rollback
at
org.jbpm.executor.impl.AbstractAvailableJobsExecutor.handleException(AbstractAvailableJobsExecutor.java:188)
at
org.jbpm.executor.impl.AbstractAvailableJobsExecutor.executeGivenJob(AbstractAvailableJobsExecutor.java:154)
at
org.jbpm.executor.impl.AvailableJobsExecutor.executeJob(AvailableJobsExecutor.java:38)
at
org.jbpm.executor.impl.ExecutorRunnable.run(ExecutorRunnable.java:42)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at
java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: Unable to rollback transaction
at
org.kie.spring.persistence.KieSpringTransactionManager.rollback(KieSpringTransactionManager.java:90)
at
org.drools.persistence.SingleSessionCommandService.rollbackTransaction(SingleSessionCommandService.java:393)
at
org.drools.persistence.SingleSessionCommandService.rollbackTransaction(SingleSessionCommandService.java:381)
at
org.drools.persistence.SingleSessionCommandService.access$1100(SingleSessionCommandService.java:56)
at
org.drools.persistence.SingleSessionCommandService$TransactionInterceptor.execute(SingleSessionCommandService.java:592)
at
org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:41)
at
org.drools.persistence.jpa.OptimisticLockRetryInterceptor.execute(OptimisticLockRetryInterceptor.java:82)
at
org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:41)
at
org.drools.persistence.jta.TransactionLockInterceptor.execute(TransactionLockInterceptor.java:73)
at
org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:377)
at
org.drools.core.command.impl.CommandBasedStatefulKnowledgeSession.startProcessInstance(CommandBasedStatefulKnowledgeSession.java:256)
at
wachovia.cib.gfits.payments.process.core.StartOrchestrationCommand.execute(StartOrchestrationCommand.java:41)
at
org.jbpm.executor.impl.AbstractAvailableJobsExecutor.executeGivenJob(AbstractAvailableJobsExecutor.java:122)
... 9 more
Caused by:
org.springframework.transaction.IllegalTransactionStateException:
Transaction is already completed - do not call commit or rollback more
than once per transaction
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:825)
at
org.kie.spring.persistence.KieSpringTransactionManager.rollback(KieSpringTransactionManager.java:84)
... 21 more