从Java Web应用程序调用取消部署的方法

Sha*_*wal 11 jboss web.xml servlets

我正在开发一个Java Web应用程序.该应用程序连接到Lucene索引.我创建了一个IndexSearcher的单例实例.此实例打开一些文件.当我重新部署Web应用程序时,由早期的IndexSearcher实例打开的文件将继续保持打开状态,并且重新部署的应用程序将创建另一个实例.经过一些重新部署后,系统开始抛出"太多打开文件"异常.我想在重新部署之前关闭旧实例,以便关闭旧文件,但我无法弄清楚如何做到这一点?web.xml中是否有一个指令取消部署,类似于load-on-startup?我在jboss服务器上运行web应用程序.

Bal*_*usC 22

实施一个ServletContextListener.

@WebListener
public class LuceneConfig implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        // Do your job here during webapp startup.
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // Do your job here during webapp shutdown.
    }

}
Run Code Online (Sandbox Code Playgroud)

如果您还没有使用Servlet 3.0(虽然已经有2年了),那么您需要删除@WebListener注释并手动注册web.xml,如下所示:

<listener>
    <listener-class>com.example.LuceneConfig</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)