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;
        }
    }

 

1
Etiquetes:
FAM
1
Grups de treball:
Plataforma JEE