我正在运行一个JAX-RS应用程序,该应用程序关闭后需要进行一些清理.我为此安装了一个关机钩,它工作正常.但是,在单元测试中,(当然)不会触发关闭挂钩,因为在两次调用之间未关闭JVM.我要修复此问题,仅将关闭钩子作为最后的手段.我想,如果我仅从servlet容器中取消部署应用程序而不显式触发关闭操作,也会发生同样的情况.另外,我想如果应用程序容器在我的关闭挂钩仍然注册的情况下继续运行,可能会造成内存泄漏?
问题:是否有可能监听负责破坏我的JAX-RS应用程序的服务器/ servlet?我正在考虑Servlet#destroy
方法.
我正在寻找类似的东西:new ResourceConfig().register(new MyShutDownListener())还是我可以在ShutDownBinder中做的事情?有任何想法吗?
解决方法:
好吧,我找到了org.glassfish.jersey.server.spi.ContainerLifecycleListener
接口.当我的构建使用v2.1时,似乎该接口已在v2.3中进入Jersey.我现在升级了Jersey,并愉快地使用它. (但这是一个Jersey接口,在JAX-RS中没有兄弟姐妹.)
如果这对于以后的读者来说不是一个选择,那么我发现了另一个使用GrizzlyWebContainerFactory
的解决方案,该解决方案使我可以使用自己定义的servlet来启动应用程序.但是,该解决方案更加冗长.