[jboss-as7-dev] JTA Synchronization.afterCompletion callback can occur in a background thread but JPA EntityManager must be accessed in single-threaded manner...

Scott Marlow smarlow at redhat.com
Fri Feb 22 14:44:34 EST 2013


On 02/22/2013 09:45 AM, Scott Marlow wrote:
> One alternative solution, might be to create a top level container level
> queue that the background thread Synchronization.afterCompletion defers
> processing to.  As soon as the application thread returns control to the
> top level, the queue is processed in FIFO order.

One concern that I have about this alternative is that any 
synchronizations that depend on (or are depended on) being invoked in a 
particular order, would have to run with their respective groups (either 
all in the background thread or all in the application thread).

For example, if sync-1, sync-2, sync-3, sync-4 are invoked in respective 
order in the background thread and they each depend on the {1,2,3,4} 
ordering.  If sync-1 + sync-4 are put into the application thread queue 
to run from there, we would have two threads (possibly concurrently) 
running the synchronizations in the wrong order:

Background thread runs syncs in order:

sync-2, sync-3

Application thread runs syncs in order:

sync-1, synch-4

This is not horrible as long as the two groups of syncs have no 
interdependencies but would be bad if there are unknown dependencies.



More information about the jboss-as7-dev mailing list