2010-06-20 34 views
14

Título lo dice todo: ¿Cuál es la diferencia entre un UserTransaction y un EntityTransaction?Diferencia entre UserTransaction y EntityTransaction

Mi comprensión rudimentaria es que UserTransaction se utiliza cuando se requiere JTA (por ejemplo, para hacer consultas sobre Mulitple cosas), y que se utiliza cuando EntityTransaction APP sólo es necesario (por ejemplo, cuando la consulta es atómica).

¿Esa es la única diferencia entre los dos o hay más que eso?

+0

posible duplicado de [¿Cuál es la diferencia entre @Resource UserTransaction y EntityManager.getTransaction()] (http://stackoverflow.com/questions/2517062/what-is-difference-between-resource-usertransaction-and-entitymanager-gettransac) – ewernli

+1

@ewernli: Eso es un poco injusto, lo haría en ¡Sé que esa pregunta era un duplicado si ya sabía la respuesta a la pregunta! Ni la pregunta ni la respuesta hacen ninguna mención de 'EntityTransaction' - Hice la búsqueda antes de preguntar. – bguiz

+7

Entiendo completamente eso. Por eso también me tomé el tiempo de responder a tu pregunta lo mejor que pude. Es solo una práctica común en SO para indicar posibles duplicados para que las personas puedan leer las respuestas a ambas preguntas, mejora la calidad de SO. No es una crítica ni nada.La pregunta es "cerrada como duplicado exacto" solo si hay 5 votos que la marcan como tal. – ewernli

Respuesta

20

Mi comprensión rudimentaria es que se utiliza UserTransaction cuando JTA es requerida (por ejemplo, para hacer consultas sobre cosas Mulitple), y que EntityTransaction se utiliza cuando sólo se requiere JPA (por ejemplo, cuando la consulta es atómico).

Eso es básicamente correcto, pero su descripción de "cosas múltiples" y "atómica" es un poco extraña. JTA permite que el desarrollador use transacciones distribuidas para realizar cambios en múltiples recursos (base de datos, intermediario JMS, etc.) atómicamente (todo o nada). Si solo se accede a un recurso (por ejemplo, una única 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.

Considerando UserTransaction vs EntityTransaction:

  • Si APP es el uso independiente, se utiliza EntityTransaction para demarcar la transacción usted mismo.
  • Si se usa JPA dentro de un entorno administrado donde se integra con JTA, usa UserTransaction. El EntityManager se engancha en el administrador de transacciones distribuidas de JTA. La única sutileza de la que soy consciente considera el color de los cambios. Cuando se usa EntityTransaction, JPA sabe que necesita enjuagar los cambios. Si la transacción se controla usando UserTransaction, necesita registrar una devolución de llamada usando JTA registerSynchronization, de modo que los cambios se descarguen a la base de datos antes de que la transacción se complete. Si usa EJB con CMT (transacción administrada por contenedor), ni siquiera necesita usar UserTransaction: el servidor de la aplicación inicia y detiene las transacciones por usted.

preguntas relacionadas: