我正在尝试检测应用程序停止事件(在Websphere 8.0中)以调用servlet的静态方法。我想知道是否有一种简单的方法可以确定应用程序是否已被命令停止。
这是情景:
WorkerServlet
,运行这样的循环
在其doGet()中while(!forceStop){...}
。虽然申请是
up,这个循环不断运行。 WorkerServlet.forceStop(){forceStop = true;}
。 这样,WorkerServlet的循环就会完成,并且容器可以立即销毁servlet。当前的行为是容器在强制销毁之前等待60秒,这在开发期间是不可接受的。
我尝试了不同的方法,但没有一种方法可以使用
WorkerServlet.forceStop()
。容器没有销毁()这个servlet,因为还有另一个运行请求。那么,有没有其他方法可以检测容器的app shutdown事件,以便我可以调用该静态方法?
答案 0 :(得分:1)
我发现的唯一解决方法是使用启动bean。幸运的是,Webshpere的EJB容器在servlet容器之前停止了:
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Singleton;
import javax.ejb.Startup;
@Singleton
@Startup
public class WorkerServletStopper {
@PreDestroy
public void preDestroy(){
WorkerServlet.forceStop();
}
}