什么时候调用了contextDestroyed?

时间:2014-07-08 09:50:22

标签: java tomcat servletcontextlistener

实施ContextListener后,我现在可以通过关闭连接池和刷新缓存等来愉快地处理contextDestroyed事件。

最近,当我的服务器没有被关闭时调用contextDestroyed时,我感到很惊讶 - 这似乎是在某个任意时间我无法追踪的。

是否有任何已定义的事件或一组情况触发contextDestroyed

我应该确保在调用contextDestroyed时我所做的一切都是可逆的吗?我需要让所有游泳池在destroyed/initialized周期内存活吗?假设Tomcat被关闭或我的contextDestroyed被替换时我只会得war,这是错误的吗?

2 个答案:

答案 0 :(得分:9)

通过一系列试验和错误测试,我发现在{; 1>}时调用了contextDestroyed()

  1. 正在更新/删除服务器.WAR
  2. 由于管理员干预,服务器已关闭。
  3. 由于编码错误导致服务器关闭。会有的东西 终止非服务器应用程序终止。
  4. 如果您遇到问题#3,正如您所建议的那样,我认为最好的做法是安全地(确保不要创建无限循环)调用contextInitialized()以确保正确地重新创建池。

答案 1 :(得分:3)

请参阅:http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html

  

contextDestroyed(ServletContextEvent sce):接收通知   ServletContext即将被关闭。

即,在Web应用程序被卸载时调用它(例如,您从web-apps文件夹中删除或替换.war文件或使用Tomcat服务器管理器卸载它。)