【发布时间】:2015-02-10 09:43:07
【问题描述】:
我有一个使用 Hibernate + OpenJPA 进行数据库连接的 Web 应用程序。当使用 tomcat 管理器取消部署此应用程序时,然后当我们进行内存转储并检查转储中的类对象时,我在转储中看到许多 Hibernate、Log4j 和 servlet 类对象。即使当我为每个人调用正确的关机时。这是我用来关闭它们的代码。它在 contextDestroyed(ServletContextEvent sce) 中调用
EntityManager em = EntityManagerHelper.getEntityManager();
/* Get a session.*/
Session session = (Session) em.getDelegate();
System.out.println("Calling session close.");
closeSessionFactory(session.getSessionFactory());
System.out.println("Closing EntityMnanager.");
EntityManagerHelper.closeEntityManagerFactory();
System.out.println("De-registering the JDBC drivers.");
deregisterJDBCDrivers();
System.out.println("Shutting down log4j.");
org.apache.log4j.LogManager.shutdown();
为什么我在调用 shutdown/close 方法调用后仍然在转储中看到类对象?如何预防?
【问题讨论】:
-
可能是因为它们还没有被垃圾回收?但是您还使用了旧版本的 Tomcat,您可能需要对更新的版本进行一些测试,看看是否有任何改变。
-
你试过this解决方案吗?
标签: java hibernate tomcat log4j openjpa