Бесконечный цикл при развертывании войны на кота 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, которую вы используете.