3

问题:是否有适当的方法来确保 HK2 与 Jersey 2 一起关闭;如果不是,这会被认为是一个错误吗?

使用 jersey-server 2.3.1,我注意到@PreDestroy托管单例上的 HK2 方法和实现上的dispose()方法Factory<T>没有被调用。稍微摸索了一下,我看到它ConfigHelper定义了一个在服务定位器上调用的生命周期侦听preDestroy()器,但仅此而已。这在和ServletContainer上都从 Jersey 调用,但在关闭方面没有对服务定位器进行任何进一步的处理。 shutdown()reload()

我已经看过了ServletContainer,但似乎没有办法通过任何公共或受保护的 API 访问 HK2 服务定位器。

4

3 回答 3

0

我最终将 ServiceLocator 注入到我的应用程序实例中(假设这是我的应用程序的最顶层 ServiceLocator)并调用locator.shutdown()MyApplication.preDestroy()它用 @PreDestroy 标记并从球衣的 ContainerLifecycleListener 调用)。对我来说工作正常。但是,不确定这是推荐的方法。

于 2013-11-21T20:53:58.360 回答
0

此问题已在 jersey 2.7 ( https://java.net/jira/browse/JERSEY-2299 ) 和 jersey 2.11 ( https://java.net/jira/browse/JERSEY-2549 ) 中得到解决。更新您的球衣依赖项应该可以为您解决问题。

于 2014-10-01T23:28:12.170 回答
0

我有同样的问题。对我来说,解决方案是调用 serviceLocator.shutdown() (我不知道为什么在服务关闭时不会自动调用此方法)。调用此方法后,将调用所有 dispose() 方法。问题在哪里调用 serviceLocator.shutdown() 的好地方?我已经实现了 ApplicationEventListener,因此服务可以侦听事件 DESTROY_FINISHED、RELOAD_FINISHED。当服务捕获此事件时,将调用 serviceLocator.shutdown()。如果您找到更好的解决方案,请告诉我。

于 2013-11-18T18:25:17.093 回答