java-ee ejb jta container-managed

java ee - ¿Cuándo se compromete @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)?



java-ee ejb (2)

Un método EJB llamado Aby llama a otro método EJB llamado Bob

Bob está marcado con @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

¿Cuándo se compromete la transacción bob ?:

a) cuando finaliza la invocación de bob

b) cuando termina la invocación aby

c) otro. cuando?


Creo que A tiene razón. Cuando se llama al método Bob, crea una nueva transacción para él y el método Aby se suspende hasta que se confirma la transacción Bob.

También tenga en cuenta que tiene que ser el método de algún otro bean para que sea transaccional, los métodos llamados desde el mismo bean no actúan como métodos comerciales.

Vea este gran article para una explicación más detallada.


En realidad, creo que la alternativa a es correcta. Ver:

EJB 3.0 - Transacción anidada! = Requiere nuevo?

También investigué un poco y busqué en los registros de db (Hyper Sonic) para ver realmente cuándo se cometió en el archivo db y se confirma cuando finaliza el método REQUIRES_NEW. Pero dado que depende del contenedor manejar las transacciones, tal vez podría cambiar según el contenedor. He usado JBoss al depurar esto. E Hibernate (vale la pena mencionarlo ya que lo he probado comprobando los registros de db). Supongo que la escritura de una base de datos está involucrada ya que usted pregunta sobre las transacciones.

Mis pensamientos difieren de la respuesta anterior, por lo que sería divertido ser persuadido.