A implantação do war está falhando no tomcat devido a Não é possível inicializar o contexto porque já existe um contexto de aplicativo raiz presente
Tenho batido minha cabeça nisso há alguns dias. E eu realmente não entendo de onde vem esse erro. Já segui alguns tópicos sobre isso no SO, este e 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)
Eu escrevi um conjunto de API e estou tentando implantá-lo no servidor Tomcat. E durante a implantação, meu aplicativo está iniciando, mas sendo abortado por causa de algum outro contexto já está lá.
Por que meu aplicativo não está iniciando com sucesso? Tenho apenas um arquivo war presente na minha pasta webapps e removi o resto.
Eu também não entendo de qual arquivo web.xml ele está falando.
Respostas
Finalmente descobri o culpado. Não sei por que sinto que a documentação da sessão de primavera precisa de muito trabalho. Eu poderia estar errado.
Enfim, estou usando o inicializador que estende AbstractHttpSessionApplicationInitializer
, conforme mencionei na documentação.
public class SessionConfigInitializer extends AbstractHttpSessionApplicationInitializer {
public SessionConfigInitializer() {
super(SessionConfig.class);
}
}
Quando eu olhei AbstractHttpSessionApplicationInitializer
, estava fazendo isso servletContext.addListener(new ContextLoaderListener(rootAppContext));
na inicialização.
Postar isso no caso de alguém cair nessa situação possa ajudá-los.
Você tem que ver onde instalou seu tomcat e ver a pasta webapp , existem todos os aplicativos web nesta pasta. por exemplo, no meu caso: C: \ Arquivos de programas \ Apache Software Foundation \ Apache Tomcat 8.0.27 \ webapps
ou consulte C: \ Arquivos de programas \ Apache Software Foundation \ Apache Tomcat 8.0.27 \ conf \ Catalina \ localhost se qualquer outro aplicativo da web existir fora da pasta do servidor tomcat.