blogJava Enterprise Edition JEELenguajes de ProgramaciónPlataforma JAVA

Tipos de transacciones JPA y JTA

[smartads]

En el archivo de configuración de JPA persistence.xml se especifica el tipo de transacción(transaction-type) para cada unidad de persistencia.

<persistence ... >
<persistence-unit name="..." transaction-type="RESOURCE_LOCAL">
...
</persistence-unit>
...
</persistence>

Hay dos posibles valores: RESOURCE_LOCAL y JTA.

Resource Local

  • Usado para aplicaciones standalone.
  • Es el responsable de la creación del EntityManager mediante EntityManagerFactory
  • Las transacciones son de tipo EntityTransaction
  • Se debe usar begin() y commit() en cada transacción
  • Si múltiples instancias de EntityManager son creadas para la misma unidad de persistencia, múltiples contextos de persistencia son creados también. Esto quiere decir que las transacciones NO están sincronizadas en toda la aplicación. Una solución a esto es usar UserTransaction. Otra es evitar el uso de múltiples EntityManager para la misma unidad de persistencia.

Uso


// Creating resources
EntityManagerFactory EMF
= Persistence.createEntityManagerFactory("Standalone");
EntityManager EM = EMF.createEntityManager();
 
// Transaction
EntityTransaction et = EM.getTransaction();
 
try {
et.begin();
// Operations...
et.commit();
} catch(Exception ex) {
et.rollback();
}
 
// Closing resources
EM.close();
EMF.close();

 

JTA

  • JTA  significa Java Transaction API. Es parte de la especificación Java EE.
  • Es el típico valor usado para el contenedor de la aplicación
  • El EntityManager es provisto por el contenedor de la aplicación(una única instancia para toda la aplicación)
  • Las transacciones se pueden declara con @TransactionAttribute y estas serán gestionadas automáticamente.
  • Todas las transacciones están sincronizadas en toda la aplicación con una única transacción JTA.

Uso:


@PersistenceContext(unitName="Container")
private EntityManager EM;
 
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void myMethod() throws Exception {
 
Item i = EM.find(Item.class, 997);
 
// ...
 
}

Mas acerca de transacciones JPA/JTA aquí

Fuente:  mytechnotes.biz

buhoos

Buhoos.com está conformado por profesionales especializados, dispuestos a impartir su experiencia con el propósito de complementar y generar nuevo conocimiento que demanden los futuros profesionales para una mejor integración en el ámbito laboral, además solventar los requerimientos que surjan en implantaciones de nuevos proyectos tecnológicos a nivel empresarial.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.