listar - java jpa example
EntityManager gestionado por contenedor de aplicaciones (2)
Cuando usted dice una transacción administrada por la aplicación, significa que es su código el que debe manejar la transacción. En pocas palabras significa:
Llama:
entityManager.getTransaction().begin(); //to start a transaction
Entonces, si tienes éxito, te asegurarás de llamar.
entityManager.getTranasaction().commit(); //to commit changes to database
o en caso de fallo se asegurará de llamar a:
entityManager.getTransaction().rollBack();
Ahora imagine que tiene un contenedor, que sabe cuándo llamar a begin()
, commit()
o rollback()
, esa es una transacción administrada por contenedor. Alguien que se encarga de la transacción en su nombre.
Solo necesitas especificar eso.
Actualmente tengo un problema con la comprensión de un concepto de JPA.
Actualmente estoy usando / desarrollando una base de datos reciente de EclipseLink, Glassfish, Derby para demostrar un proyecto.
Antes de desarrollar algo en una imagen mucho más grande, tengo que estar absolutamente seguro de cómo funciona esta PersistingUnit en términos de diferentes ámbitos.
Tengo un montón de servlets 3.0 y actualmente estoy guardando las clases de entidad asociadas del usuario en el objeto request.session (todo en el mismo archivo war). Actualmente estoy usando EntityManager administrado por la aplicación usando EntityManagerFactory y UserTransaction injection. Funciona sin problemas cuando es probado por mí mismo. Las diferentes versiones de entidades ocurren cuando 2 personas acceden a las mismas entidades al mismo tiempo. Quiero trabajar con beans gestionados cruzando la misma WAR, la misma unidad de persistencia si es posible.
He leído http://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.html y un montón de explicaciones de esos ámbitos que no tienen ningún sentido para mí.
En pocas palabras , ¿cuál es el uso y la diferencia de las EntityManagers administradas por contenedores y aplicaciones?
La transacción administrada por contenedor (CMT) podría considerarse como un tipo de transacción declarativa, en cuyo caso, la administración de transacción se delega al contenedor (normalmente el contenedor EJB), y se podría simplificar mucho el trabajo de desarrollo.
Si estamos en un entorno Java EE con un contenedor EJB, podríamos usar CMT directamente.
Si estamos en un entorno Java SE, o en un entorno Java EE sin un contenedor EJB, todavía podríamos aprovechar CMT, una forma es usar Spring, que usa AOP para implementar la gestión declarativa de transacciones; Otra forma es usar Guice, que usa un PersistFilter para implementar la transacción declarativa.
En CMT, un contenedor (sea lo que sea un contenedor EJB, Spring o Guice) se encargará de la propagación de la transacción y del material de confirmación / retrotracción;
La transacción administrada por la aplicación (AMT) difiere de la CMT en que necesitamos manejar las transacciones mediante programación en nuestro código.