JPA – Resource Local transaction

JPA Resource LocalResource Local es un tipo de transaccionalidad que soporta JPA que delegar la responsabilidad de las transacciones al programador, de esta manera, el programador será el único responsable de abrir y cerrar las conexiones, realizar los Rollback y cerrar las conexiones no utilizadas.

 

En la sección pasada de este tutorial dimos una breve Introducción a Java Transaction API (JTA), otra forma de administrar las transacciones de forma automática por medio del Application Server. Resource Local es utilizado casi por completo en aplicaciones de escritorio o aplicaciones Core que corren de forma standalone y que por lo tanto no corren sobre toda la infraestructura que provee un Application Server forma. Las aplicaciones que decidan utilizar este tipo de transacciones deberá indicarlo al momento de crear el Persistence Unit del archivo persistence.xml:

<persistence-unit name="JPA_PU" transaction-type="RESOURCE_LOCAL">

Otra de las cuestiones importantes a remarcar es que la inyección de dependencias (CDI) no estará disponible en ambientes Java SE, por lo que estaremos obligados a crear manualmente elEntityManager  a través deEntityManagerFactory, para esto podemos crearlo de la siguiente manera:

EntityManagerFactory factory = Persistence.createEntityManagerFactory(“JPA_PU”);

EntityManager manager = factory.createEntityManager();

Lo primero que se debe de crear es elEntityManagerFactory, el cual se crea a partir de la clasePersistence y se le envía como parámetro el nombre del PersistenceUnit. Seguido, es creado elEntityManager a partir delEntityManagerFactory.

 

 Trabajar con Transacciones Resource Local

 

Para trabajar con Resource Local es necesario familiarizarnos con la clase EntityTransaction:

 

Mediante esta clase es posible controlar las transacciones de JPA, es obtenida a través delEntityManager con el métodogetTransaction. Esta clase una serie de métodos que nos permitirán controlar las transacciones. Los métodos son los siguientes:

  • Begin: Se utiliza para iniciar una nueva transacción. Lanza unaIllegalStateException cuando la transacción ya está activa.
  • Commit: Realiza commit a la transacción activa. LanzaIllegalStateException cuando la transacción no está activa oRollbackException cuando se genera un error al realizar el commit
  • Rollback: Realiza un Rollback de la transacción y echa atrás todos los cambios realizados durante la transacción. LanzaIllegalStateException cuando la transacción no está activa oPersistenceException ante cualquier posible error inesperado.
  • setRollbackOnly: Marca la transacción para que se realice un Rollback después de terminar la ejecución (Se aconseja usar solo en EJB).
  • GetRollbackOnly: Indica si la transacción ha sido marcada para hacer Rollback
  • isActive: Retorna true si existe una transacción activa, false de lo contrario.

 

El siguiente ejemplo ilustra cómo es que suele utilizar la clase EntityTransaction:

 

Este es un simple método que guarda un nuevo empleado. Primero que nada, se crear elEntityManager como ya lo explicamos, luego en la línea 5 se abre una nueva transacción, para después realizar el guardado, en la línea 7 se realiza el commit. En caso de que algo salga mal, entonces el error cae en el Catch y se valida que exista una transacción activa (línea 9) para después proceder con el Rollbak (línea 10).

 

Como vemos, trabajar con Resource Local puede llegar a ser un poco más complicado, pero esa es la única alternativa si estamos trabajando con aplicaciones de Escritorio.

AnteriorÍndiceSiguiente

Artículos relacionados

Entity Manager & Persistence Context Hasta el momento solo hemos trabajado con el Entity Manager para realizar las operaciones básicas, pero existen detalles más finos que es necesario en...
Mapeo de tablas con @Table En la sección hablaremos de la anotación   y su importancia a la hora de definir entidades. La anotación @Table es utilizada para indicarle a JPA cont...
JPA, Hibernate VS JDBC Los que ya han tenido la oportunidad de trabajar con algún ORM como JPA o Hibernate sabrán las bondades que tiene ya que nos permite desarrollar de un...

Oscar Blancarte

Ideológico, Innovador y emprendedor, Padre, Tecnólogo y Autor, amante de la ciencia y la tecnología en todos sus colores y sabores. Arquitecto de software & Full Stack Developer con experiencia en la industria del desarrollo de software y la consultoría. Amante de la programación y el Ajedrez.

Deja un comentario

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