在webserver shutdown上调用contextDestroyed方法

时间:2013-05-20 19:22:47

标签: java unix

我创建了一个只有一个servletContext listner的webapp。

以下是代码: 我曾尝试使用Runtime.getRuntime(),但这并没有奏效。所以虽然谷歌搜索遇到ProcessBuilder,但它也不起作用。

我可以通过从UNix框上的控制台运行来执行脚本。

以下代码的目的是执行sh脚本,例如在服务器出现故障时捕获echo Hello > test.txt之类的内容。但是当服务器出现故障时,此脚本不会执行。不确定为什么conextDestroyed没有被调用或者conextDestroyed被调用为什么脚本没有被执行。

public class MyTestContextListener implements ServletContextListener{

@Override
public void contextDestroyed(ServletContextEvent arg0) {
    // TODO Auto-generated method stub
    ProcessBuilder pb = new ProcessBuilder("/bin/bash","/local/test/tomcatContextTest/tomcatContextListener.sh");
    try {
        pb.start();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



}

@Override
public void contextInitialized(ServletContextEvent arg0) {
    // TODO Auto-generated method stub

    ProcessBuilder pb = new ProcessBuilder("/bin/bash","/local/test/tomcatContextTest/tomcatStartContextListener.sh");
    try {
        pb.start();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
}

2 个答案:

答案 0 :(得分:1)

您是否已将ServletContextListener放入web.xml

看一下这个例子:http://www.javabeat.net/2009/02/servletcontextlistener-example/

答案 1 :(得分:0)

服务器出现故障的原因有很多:

  • 内部错误(如OutOfMemory) - 在这种情况下不调用ServletContextListener
  • 有人杀死了Application Server - 永远不会调用ServletContextListener
  • 您明确停止上下文(例如在管理器中) - 调用ServletContextListener
  • 您明确停止整个应用程序服务器 - 调用ServletContextListener

HTH