Iniciar un Thread cuando inicie mi webapp Java

Java Hilo

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.

1 comment
  1. Bitacoras.com
    noviembre 16, 2011 at 2:20 am

    Informació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…..

    Reply
Leave a Reply

Your email address will not be published. Required fields are marked *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Do NOT follow this link or you will be banned from the site!
WP2Social Auto Publish Powered By : XYZScripts.com