2010-04-06 9 views
17

estoy aprendiendo APP y tienen una pregunta:¿Cuándo necesitamos más de un EntityManager?

¿En qué situaciones es necesario más de un EntityManager en nuestra aplicación?

Las dos situaciones que yo sepa son los siguientes:

  • Cuando nuestra aplicación es una aplicación multi-hilo y más de un hilo necesidades de transacciones JPA porque EntityManager no es seguro para subprocesos y necesitamos uno EntityManager por hilo.

  • Cuando cualquier de la rosca necesita múltiples transacciones simultáneas, se necesita más de una EntityManager en ese hilo porque no hay relación de uno a uno entre EntityManager y EntityTransaction.


Q1. ¿Hay alguna otra situación en la que necesitemos más de un EntityManager?

Q2. Hasta donde entiendo, solo debe haber un EntityManagerFactory por unidad de persistencia. ¿Estoy en lo correcto? Si no, ¿cuáles son esas situaciones en las que necesitamos múltiples EntityManagerFactory por unidad de persistencia?

Respuesta

11

Q1: La EntityManager es el mejor para ser comparado con los "buenos" Hibernate Session: una unidad de trabajo ("registro en un usuario de" una acción de negocio simple, por ejemplo, "hacer un pedido", etc). No está necesariamente vinculado a un solo hilo. Solo tendrá problemas si los diferentes subprocesos ejecutan tareas de DB que dependen una de otra dentro de una sola unidad de trabajo. Necesitarí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 (lo que razonablemente no interferiría la información de los demás), puede ejecutarlo perfectamente en dos subprocesos separados dentro de una sola unidad de trabajo.

Q2: Su comprensión es correcta. Sin embargo, puedes 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.

+0

Para Q1: Supongo que un objeto _Entity Manager_ debería tener una sobrecarga mínima, pero todavía estoy ansioso por preguntar cuánto sobrecarga :) Wow, que los subprocesos diff que dependen el uno del otro es más complejo. Entonces, ¿es seguro decir que deberías tener 1 EM por hilo? Luego, asegúrese de detectar cualquier excepción, ya que tiene múltiples hilos utilizando la misma tabla, ¿no? – thirdy

+0

Sí, porque EM no es seguro para subprocesos, se puede usar en varios subprocesos si creo un envoltorio a su alrededor e incluyo métodos de guardar/actualizar "sincronizados" en el reiniciador que llama internamente a guardar/actualizar EM. Además, nunca borro/cierro el EM? Creo que todavía puede haber problemas para leer y escribir simultáneamente. ¿Podrías decirme tus comentarios sobre esto? – bluelurker

Cuestiones relacionadas