gpt4 book ai didi

java - Hibernate 的 Tomcat 6 类加载器泄漏

转载 作者:行者123 更新时间:2023-11-28 23:32:34 27 4
gpt4 key购买 nike

我有一个 Web 应用程序,它使用 Hibernate + OpenJPA 进行数据库连接。当使用 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();

为什么我在调用关闭/关闭方法调用后仍然在转储中看到类对象?如何预防?

最佳答案

我建议深入挖掘堆转储,看看是什么保留了对您的类加载器的引用。我知道 OpenJPA 存在无法自行清理的问题。 tomcat上没听说过这个问题,不过肯定是有可能的。对于傻笑,请尝试在关机时调用 org.apache.openjpa.enhance.PCRegistry.deregister(ClassLoader)。

查看 OPENJPA-2538了解详情。

关于java - Hibernate 的 Tomcat 6 类加载器泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28428440/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com