问题:是否有正确的方法确保HK2与泽西2关闭;如果没有,这会被视为一个错误吗?
使用jersey-server 2.3.1,我注意到没有调用托管单例上的HK2 @PreDestroy
方法和dispose()
实现上的Factory<T>
方法。做了一些探讨,我看到ConfigHelper
定义了一个生命周期监听器,它在服务定位器上调用preDestroy()
,但仅此而已。这可以从ServletContainer
和shutdown()
上的Jersey reload()
调用,但在关闭方面没有进一步使用服务定位器。
我查看了ServletContainer
,但似乎没有办法通过任何公共或受保护的API访问HK2服务定位器。
答案 0 :(得分:0)
我遇到了同样的问题。对我来说,解决方案是调用serviceLocator.shutdown()(我不知道为什么在服务关闭时不会自动调用此方法)。调用此方法后,将调用所有dispose()方法。问题哪里是调用serviceLocator.shutdown()的好地方?我实现了ApplicationEventListener,因此服务可以侦听事件DESTROY_FINISHED,RELOAD_FINISHED。当service捕获此事件时,将调用serviceLocator.shutdown()。如果您找到更好的解决方案,请告诉我。
答案 1 :(得分:0)
我最终将ServiceLocator注入我的Application实例(假设这是我应用程序的最顶层ServiceLocator)并在locator.shutdown()
中调用MyApplication.preDestroy()
(标记为@PreDestroy并从jersey的ContainerLifecycleListener调用)。为我工作好。但不确定这是推荐的做法。
答案 2 :(得分:0)
此问题已在球衣2.7(https://java.net/jira/browse/JERSEY-2299)和球衣2.11(https://java.net/jira/browse/JERSEY-2549)中得到解决。更新您的球衣依赖性应该为您解决问题。