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 el EntityManager聽 a trav茅s de EntityManagerFactory, 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 el EntityManagerFactory, el cual se crea a partir de la clase Persistence y se le env铆a como par谩metro el nombre del PersistenceUnit. Seguido, es creado el EntityManager a partir del EntityManagerFactory.

 

聽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 del EntityManager con el m茅todo getTransaction. 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 una IllegalStateException cuando la transacci贸n ya est谩 activa.
  • Commit: Realiza commit a la transacci贸n activa. Lanza IllegalStateException cuando la transacci贸n no est谩 activa o RollbackException 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. Lanza IllegalStateException cuando la transacci贸n no est谩 activa o PersistenceException 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 el EntityManager 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

Web Services con Java (JAX-WS) Los Web Services cada vez son m谩s indispensable a la hora de construir aplicaciones, debido a que ya casi cualquier aplicaci贸n empresarial, requiere i...
Definir llave primar铆a con @Id Al igual que en las tablas, las entidades tambi茅n requieren un identificador(聽), dicho identificador deber谩 de diferenciar a la entidad del resto. Com...
MongoDB Atlas 鈥 Database as a Service Hasta hace poco, tener una base de datos 100% funcional y perfectamente administrada, era casi imposible o todo un reto, pues se requiere personal alt...

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 *