FAM - Tancar EntityManager
Sovint, al fer un segon desplegament d'una aplicació al WebLogic, apareixen errors del tipus classe no trobada referent a una classe de les entitats declarades a l'arxiu persistence.xml
Aquest problema es pot minimitzar tancant l'objecte estàtic que gestiona les transaccions (EntityManagerHelper
) quan es destrueix el context de l'aplicació i això succeeix normalment quan s’atura l’aplicació al WebLogic
Per aplicar aquesta solució cal seguir els següents pasos:
- Definir un Listener a l'arxiu
web.xml
:
<listener>
<listener-class>cat.diba.jee.servlet.PersistenceAppListener</listener-class>
</listener>
- El propi WebLogic cridarà a la classe definida com a Listener, que és aquesta:
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import cat.diba.jee.base.model.EntityManagerHelper;
public class PersistenceAppListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent evt) {
}
public void contextDestroyed(ServletContextEvent evt) {
EntityManagerHelper.closeEntityManagerFactory();
}
}
- Tancar la factoria que gestiona les transaccions a la classe
EntityManagerHelper
:
public static void closeEntityManagerFactory() {
if (emf != null) {
emf.close();
emf = null;
}
}