Então procurei no forum algo para meu problema mas não consegui achar. O que eu quero fazer é o seguinte:
Eu tenho um Servlet chamado ServletInit que quando o tomcat é iniciado ele é chamado antes da aplicação entrar no ar.
Para ficar mais claro segue a configuração do meu web.xml
<!-- SERVLET QUE INICIALIZA O HIBERNATE E VERIFICA OS VALORES SETADOS NO WEBXML -->
<servlet>
<servlet-name>ServletInit</servlet-name>
<servlet-class>br.ml.servlet.ServletInit</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Então dentro deste servlet eu inicio o hibernate e algumas variaveis que aplicacao necessita para rodar, agora vem minha duvida… Caso de erro na inicialização do hibernate, ou alguma variavel que eu precise nao foi inicializada corretamente no web.xml, tem como eu parar o contexto da aplicação para que ninguem acesse ela? ou derrepente mostrar uma página de erro e bloquear o acesso a tudo???
O TOMCAT tem o manager para “manutenções” em contextos sem parar todo ele, ele pode ser usado acessando a url http://localhost:8080/manager/html.
Para fazer isso ele se utiliza da lib catalina-ant.jar que vem junto no TOMCAT, então se você fizer uma classe como a que eu coloquei abaixo…
import org.apache.catalina.ant.StopTask;
import org.apache.tools.ant.BuildException;
import struts.administrador.notificador.Notificador;
public class ManagerContext implements Runnable {
private String contexto;
public ManagerContext(String contexto) {
this.contexto = contexto;
}
public void run() {
try {
Notificador.stopNotificadores();
StopTask reload = new StopTask();
reload.setUsername("tomcat"); // Usuário cadastrado no TOMCAT com roles="manager"
reload.setPassword("tomcat"); // Senha do usuário cadastrado
reload.setPath("/" + contexto);
reload.execute();
} catch (BuildException e) {
}
}
}
E chama-la de dentro do seu servlet como coloquei a seguir, você poderá parar o contexto conforme sua necessidade.
Thread exec = new Thread(new ManagerContext("nome do contexto"));
exec.setPriority(Thread.NORM_PRIORITY);
exec.start();
Para que funcione você deve informar um usuário cadastrado no $CATALINA_HOME/conf/tomcat-users.xml, usuário este que tenha permissão para fazer tais operações.
Estranho… Atualmente estou lançando uma ServletException mas mesmo assim o contexto é inicializado. Foi até por isto que obtive a ideia de parar o contexto da aplicação. Qual seria a exceção que faria isto?
Muito interessante saber desta funcionalidade bcsteidl. Porém tentei implementa-la aqui e não obtive sucesso. Como eu fiz? Bom importei a biblioteca catalina-ant.jar para dentro da pasta lib da minha aplicação. Coloquei o import corretamente e criei uma nova instancia da classe StopTask. Bom o interessante que o famoso crtl + space do eclipse não apresenta os métodos… ai pensei que pudesse ser bibliotecas duplicadas, entao adicionei uma referencia externa a lib, mas mesmo assim não obtive sucesso… Bom também tentei forçar a chamado do método mas nda… Eu devo estar fazendo uma grande besteria para não dizer outra palavra… A versão que eu uso do tomcat é a 5.5…
*** EDITADO ***
A unica diferença do seu código é que a chamada para o objeto StopTask está sendo feita nesta classe:
[code]public class ServletInit extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
@Override
/**
* método que é chamado para inicializar
*/
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
///implementacao
}