[jboss-as7-dev] JTA Synchronization.afterCompletion callback can occur in a background thread but JPA EntityManager must be accessed in single-threaded manner...
David M. Lloyd
david.lloyd at redhat.com
Fri Feb 22 15:17:29 EST 2013
To be perfectly honest, I don't think the TM is the best place to be
tracking timeouts - the front end should always do stuff like that when
possible (imo). But that ship has sailed, as they say; I think this
proposal sounds workable, if a bit tedious to implement.
On 02/22/2013 02:11 PM, Steve Ebersole wrote:
> Thats sort of what we are planning on doing. The rub is every library
> that interacts with JTA having to do this as well. Thats more what I
> think Scott was getting at.
>
> For clarity your suggestion (method entry checks) is part of our
> solution. We will also do method exit checks. Ugh. Lot of work to
> handle something the TM is doing
>
> On Feb 22, 2013 1:53 PM, "Jason Greene" <jason.greene at redhat.com
> <mailto:jason.greene at redhat.com>> wrote:
>
> I had a discussion with Steve about this. Not sure if you guys
> talked about my suggestion.
>
> My suggestion was to simply detect if afterCompletion is running on
> the thread that created it. If the threads match proceed normally.
> If, however, they do not match then DO NOTHING (well at first):)
>
> Then have the EntityManager, immediately before certain actions such
> as a flush, detect if the Transaction has been rolled back (using
> Transaction.getStatus()). If it has been rolled back then at that
> point of time trigger an exception to the calling application code,
> with a message that the "Transaction manager has decided to revert
> the transaction, either due to a timeout or a resource failure.
> Check your log for details".
>
> On Feb 22, 2013, at 8:45 AM, Scott Marlow <smarlow at redhat.com
> <mailto:smarlow at redhat.com>> wrote:
>
> > Related jira issues are HHH-7910 + AS7-6586. HHH-7910 has been
> around a
> > bit longer and contains comments about the current plan to
> address the
> > issue in Hibernate.
> >
> > As mentioned in HHH-7910, the JTA specification allows
> > Sychronization.afterCompletion callbacks to occur in a different
> thread
> > than the application thread that is using the transaction
> (typically for
> > transaction timeout or when a transaction is propagated to a
> remote thread).
> >
> > Since the JPA EntityManager is by design, not thread safe,
> invoking the
> > EntityManager.clear() or EntityManager.close() methods from a
> background
> > thread while the application thread may be in the middle of an
> > EntityManager invocation is not the best situation (IMO).
> >
> > One improvement that we talked to the JBossTM/TS team about, is
> adding a
> > TM policy that arranges for the Synchronization.afterCompletion to
> > always run in the application thread (some of the IRC discussion is
> > attached to HHH-7910). The TM team doesn't think that they could do
> > that for both the TX timeout and tx propagating to a remote thread
> > (JBossTS) uses.
> >
> > 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.
> >
> > *Does AS have any other uses of Synchronization.afterCompletion or
> > Synchronization.beforeCompletion that expect to run in the
> application
> > thread*?
> >
> > From the JPA specification about thread unsafety:
> >
> > "
> > An entity manager must not be shared among multiple concurrently
> > executing threads, as the entity manager and persistence context
> are not
> > required to be threadsafe. Entity managers must only be accessed in a
> > single-threaded manner.
> > "
> > _______________________________________________
> > jboss-as7-dev mailing list
> > jboss-as7-dev at lists.jboss.org <mailto:jboss-as7-dev at lists.jboss.org>
> > https://lists.jboss.org/mailman/listinfo/jboss-as7-dev
>
> --
> Jason T. Greene
> JBoss AS Lead / EAP Platform Architect
> JBoss, a division of Red Hat
>
>
> _______________________________________________
> jboss-as7-dev mailing list
> jboss-as7-dev at lists.jboss.org <mailto:jboss-as7-dev at lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/jboss-as7-dev
>
>
>
> _______________________________________________
> jboss-as7-dev mailing list
> jboss-as7-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/jboss-as7-dev
>
--
- DML
More information about the jboss-as7-dev
mailing list