Abortar o webapp java na boot

Meu webapp faz parte de um EAR maior que é implementado em um servidor websphere. O servidor hospeda vários outros aplicativos no mesmo servidor virtual. Meu webapp tem algumas verificações de boot / integridade em um método servletContextListener-> contextInitialized. Eu quero tornar a webapp indisponível se a boot / verificação de integridade falhar. O que é uma maneira confiável de fazer isso? Vai lançar uma RuntimeException de dentro de contextInitialized bastar? O restante da EAR ainda deve estar disponível? Obrigado.

Eu recomendaria lançar um RuntimeException de ServletContextListener.contextInitialized .

O Servlet 2.3 não foi muito claro sobre isso, mas o Servlet 2.4 adicionou o seguinte detalhe:

Algumas exceções não ocorrem sob a pilha de chamadas de outro componente no aplicativo. Um exemplo disso é um… ServletContextListener que lança uma exceção não tratada durante uma notificação de boot de contexto de servlet…. Nesse caso, o desenvolvedor não tem oportunidade de manipular a exceção. O contêiner pode responder a todas as solicitações subsequentes ao aplicativo Web com um código de status HTTP 500 para indicar um erro de aplicativo.

Como ele diz que o mecanismo de servlet “pode” desativar o access ao aplicativo, você pode encontrar um servidor que faça outra coisa. No entanto, o Tomcat e o WebLogic desativam o aplicativo, e a única outra coisa razoável em que consigo pensar seria ignorar a exceção. Não consigo ver um contêiner que fez isso ser muito popular, então é melhor testá-lo no próprio WebSphere.

Lançar um RuntimeException provavelmente tornará esse servlet indisponível. Uma maneira mais segura pode ser implementar algo como um interceptador Spring que encaminhará para uma página de erro ou algo assim, se as verificações não tiverem saído. Dessa forma, você não precisa impedir o carregamento do aplicativo, mas pode manipulá-lo mais facilmente em tempo de execução.

    Intereting Posts