I changed TaskServiceSession implementation with the one attached.
The change is localized in the catch(Runtime re) showed in the previous post.
I've change it like this :
} catch (RuntimeException re) {
tpm.rollBackTransaction(transactionOwner);
if (transactionOwner) {
doOperationInTransaction(new TransactedOperation() {
public void doOperation() {
task.getTaskData().setStatus(Status.Error);
}
});
}
throw re;
}
Explanation:
- tpm.rollBackTransaction(transactionOwner) : this calls ut.setRollbackOnly(true) in the context of CMT transaction.
- if (transactionOwner) : updating task SGBD table cannot be done in a CMT transaction when rollback has been requested (we would need to start a new transaction for this).