Skip to main content

[jsr338-experts] transaction-scoped persistence context being closed at JTA transaction completion time from non-application thread ...

  • From: Scott Marlow <smarlow@...>
  • To: jsr338-experts@...
  • Subject: [jsr338-experts] transaction-scoped persistence context being closed at JTA transaction completion time from non-application thread ...
  • Date: Wed, 06 Mar 2013 17:16:18 -0500

[1] requires that at Transaction completion, the container closes (or returns to cache), the transaction-scoped persistence context. What is supposed to happen when the JTA transaction completes in a different thread than the application thread? For example, if a background thread calls the Synchronization.afterCompletion() because the tx timeout period has been exceeded (as some Transaction Managers may do), its not exactly thread-safe to call EntityManager.close() (see [2]). Specifically, the application could be in the middle of a persist or some other EntityManager method, when EntityManager.close() is called.

Related to the above, if a JTA transaction rollback occurs in a background thread [3], how are the managed entities expected to be detached without violating the EntityManager thread-safety [2]?

There may be vendor specific solutions but shouldn't we (JPA spec eg) account for the interaction of thread-unsafe persistence contexts and the JTA Synchronization.afterCompletion that may be invoked in non-application (background) threads?

Scott

[1] 7.9.1 Container Responsibilities - After the JTA transaction has completed (either by transaction commit or rollback), the container closes the entity manager calling EntityManager.close.

[2] 7.2 Obtaining an EntityManager - 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.

[3] 7.9.2 Provider Responsibilities - When the JTA transaction rolls back, the provider must detach all managed entities if the persistence context is of type SynchronizationType.SYNCHRONIZED or has otherwise been joined to the transaction.


[jsr338-experts] transaction-scoped persistence context being closed at JTA transaction completion time from non-application thread ...

Scott Marlow 03/06/2013

[jsr338-experts] Re: transaction-scoped persistence context being closed at JTA transaction completion time from non-application thread ...

Linda DeMichiel 03/07/2013

[jsr338-experts] Re: transaction-scoped persistence context being closed at JTA transaction completion time from non-application thread ...

Scott Marlow 03/08/2013

[jsr338-experts] Re: transaction-scoped persistence context being closed at JTA transaction completion time from non-application thread ...

Linda DeMichiel 03/09/2013

[jsr338-experts] Re: transaction-scoped persistence context being closed at JTA transaction completion time from non-application thread ...

Scott Marlow 03/11/2013

[jsr338-experts] Re: transaction-scoped persistence context being closed at JTA transaction completion time from non-application thread ...

Scott Marlow 03/13/2013

[jsr338-experts] Re: transaction-scoped persistence context being closed at JTA transaction completion time from non-application thread ...

Linda DeMichiel 03/13/2013

[jsr338-experts] Re: transaction-scoped persistence context being closed at JTA transaction completion time from non-application thread ...

Scott Marlow 03/13/2013

[jsr338-experts] Re: transaction-scoped persistence context being closed at JTA transaction completion time from non-application thread ...

Ireland, Evan 03/13/2013

[jsr338-experts] Re: transaction-scoped persistence context being closed at JTA transaction completion time from non-application thread ...

Linda DeMichiel 03/14/2013

[jsr338-experts] Re: transaction-scoped persistence context being closed at JTA transaction completion time from non-application thread ...

Ireland, Evan 03/14/2013
 
 
Close
loading
Please Confirm
Close