¿Cuándo necesitamos más de un EntityManager?
-
24-09-2019 - |
Pregunta
Estoy aprendiendo JPA y tengo una pregunta:
En qué situaciones necesitamos más de una EntityManager
en nuestra aplicación?
Las dos situaciones que conozco son las siguientes:
Cuando nuestra aplicación es una aplicación múltiple y más de un hilo necesita la transacción JPA porque
EntityManager
no es seguro de hilo y necesitamos unoEntityManager
por hilo.Cuando cualquiera de los hilos necesita múltiples transacciones concurrentes, necesitamos más de una
EntityManager
en ese hilo porque hay una relación uno a uno entreEntityManager
yEntityTransaction
.
Q1. ¿Hay otras situaciones cuando necesitemos más de una EntityManager
?
Q2. Hasta donde tengo entendido, solo debería haber uno EntityManagerFactory
por unidad de persistencia. ¿Estoy en lo correcto? Si no, entonces, ¿cuáles son esas situaciones cuando necesitamos múltiples? EntityManagerFactory
por unidad de persistencia?
Solución
P1: el EntityManager
es mejor ser comparado con el "buen viejo" hibernado Session
: Una unidad de trabajo (una acción comercial simple, por ejemplo, "registrarse en un usuario", "colocar un pedido", etc.). No está necesariamente vinculado a un solo hilo. Solo se ejecutará en problemas si los diferentes hilos ejecutan tareas de DB que dependen entre sí dentro de una sola unidad de trabajo. Debería ejecutarlos en sincronización (preferiblemente, en orden en un solo hilo). Si, por ejemplo, tiene el requisito comercial de limpiar algunos "registros antiguos" cuando un usuario inicia sesión (que razonablemente no molestaría la información del otro), puede ejecutarlo perfectamente en dos hilos separados dentro de una sola unidad de trabajo.
P2: Su comprensión es correcta. Sin embargo, puede crear más de uno, pero eso no tendría ningún sentido ni tendría ningún beneficio. Solo agregaría una sobrecarga significativa.