3

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

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

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

4

1 回答 1

3

好吧,我找到了org.glassfish.jersey.server.spi.ContainerLifecycleListener接口。似乎这个接口在 v2.3 中进入了 Jersey,而我的构建使用的是 v2.1。我现在升级了 Jersey 并愉快地使用它。(然而,这是一个 Jersey 接口,它在 JAX-RS 中没有同级。)

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

于 2013-10-30T13:12:16.200 回答