Java 如何监听JAX-RS取消部署

Java 如何监听JAX-RS取消部署,java,jersey,jax-rs,Java,Jersey,Jax Rs,我正在运行一个JAX-RS应用程序,一旦应用程序关闭,它需要进行一些清理。我为此安装了一个关机挂钩,它工作正常。但是,在单元测试中,关闭钩子(当然)不会被触发,因为JVM不会在两次调用之间关闭。这是我想要解决的问题,并且只是在万不得已的情况下使用关闭挂钩。我想,如果我只从servlet容器中取消部署应用程序而不显式触发关闭,也会发生同样的情况。另外,我想,如果应用程序容器继续运行,而我的关闭钩子仍然注册,我可能会造成内存泄漏 问题:是否有可能监听负责我的JAX-RS应用程序的服务器/servle

我正在运行一个JAX-RS应用程序,一旦应用程序关闭,它需要进行一些清理。我为此安装了一个关机挂钩,它工作正常。但是,在单元测试中,关闭钩子(当然)不会被触发,因为JVM不会在两次调用之间关闭。这是我想要解决的问题,并且只是在万不得已的情况下使用关闭挂钩。我想,如果我只从servlet容器中取消部署应用程序而不显式触发关闭,也会发生同样的情况。另外,我想,如果应用程序容器继续运行,而我的关闭钩子仍然注册,我可能会造成内存泄漏

问题:是否有可能监听负责我的JAX-RS应用程序的服务器/servlet被销毁?我在考虑类似的方法

我正在寻找类似的东西:
new ResourceConfig().register(new MyShutDownListener())
或者我可以在
ShutDownBinder
中做的事情?有什么想法吗?

嗯,我找到了界面。当我的构建使用v2.1时,这个接口似乎在v2.3版本中进入了Jersey。我现在升级了球衣,并愉快地使用它。(不过,这是一个Jersey接口,在JAX-RS中没有兄弟接口。)


如果这不是这个答案的未来读者的选择,我找到了另一个解决方案,它允许我使用定义自己的servlet来启动应用程序。但是,此解决方案更为冗长。

ServletContextListener.contextDestroyed()方法是否不适合您的情况?我正在启动由
GrizzlyHttpServerFactory嵌入的应用程序。我没有找到一种方法将自己与之挂钩。使用此接口最终帮助我解决了所描述的问题,即在应用程序关闭期间及时取消打开的异步响应,以免无法再与之交互。所有其他可能性(如
@PreDestroy
、一个
ServletContextListener
、或
@Observes@destroy(ApplicationScoped.class)
)都不起作用。