type transaction transacciones que manager example anotaciones java jpa transactions java-ee jta

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 . El EntityManager enlaza con el administrador de transacciones distribuidas de JTA. La única sutileza que conozco considera el rubor de los cambios. Cuando se usa EntityTransaction , JPA sabe que necesita limpiar los cambios. Si la transacción se controla mediante UserTransaction , debe registrar una devolución de llamada mediante JTA registerSynchronization , 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 usar UserTransaction : el servidor de aplicaciones inicia y detiene las transacciones por usted.

Preguntas relacionadas: