Pregunta

I tiene un EntityManagerFactory para los que puedo crear uno (o varios) casos EntityManager. Estoy usando un entorno de servlet, y tengo una EntityManagerFactory cableado hasta el servlet (a través del contexto de servlet) que es compartida por toda la vida del servlet (y por lo tanto, para todos los usuarios).

Me puede hacer una de las siguientes:

  • Crear un único EntityManager durante toda la vida de mi servlet (por ejemplo, compartida entre todos los usuarios)
  • Crea uno por usuario (por lo que cada usuario tiene su propia en el HttpSession)
  • Crear una por petición HTTP (por ejemplo, creando una instancia de una nueva y cerrándola al final de un método doGet)

¿Cuál es el más apropiado? Es el costo de crear un EntityManager significativa? Si hago una única compartida EntityManager, ¿existe un ámbito sola transacción (es decir, cambios entre usuarios independientes podrían cometer otros cambios)?

¿Fue útil?

Solución

Uno de EM para todo el servlet no hace buen sonido. Si usted no está usando gestionada por contenedor de EM (por ejemplo EJB3) entonces el recommentation es utilizar un EM para un particular, unidad de trabajo .

En un contexto de aplicaciones web a su tercera sugerencia (uno por cada solicitud HTTP) suena bien. Sin embargo, esto se puede llevar por una trampa en la que está atando su capa de servicios con su capa de db (la capa de servicio no debería ni siquiera ser consciente de la existencia de una EM).

Otro enfoque sería transacciones programáticamente DeMark en su DAO y obtener su DAO para utilizar un nuevo EM para cada llamada de método.

Editar: EMS son baratos para crear en contraposición a los campos electromagnéticos que tienen un importante de arriba. Utilizando uno EMF (que parece que lo haces) y un montón de EMS es el camino a seguir.

Otros consejos

hacemos uno inyecta gestor de la entidad para cada slsb , - y la slsb es en sí misma accede a través de un delegado, de los cuales hay uno por sesión, que busca la interfaz local / remoto. Usando EJB3.0.

Sí, estoy de acuerdo con NimChimpsky y qwerky utilizar EJB3.x cuando el acceso a DB y utilizar uno EM por unidad de trabajo.

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