La implementación de war está fallando en tomcat debido a que no se puede inicializar el contexto porque ya hay un contexto de aplicación raíz presente

Dec 26 2020

Me he estado golpeando la cabeza con esto desde hace unos días. Y realmente no entiendo de dónde viene este error. Ya seguí algunos hilos con respecto a esto en SO, este y este

26-Dec-2020 12:48:18.633 SEVERE [main] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class [org.springframework.web.context.ContextLoaderListener]
        java.lang.IllegalStateException: Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml!
                at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:263)
                at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)
                at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4714)
                at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5177)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
                at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
                at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
                at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:706)
                at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:978)
                at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1848) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
                at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)

He escrito un conjunto de API y estoy tratando de implementarlo en el servidor Tomcat. Y durante la implementación, mi aplicación se inicia, pero se cancela debido a algún otro contexto que ya está allí.

¿Por qué mi aplicación no se inicia correctamente? Solo tengo un archivo war presente en mi carpeta de aplicaciones web y he eliminado el resto.

Tampoco entiendo de qué archivo web.xml está hablando.

Respuestas

1 LokeshPandey Dec 29 2020 at 21:50

Finalmente encontré al culpable. No sé por qué siento que la documentación de la sesión de primavera necesita mucho trabajo. Podría estar equivocado.

De todos modos, estoy usando un inicializador que se extiende AbstractHttpSessionApplicationInitializer, como se menciona en la documentación.

public class SessionConfigInitializer extends AbstractHttpSessionApplicationInitializer {

    public SessionConfigInitializer() {
        super(SessionConfig.class);
    }
}

Cuando miré AbstractHttpSessionApplicationInitializer, estaba haciendo esto servletContext.addListener(new ContextLoaderListener(rootAppContext));al inicio.

Publicar esto en caso de que alguien más caiga en esta situación podría ayudarlo.

გენომუმლაძე Dec 27 2020 at 00:17

Hay que ver donde se había instalado el Tomcat y ver webapp carpeta, hay todas las aplicaciones Web en esta carpeta. por ejemplo, en mi caso: C: \ Archivos de programa \ Apache Software Foundation \ Apache Tomcat 8.0.27 \ webapps

o consulte C: \ Archivos de programa \ Apache Software Foundation \ Apache Tomcat 8.0.27 \ conf \ Catalina \ localhost si existe alguna otra aplicación web fuera de la carpeta del servidor tomcat.