Недетерминированный NPE, выброшенный Websphere Liberty в com.ibm.ws.classloading.internal.AppClassLoader - PullRequest
0 голосов
/ 25 апреля 2019

Очень часто я получаю следующее исключение при запуске нескольких WAR-файлов с приложениями на основе Spring Boot:

Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.foo.SomeService]: Factory method 'someService' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'someBean' defined in com.foo.SomeJavaConfig: Post-processing of merged bean definition failed; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1181)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1075)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169)
at com.ibm.ws.webcontainer.webapp.WebApp.initializeServletContainerInitializers(WebApp.java:2487)
at com.ibm.ws.webcontainer.webapp.WebApp.initialize(WebApp.java:994)
at com.ibm.ws.webcontainer.webapp.WebApp.initialize(WebApp.java:6566)
...
Caused by: java.lang.NullPointerException: null
at com.ibm.ws.classloading.internal.AppClassLoader.getClassSpecificProtectionDomainPrivileged(AppClassLoader.java:367)
at com.ibm.ws.classloading.internal.AppClassLoader.access$000(AppClassLoader.java:64)
at com.ibm.ws.classloading.internal.AppClassLoader$2.run(AppClassLoader.java:351)
at com.ibm.ws.classloading.internal.AppClassLoader$2.run(AppClassLoader.java:348)
at java.security.AccessController.doPrivileged(Native Method)
at com.ibm.ws.classloading.internal.AppClassLoader.getClassSpecificProtectionDomain(AppClassLoader.java:348)
at com.ibm.ws.classloading.internal.AppClassLoader.definePackageAndClass(AppClassLoader.java:325)
at com.ibm.ws.classloading.internal.AppClassLoader.findClass(AppClassLoader.java:271)
at com.ibm.ws.classloading.internal.ParentLastClassLoader.findOrDelegateLoadClass(ParentLastClassLoader.java:80)
at com.ibm.ws.classloading.internal.AppClassLoader.loadClass(AppClassLoader.java:443)
at com.ibm.ws.classloading.internal.ParentLastClassLoader.loadClass(ParentLastClassLoader.java:50)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethods(Class.java:1975)
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:613)
at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:489)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:431)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:397)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:333)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1000)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:523)
... 76 common frames omitted

Это недетерминированный - бывает, что все войны начинаются хорошо.
Проблема воспроизводима на WLP ver: 18.0.0.3 и 19.0.0.3 (не проверена на других).
Весенняя версия 4.3.17. ВЫПУСК
Для меня это выглядит как ошибка, но, возможно, кто-то уже исправил ее и мог бы помочь.

1 Ответ

0 голосов
/ 25 апреля 2019

Какой уровень Java вы используете для запуска этого сценария? Возможно, эта проблема относится к Java, а не к Liberty, поэтому я и спрашиваю. Мы видели некоторые проблемы с недетерминированными исключениями NullPointerException на некоторых уровнях Java, которые были исправлены на более поздних уровнях Java.

В AppClassLoader было много изменений с 18.0.0.3 до 19.0.0.3, но предоставленный вами стек соответствует уровню кода 18.0.0.3, который долгое время не менялся, поэтому выглядит так не новая проблема Если это проблема Liberty, было бы целесообразно открыть вопрос на github OpenLiberty. Вероятно, вам придется воспроизвести проблему с помощью трассировки, чтобы IBM могла больше ее отлаживать. Спецификация трассировки, которую я бы порекомендовал: com.ibm.ws.classloading. * = Finest: com.ibm.ws.artifact. * = Finest

...