gpt4 book ai didi

java - Tomcat 关机 : class loading during contextDestroyed does not work

转载 作者:行者123 更新时间:2023-11-30 09:01:15 24 4
gpt4 key购买 nike

我正在 Tomcat 7.0.53 中运行 Web 应用程序。我实现了一个 ServletContextListener(称之为 InitListener)并在 web.xml 中将其正确定义为一个监听器:

  <listener>
<description>listener that initializes common web app/service resources</description>
<listener-class>x.y.z.InitListener</listener-class>
</listener>

在 contextDestroyed 事件期间,我想清理一些代码(例如,使用 close () 关闭 org.jboss.netty.channel.group.ChannelGroup),但我的代码在这个方法中总是失败并出现错误:

SEVERE: Exception sending context destroyed event to listener instance of class x.y.z.InitListener
java.lang.NoClassDefFoundError: org/jboss/netty/util/internal/ConcurrentHashMap$Values

现在,如果我已经在 InitListener 的 contextInitialized 部分使用了 ConcurrentHashMap$Values,例如通过调用 ChannelGroup 上的 close (),则关闭工作没有问题。

在我看来,在 contextDestroyed 事件期间,Tomcat 无法再加载该类,但如果它已预先加载,则没有问题。但这不是解决方案,因为我在 contextDestroyed 中使用了其他类,但遇到了同样的问题。我将不得不预加载我以后想使用的所有类。对我来说听起来像是黑客攻击。

我做错了什么?为什么 Tomcat 在此阶段无法再加载新类?

编辑:作为附加信息,问题仅在我远程部署我的 Web 应用程序时出现。当我在 Tomcat 上重新加载或取消部署 Web 应用程序时,它总是会正常关闭。就在远程部署时,关机失败。

最佳答案

我刚刚从 Tomcat 开发人员那里得到了答复。正如 Gimby 已经假设的那样,问题是由 Tomcat 中的错误引起的。它在 7.0.54 及更高版本中得到修复。

感谢您的帮助。

关于java - Tomcat 关机 : class loading during contextDestroyed does not work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26466197/

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