With a proposed TM level listener, we will have an SPI for notification of when application threads associated with a JTA transaction, become disassociated with the transaction (tm.commit/rollback/suspend time). Having this knowledge in a synchronization callback, can determine whether the persistence context should be cleared directly from the Synchronization.afterCompletion(int) call or should be deferred until the transaction is disassociated from the JTA transaction.
This idea is based on a TM level listener approach that Tom Jenkinson [1] suggested. Mike Musgrove has a "proof of concept" implementation of the suggested changes [2]. I did some testing with [3] to see if the improvement helps with clearing entities that might still be in the persistence context after a background tx timeout. I'm wondering if in the Hibernate ORM Synchronization.afterCompletion(int status) implementation, in case of tx rollback, if we could defer the clearing of the Hibernate session to be handled by the JtaPlatform. This could be setup at EntityManager.joinTransaction() time (if a new property like "hibernate.transaction.defer_clear_session" is true). Perhaps via a JtaPlatform.joinTransaction(EntityManager) registration call? Thoughts? Scott [1] https://developer.jboss.org/thread/252572?start=45&tstart=0 [2] https://github.com/mmusgrov/jboss-transaction-spi/blob/threadDisassociationListener/src/main/java/org/jboss/tm/ [3] https://github.com/scottmarlow/wildfly/tree/transactiontimeout_clientut_noejb_wildfly9_march5_2015 _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev