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 uno EntityManager 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 entre EntityManager y EntityTransaction.


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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top