Бесконечный цикл при развертывании войны на кота 7

Я пытаюсь развернуть войну в Tomcat 7.0.29. У меня есть следующий стек журналов:

GRAVE: Error waiting for multi-thread deployment of context descriptors to complete
java.util.concurrent.ExecutionException: java.lang.StackruError
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
    at java.util.concurrent.FutureTask.get(FutureTask.java:83)
    at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:574)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1413)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:313)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:401)
    at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:346)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1140)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:785)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.StackruError
    at java.util.HashSet.<init>(HashSet.java:86)
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2208)
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2227)
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2227)
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2227)
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2227)
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2227)
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2227)
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2227)

(Многие кадры стека опущены...)

Кто-нибудь сталкивается с такой же проблемой?

6 ответов

Это сообщается как проблема № 53871 в Tomcat. Похоже, что проблема связана со сканированием аннотаций, а Tomcat 7.0.38 содержит более четкое сообщение об ошибке.

Из сообщения об ошибке:

Из-за проблем управления зависимостями я развернул файл WAR, содержащий два файла JAR, содержащие разные версии библиотеки, где версия 1 содержала класс A, унаследованный от B, и другую версию 2, которая содержала класс B, унаследованный от A. Классы были загружены в такой порядок, что A и B циклически наследуются друг от друга, что приводит к переполнению стека в populateSCIsForCacheEntry, поскольку он не обнаруживает циклы в дереве наследования.

Это была именно проблема в моем случае: старая версия dom4j в комплекте несовместимая версия jaxen, Новая диагностика ошибок в 7.0.38 показала, какие именно классы образуют цикл, и я исправил это, обновив эти зависимости.

Я также сталкиваюсь с этой проблемой в Tomcat 7.0.29 и Tomcat 7.0.30 Однако с Tomcat 7.0.28 все работает отлично, поэтому я подозреваю, что это проблема Tomcat, которая была недавно представлена.

Ошибка, обнаруженная в 7.0.29 и 7,0.30, при запуске Tomcat и развертывании файла войны:

14:01:06,380 ERROR [HostConfig:576] Error waiting for multi-thread deployment of context descriptors to complete java.util.concurrent.ExecutionException: java.lang.StackruError
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
    at java.util.concurrent.FutureTask.get(FutureTask.java:111)
    at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:574)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1413)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:313)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:401)
    at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:346)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1140)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:785)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.StackruError
    at java.util.HashSet.<init>(HashSet.java:103)
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2243)
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2260)
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2260)

Обходной путь: я изменил имя WAR (без finalName в pom.xml и изменил версию артефакта), и это сработало.... почему? Я не знаю до сих пор!

Реальное и подлинное решение? Определенно новый релиз Tomcat.,,

У меня такая же проблема. Я думаю, что это было вызвано Tomcat 7, поэтому, когда я перешел на Tomcat 6.0.35, проблема решилась сама собой.

Для меня это поведение воспроизводилось в IntelliJ Idea, когда я устанавливал для контекста приложения то же имя, что и для атрибута Maven atrifactId в файле.pom. Например, мой artifactId - "тест", затем я установил "Контекст приложения" ("Редактировать конфигурацию -> Tomcat Server -> Развертывание, выберите разнесенный артефакт") на "/test". Как только я изменил контекст приложения, все заработало.

Используйте более низкую версию Tomcat. Есть проблемы с версией Tomcat, которую вы используете.

Другие вопросы по тегам