Intercepte la transacción solo cuando sea seguro que se confirmará pero antes

El contexto es Java: JPA con Hibernate y Spring.

Tomemos el escenario del protocolo de confirmación de dos fases (pero solo con un recurso):

Consulta para confirmar desde la aplicación

Vote Sí / No (de la base de datos en nuestro caso)

3.1. En caso afirmativo de la base de datos

3.1.1. (Hacer devolución de llamada en código) - no forma parte del protocolo

3.1.2. Comprometerse con la base de datos

3.2 Si no

3.2.1 Volver a la base de datos

Lo que quiero es una forma de hacer la devolución de llamada desde 3.1.1 en código, pero solo cuando se sabe que la transacción se confirmará, pero antes se confirma realmente. Además, si se lanza una excepción aquí, la transacción debe revertirse.

UtilizandoTransactionSynchronization (*) de Spring, le permite interceptar una transacción antes de que se confirme / complete o después de que se haya confirmado / completado.

beforeCommit() la devolución de llamada dice que aún puede ocurrir una reversión después de llamar al método;beforeComplete() se llama incluso si la transacción fallaafterCommit/Complete() se llama después de que la transacción se haya confirmado en la base de datos y no hay forma de deshacerla.

Ahora que lo veo, parece que lo que quiero es otro en un protocolo de confirmación completo de dos fases; pero me pregunto si hay una solución en Spring. La diferencia es que la llamada realizada en la devolución de llamada no se puede revertir.

(*) de Spring 4.2 es muy simple con@TransactionalEventListener yTransactionPhase que muy bien resumeTransactionSynchronization

Respuestas a la pregunta(2)

Su respuesta a la pregunta