Циклическая зависимость, предотвращающая развертывание войны на Tomcat - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть война службы отдыха (назовем А) с использованием Джерси, который развертывается локально, а также на нескольких тестовых серверах Tomcat, но не загружается на 1 из 3 серверов.Я считаю, что это круговая зависимость при обработке аннотаций.Еще одна война на сервере, B, работает везде.На сервере A происходит сбой, A будет работать, если B удален.Это было обнаружено методом случайных проб и ошибок.Настройки сервера идентичны, за исключением того, что военные файлы появляются в разных порядках.Я искал способы заставить аннотации в jar-файлах обрабатываться в определенном порядке, чтобы избавиться от любой псевдослучайности.Я собирался отправить вопрос о.Даже не понимая, является ли это правильным способом заказа банок, я многократно касаюсь глубины.Поэтому я подумал, что сначала смогу узнать мнение о том, в каком направлении я иду.

18-Apr-2019 07:43:42.886 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/opt/tomcat/webapps/[A].war]
18-Apr-2019 07:43:43.337 SEVERE [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/[A].war]]
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
                at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)
                at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
                at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
                at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:985)
                at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/[A]] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies. The class hierarchy being processed was [oracle.net.aso.d->oracle.net.aso.e->java.lang.Object->java.lang.Object->java.lang.Object->java.lang.Object->
.
.
.
java.lang.Object->java.lang.Object->java.lang.Object->java.lang.Object]
                at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:2100)
                at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2044)
                at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1990)
                at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1960)
                at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1913)
                at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1153)
                at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:765)
                at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
                at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
                at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5154)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
                ... 10 more

1 Ответ

1 голос
/ 20 апреля 2019
oracle.net.aso.d->oracle.net.aso.e->java.lang.Object->java.lang.Object->java.lang.Object
  1. Глядя на сообщение, оно сканирует классы в одном банке и зацикливается на java.lang.Object. Это довольно странно. (Если его можно воспроизвести с помощью последней версии Tomcat, например, пустого веб-приложения только с этим файлом JAR, пожалуйста, сообщите о проблеме).

  2. Довольно просто пропустить файл из сканирования аннотаций. Это описано на страницах часто задаваемых вопросов Apache Tomcat в разделе «Как ускорить запуск Tomcat».

Обратите внимание, что вы не упомянули, какую версию Apache Tomcat (x.y.z) вы используете.

...