Я решил эту проблему, создав в своем веб-приложении ContextListener, вызвав закрытие фабрики диспетчера сущностей при уничтожении контекста:
public void contextDestroyed(ServletContextEvent servletContextEvent) {
try {
logger.info("contextDestroyed...");
LifeCycleManager lifeCycleManager = ServiceLocator.getLifeCycleManager();
lifeCycleManager.closeEntityManagerFactory();
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
Я также создаю бин с именем LifeCycleManager и внутри них вызываю метод DAO, чтобы закрыть фабрику менеджера сущностей:
public void closeEntityManagerFactory() throws BusinessException {
logger.info("closeEntityManager");
try {
logger.info("closing entity manager factory...");
genericDAO.closeEntityManagerFactory();
logger.info("Entity manager factiry closed");
} catch (Exception e) {
throw new BusinessException(BusinessErrorCode.CODIGO_EJEMPLO_01, Severity.ERROR);
}
}
Внутри DAO:
...
@Autowired
private EntityManagerFactory entityManagerFactory;
...
public void closeEntityManagerFactory() {
logger.info("closing entity manager factory");
getEntityManagerFactory().close();
logger.info("entity manager factory closed");
}
Используя это каждый раз, когда я внедряю изменения в моей среде затмения, вызывается контекст уничтожения.
Надеюсь, вы могли бы помочь вам, моя среда - WebLogic Server 11gR1 и JPA 1.0.