我的Jersey应用程序容器已关闭,并显示以下异常消息。
java.lang.IllegalStateException: ServiceLocatorImpl(__HK2_Generated_0,0,1879131528) has been shut down
at org.jvnet.hk2.internal.ServiceLocatorImpl.checkState(ServiceLocatorImpl.java:2288)
at org.jvnet.hk2.internal.ServiceLocatorImpl.getServiceHandleImpl(ServiceLocatorImpl.java:629)
at org.jvnet.hk2.internal.ServiceLocatorImpl.getServiceHandle(ServiceLocatorImpl.java:622)
at org.jvnet.hk2.internal.ServiceLocatorImpl.getServiceHandle(ServiceLocatorImpl.java:640)
at org.jvnet.hk2.internal.FactoryCreator.getFactoryHandle(FactoryCreator.java:103)
... 59 common frames omitted
Wrapped by: org.glassfish.hk2.api.MultiException: A MultiException has 1 exceptions. They are:
1. java.lang.IllegalStateException: ServiceLocatorImpl(__HK2_Generated_0,0,1879131528) has been shut down
无论何时出现上述错误,应用程序都无法处理该请求。它反复显示相同的消息,并且 我的spring应用程序容器也关闭了。下面是我得到答复的错误消息。
org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'daoQuery': Singleton bean creation not allowed while the singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)
java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
我的Glassfish球衣泽西版是2.22.2。
以上情况仅在重负载下发生。
我们分析了此问题,发现此问题在多种情况下都会发生。
我们纠正了这两点,但是在重负载下我们仍然遇到相同的错误。
有什么方法可以防止或解决问题?
答案 0 :(得分:1)
您应该升级到最新的2.28最新版本,或者至少更新2.26版,以解决HK2问题
Jersey代码的另一个更大的变化是尝试使Jersey核心独立于任何特定的注入框架。就像您现在看到的那样, Jersey 2.x曾经(非常!)依赖HK2,这有时会引起问题(尤其是在其他注射容器上运行时。Jersey现在定义了它自己的注射门面, ,如果正确实施,将替换所有内部Jersey注入。
别误会-球衣仍然在hk2上运行。但是,当其他容器提供相同的功能时,应该有可能摆脱这种依赖性。如前所述,这样做的动机是能够与cdi,guice等其他框架无缝集成。这仍在进行中,结果是:用户必须提供Jersey注入实现。现在唯一一个100%准备就绪的版本基于hk2:
<groupId>org.glassfish.jersey.inject</groupId> <artifactId>jersey-hk2</artifactId> <version>2.26</version>