java - transacciones - Diferencia entre UserTransaction y EntityTransaction
transacciones jpa (1)
El título lo dice todo: ¿Cuál es la diferencia entre un UserTransaction
y un EntityTransaction
?
Mi entendimiento rudimentario es que UserTransaction
se usa cuando se requiere JTA (por ejemplo, para hacer consultas en varias cosas), y que EntityTransaction
se usa cuando solo se requiere JPA (por ejemplo, cuando la consulta es atómica).
¿Es esa la única diferencia entre los dos o hay más que eso?
Mi entendimiento rudimentario es que UserTransaction se usa cuando se requiere JTA (por ejemplo, para hacer consultas en varias cosas), y que EntityTransaction se usa cuando solo se requiere JPA (por ejemplo, cuando la consulta es atómica).
Eso es básicamente correcto, pero su descripción de "varias cosas" y "atómica" es un poco extraña. JTA le permite al desarrollador utilizar transacciones distribuidas para realizar cambios en múltiples recursos (base de datos, agente JMS, etc.) de forma atómica (todo o nada). Si solo se accede a un recurso (por ejemplo, una sola base de datos), no necesita JTA, pero la transacción sigue siendo atómica (todo o nada). Ese es, por ejemplo, el caso cuando utiliza una transacción JDBC normal en una base de datos.
Teniendo en cuenta UserTransaction
vs. EntityTransaction
:
- Si JPA es un uso independiente, usted usa
EntityTransaction
para demarcar la transacción usted mismo. - Si JPA se usa dentro de un entorno administrado donde se integra con JTA, usted usa
UserTransaction
. ElEntityManager
enlaza con el administrador de transacciones distribuidas de JTA. La única sutileza que conozco considera el rubor de los cambios. Cuando se usaEntityTransaction
, JPA sabe que necesita limpiar los cambios. Si la transacción se controla medianteUserTransaction
, debe registrar una devolución de llamada mediante JTAregisterSynchronization
, para que los cambios se descarguen en la base de datos antes de que se complete la transacción. Si usa EJB con CMT (transacción administrada por contenedor), ni siquiera necesita usarUserTransaction
: el servidor de aplicaciones inicia y detiene las transacciones por usted.
Preguntas relacionadas: