Add callbacks for thread-to-transaction association changes
-----------------------------------------------------------
Key: JBTM-2342
URL:
https://issues.jboss.org/browse/JBTM-2342
Project: JBoss Transaction Manager
Issue Type: Feature Request
Components: Application Server Integration
Affects Versions: 5.0.4
Reporter: Michael Musgrove
Assignee: Michael Musgrove
Fix For: 5.1.0
This feature calls for a mechanism to avoid issues around concurrent access to a JPA EM
if a transaction times out. Currently EM cleanup happens in AC callbacks - if those
callbacks happen on the application thread there is no issue but if they happen on the
reaper thread then it is possible for the EM to be manipulated whilst the application is
still using it.
The linked forum thread came up with 4 proposals to handle the problem:
# Reaper marks transaction as set rollback only: this solution has potentially
insurmountable issues (eg JVM1 -> JVM2, JVM1 crashes, txn never gets commit/rollback
called on it). In addition it would need to be configurable - some users want the reaper
to do the timely rollback;
# WildFly wraps the TM/TSR and coordinates the running of all Synchronization callbacks.
This solution is complex and does the AS have sufficient knowledge to coordinate callbacks
correctly. Option 4 below is similar but the decision about what to do and when to do it
is left in the hands of the relevant callbacks where the knowlege resides;
# Start a discussion on the JPA expert group to get certain thread unsafe Synchronization
JPA callbacks used by EE container/Persistence providers changed. This is an option for
the future;
# Trigger callbacks when the transaction is disassociated from a thread. For example,
detaching any loaded entities and closing the EM can be done when all relevant callbacks,
namely the afterCompletion callback (triggered on the reaper thread) and the txn
disassociated callback (triggered on the application thread) have been seen.
This JIRA will implement option 4.