Hola, hace unos meses necesitaba hacer que un hilo arrancara junto con mi webapp, la aplicacion esta hecha con servlets y de servidor estabamos utilizando tomcat, asi que me puse a investigar como se podria hacer para arrancar el hilo, cuando iniciara la aplicacion, lo que encontre fue que ocupaba era crear un Listener en mi aplicacion e implementar una interface que se llama ServletContextListener, para que al iniciar la aplicacion se ejecute esa clase.
Todo iba bien pero el hilo aun despues de detener el servidor o undeployar la aplicacion seguia corriendo, por lo cual algo andaba mal y se tuvo que reimplementar el codigo, encontre como hacerle para detener bien el Thread y ahora ya funciona como deberia de funcionar.
Ya para no hacer el cuento mas largo aqui os dejo los pasos que tienen que seguir:
- Crear una clase que extienda de Thread
- Crear en esa clase una variable privada de tipo boolean y crear un metodo set para esa variable
- En el metodo run hacer el while con esa variable
- Cuando quieras detener definitivamente el hilo utilizas el metodo set de la variable y le asginas false y listo.
[cc lang=»JAVA»]
public class Hilo extends Thread{
private boolean corriendo = true;
public void setCorriendo(boolean corriendo){
this.corriendo = corriendo;
}
public void run(){
while(corriendo){
//.. hacer algo
Thread.sleep(10000); //hacerlo cada 10 segundos 😛
}
}
}
[/cc]
Ahi tenemos nuestro hilo que se iniciara cuando nuestra aplicacion web empiece pero para eso tienen que primero crear otra clase parecida a esta:
[cc lang=»java»]
public class miClaseIniciadora implements ServletContextListener {
private Hilo hilo;
//Este metodo se ejecuta cuando se destruye el contexo, o cuando undeployas la aplicacion.
public void contextDestroyed(ServletContextEvent sce) {
this.hilo.setCorriendo(false);
}
//este metodo se ejecuta cuando se inicia la aplicacion o bien el contexto.
public void contextInitialized(ServletContextEvent sce) {
this.hilo = new Hilo();
hilo.start();
}
}
[/cc]
Y se preguntaran algunos por que el hilo se hace de esa manera, bueno es que en mi caso el hilo se quedaba colgado en memoria, y tambien utilizaba el metodo interrupt que por cierto ya esta despreciado(deprecated) o el metodo stop que tambien esta despreciado o el metodo suspend tambien deprecated, asi que la opcion mas sana es con una variable booleana que termine el ciclo infinito del hilo.
Ahora solo falta editar el archivo web.xml e indicarle que hay un listener y ya con eso queda listo para que el hilo empiece solito.
Agregamos la siguiente linea:
<listener> <listener-class>miClaseIniciadora </listener -class></listener>
Y listo ya deployas tu app y el hilo empezara.
NOTA: Menciono que utilizamos tomcat, pero ya probe con jboss y tambien funciona perfectamente.
Me dio flojera crear la app pero si alguien la quiere, me lo dejan en los comentarios o me envian un mail.
Bitacoras.com
noviembre 16, 2011 at 2:20 amInformación Bitacoras.com…
Valora en Bitacoras.com: Hola, hace unos meses necesitaba hacer que un hilo arrancara junto con mi webapp, la aplicacion esta hecha con servlets y de servidor estabamos utilizando tomcat, asi que me puse a investigar como se podria hacer para arranca…..