Unidad de persistencia como RECURSO LOCAL o JTA?


Tengo consultas de la siguiente manera:

  1. ¿Cuál es la diferencia de estos dos?
  2. ¿Son ambas compatibles con todas las bases de datos?
  3. ¿JPA TransactionManager y JTA TransactionManager son diferentes?
Author: informatik01, 2009-12-26

3 answers

Las implementaciones de JPA tienen la opción de administrar las transacciones por sí mismas (RESOURCE_LOCAL), o que sean administradas por la implementación de JTA del servidor de aplicaciones.

En la mayoría de los casos, RESOURCE_LOCAL está bien. Esto usaría transacciones básicas de nivel JDBC. El inconveniente es que la transacción es local a la unidad de persistencia de JPA, por lo que si desea una transacción que abarque varias unidades de persistencia (u otras bases de datos), entonces RESOURCE_LOCAL puede no ser lo suficientemente bueno.

JTA también se utiliza para administrar transacciones en sistemas como JMS y JCA, pero eso es un uso bastante exótico para la mayoría de nosotros.

Para usar JTA, necesita soporte en su servidor de aplicaciones, y también soporte del controlador JDBC.

 87
Author: skaffman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-26 09:47:52

Como adición a otras respuestas

Aquí hay un extracto del artículo extremadamente útil (publicado en el sitio web Apache TomEE), que también puede ayudar a responder a la primera pregunta del OP (el enlace al artículo está a continuación).


Comparando la persistencia RESOURCE_LOCAL y JTA contexts


Con USTED es responsable de EntityManager (PersistenceContext/Cache) creación y seguimiento...

  • Usted debe utilizar el EntityManagerFactory para obtener un EntityManager
  • La instancia resultante EntityManager es un PersistenceContext / Cache
  • An EntityManagerFactory se puede inyectar a través del @PersistenceUnit solo anotación (no @PersistenceContext)
  • No se le permite utilice @PersistenceContext para refiérase a una unidad de tipo RESOURCE_LOCAL
  • Usted debe utilizar el EntityTransaction API para comenzar / confirmar cada llamada a tu EntityManger
  • Llamando EntityManagerFactory.createEntityManager () dos veces dos instancias independientes de EntityManager y para ello dos separados PersistenceContexts/Cachés.
  • It es casi nunca una buena idea tener más de uno instancia de un EntityManager en usar (no crear un segundo a menos que hayas destruido el primero)


Con el CONTAINER hará EntityManager (PersistenceContext/Cache) creación y seguimiento...

  • Usted no puede utilizar el EntityManagerFactory para obtener un EntityManager
  • Solo puede obtener un EntityManager proporcionado por el contenedor
  • An EntityManager se puede inyectar a través de @PersistenceContext solo anotación (no @ PersistenceUnit)
  • Tú eres no se permite utilizar @PersistenceUnit para referirse a un unidad de tipo JTA
  • El EntityManager dado por el contenedor es una referencia al PersistenceContext / Cache asociado con una transacción JTA.
  • Si no hay ninguna transacción JTA en progreso, el EntityManager no se puede usar porque no hay PersistenceContext / Cache.
  • Todos con un EntityManager referencia a la misma unidad en el mismo transaction tendrá automáticamente una referencia a la same PersistenceContext / Cache
  • Las PersistenceContext / Cache is flushed and cleared at JTA commit time

Cualquier persona interesada en aprender la Java Persistence API-por favor hágase un favor y lea el artículo completo aquí: JPA Conceptos: JPA 101.

 63
Author: informatik01,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-16 10:46:31

Resource_Local y JTA son gestores de transacciones (métodos para realizar transacciones). Esta no es la propiedad de database sino el componente responsable de coordinar las transacciones. Los administradores de transacciones de JPA y JTA son diferentes. JPA transaction manager es responsable de las transacciones de JPA y desea usar una si solo está haciendo una transacción de JPA. JTA transaction manager es un administrador de transacciones de propósito general y puede enlistar otros recursos como colas de JMS en la transacción. Normalmente Los contenedores Java EE emplean un gestor de transacciones JTA para EJBs, entidades JPA, etc.

 16
Author: Chandra Patni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-26 03:25:47