2012-09-04 14 views
7

Intento implementar una guerra en Tomcat 7.0.29. Estoy teniendo la pila siguiente registro:Bucle infinito al implementar una guerra en tomcat 7

GRAVE: Error waiting for multi-thread deployment of context descriptors to complete 
java.util.concurrent.ExecutionException: java.lang.StackOverflowError 
    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.StackOverflowError 
    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) 

(Muchos marcos de pila omite, ...)

qué enfrenta a alguien con el mismo problema?

+0

puede publicar el contenido web.xml? – Dan

+2

Ver https://issues.apache.org/bugzilla/show_bug.cgi?id=53871 –

Respuesta

2

También me encuentro con este problema en Tomcat 7.0. y Tomcat 7.0. . Sin embargo, con Tomcat 7.0. todo funciona bien, entonces sospecho que es un problema de Tomcat, que se presentó recientemente.

El error encontrado en 7.0. y 7.0. , al iniciar Tomcat y desplegar un archivo de la guerra:

14:01:06,380 ERROR [HostConfig:576] Error waiting for multi-thread deployment of context descriptors to complete java.util.concurrent.ExecutionException: java.lang.StackOverflowError 
    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.StackOverflowError 
    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) 
1

Una solución: He cambiado el nombre de la GUERRA (sin finalName en pom.xml y cambiaron la versión artefacto) y funcionó .. .. ¿por qué? ¡No lo sé hasta ahora!

¿Una solución real y genuina? Definitivamente una nueva versión de Tomcat. . .

1

Para mí, este comportamiento se reprodujo en IntelliJ Idea cuando establecí el Contexto de la aplicación con el mismo nombre que el Maven atrifactId en el archivo .pom. P. ej. my artifactId es 'prueba', luego establezco el contexto de la aplicación (Editar configuración -> Servidor Tomcat -> Despliegue, seleccionar el artefacto explosionado) en '/ prueba'. Tan pronto como cambié el contexto de la aplicación, todo funcionó.

4

Esto se informa en sentido ascendente como número #53871 en Tomcat. El problema parece ser con el análisis de anotación, y Tomcat 7.0.38 incluye un mensaje de error más claro.

Desde el informe de error:

Debido a los problemas de gestión de la dependencia desplegué un archivo WAR que contiene dos archivos JAR que contienen diferentes versiones de una biblioteca, en la versión 1 contenía una clase A, que heredó de B y otra versión 2 que contenía una clase B que hereda de A. Las clases se cargaron en un orden tal que A y B se heredan cíclicamente entre sí, lo que conduce a un desbordamiento de pila en populateSCIsForCacheEntry porque no detecta ciclos en el árbol de herencia.

Este era exactamente el problema en mi caso: una versión antigua de dom4j incluido una versión incompatible de jaxen. El nuevo diagnóstico de error en 7.0.38 mostró exactamente qué clases formaban un ciclo y lo solucioné actualizando esas dependencias.

1

Utilice una versión inferior de Tomcat. Hay problemas con la versión de Tomcat que está utilizando.

1

Tuve el mismo problema. Creo que fue causado por Tomcat 7, así que cuando cambié a Tomcat 6.0.35, el problema se resolvió como un amuleto.