¿Cuál es el mejor enfoque para obtener EntityManagerFactory en la aplicación web (jsp/servlets). es ésta una buena manera When should EntityManagerFactory instance be created/opened?, o es mejor obtenerlo de JNDI, o alguna otra cosa ...Práctica recomendada para obtener EntityManagerFactory
Respuesta
Son de peso pesado y se supone que deben estar en el ámbito de aplicación. Por lo tanto, debe abrirlos al inicio de la aplicación y cerrarlos al apagar la aplicación.
Cómo hacerlo depende de su contenedor de destino. ¿Es compatible con EJB 3.x (Glassfish, JBoss AS, etc.)? Si es así, entonces usted no necesita preocuparse de apertura/cierre de ellos (ni acerca de las transacciones) en absoluto si usted acaba de hacer el trabajo de la APP en los EJB con @PersistenceContext
la forma habitual:
@Stateless
public class FooService {
@PersistenceContext
private EntityManager em;
public Foo find(Long id) {
return em.find(Foo.class, id);
}
// ...
}
Si el contenedor de destino doesn es compatible con EJB (por ejemplo, Tomcat, Jetty, etc.) y un complemento EJB como OpenEJB tampoco es una opción por algún motivo, y usted está manipulando manualmente la creación de EntityManager
s (y transacciones), entonces su mejor apuesta es un ServletContextListener
. He aquí una básica ejemplo patada de salida:
@WebListener
public class EMF implements ServletContextListener {
private static EntityManagerFactory emf;
@Override
public void contextInitialized(ServletContextEvent event) {
emf = Persistence.createEntityManagerFactory("unitname");
}
@Override
public void contextDestroyed(ServletContextEvent event) {
emf.close();
}
public static EntityManager createEntityManager() {
if (emf == null) {
throw new IllegalStateException("Context is not initialized yet.");
}
return emf.createEntityManager();
}
}
(nota: antes de Servlet 3.0, esta clase tiene que ser registrado por <listener>
en web.xml
en lugar de @WebListener
)
que puede ser utilizado como:
EntityManager em = EMF.createEntityManager();
// ...
- 1. Práctica recomendada para usar window.onload
- 2. ¿Práctica recomendada para instalar dependencias?
- 3. Práctica recomendada para nombrar subclases
- 4. Práctica recomendada para recordarme característica
- 5. Práctica recomendada para Java IPC
- 6. Práctica recomendada con Math.Pow
- 7. Práctica recomendada para usar varios archivos .gitignore
- 8. Práctica recomendada para el cliente WCF Duplex
- 9. Práctica recomendada para una aplicación con GUI
- 10. Práctica recomendada para un proyecto de Sitecore
- 11. Práctica recomendada para rutas de PHP
- 12. Práctica recomendada para dependencias de bibliotecas estáticas
- 13. RESTO práctica recomendada para URI demasiado largos
- 14. Práctica recomendada para StateManager en Ember.js
- 15. Práctica recomendada de WPF para DataEntry Window
- 16. Práctica recomendada: actualice ArrayAdapter continuamente
- 17. Inicializando en constructores, ¿práctica recomendada?
- 18. Práctica recomendada para compilar rutas de archivos en C#
- 19. Práctica recomendada para almacenar la fecha en MySQL desde PHP
- 20. práctica recomendada para implementar MongoDB en EC2 para la producción?
- 21. Práctica recomendada para almacenar datos temporales para una aplicación web
- 22. Transformación de XML en HTML: ¿práctica recomendada?
- 23. Inyectando EntityManager vs. EntityManagerFactory
- 24. Javascript y etiquetas de anclaje, ¿práctica recomendada?
- 25. Práctica recomendada de diseño de formulario PHP
- 26. Mezcla varios archivos jQuery: ¿práctica recomendada?
- 27. Partición de tuplas en Python: ¿práctica recomendada?
- 28. Práctica recomendada: Entorno colaborativo, directorio Bin, SVN
- 29. Práctica recomendada de Java for-loop
- 30. Práctica recomendada, anulando __construct() versus método init()
Excelente ejemplo como siempre, pero solo quería agregar que cuando se utiliza el @PersistenceContext sin ningún atributo "unitName", implica (i n una forma no declarativa) uso de la unidad de persistencia única/predeterminada definida en "persistence.xml". Si hay múltiples fuentes de datos/unidades de persistencia, podría generar cierta confusión sobre cuál es esta. –
No estoy seguro de qué más falta, ¿sigo tu respuesta pero hay un error de tiempo de ejecución? > Causado por: org.springframework.beans.factory.NoSuchBeanDefinitionException: no se ha definido ningún bean único de tipo [javax.persistence.EntityManagerFactory]: single bean esperado pero se encontró 0: – huahsin68
@ huahsin68: la pregunta original no involucra a Spring en absoluto y yo tampoco hago primavera. Simplemente presiona "Preguntar". – BalusC