Noticias Weblogs Foros Wiki Código

RecorteX

458 usuarios y 235 recortes de código
Usuario

Contraseña
Crear cuenta
asp csharp css fechas Flash html imagenes java javascript linux mysql oracle php sql SQLServer url vbnet web xhtml xml
Top Usuarios
fjmp76 (35)
albin (31)
josuebasurto (31)
juanjo (29)
pedrocaro (9)
stanz (8)
AndiXTRM (7)
Joserra (7)
miiglesi (6)
aplyca (5)
Top Etiquetas
php (38)
vbnet (27)
javascript (26)
html (25)
java (23)
csharp (18)
sql (17)
xml (13)
mysql (13)
css (10)
xhtml (7)
Flash (7)
imagenes (7)
linux (6)
fechas (6)
asp (6)
oracle (5)
url (5)
web (5)
SQLServer (5)

Ejecutar un proceso cada cierto tiempo en un contenedor de servlets (tomcat)

Se implementa como un Listener de aplicación:
 
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
import java.util.TimerTask;
import java.util.Timer;
 
public class Tarea extends TimerTask implements ServletContextListener {
    private Timer timer;
 
    public void contextInitialized(ServletContextEvent evt) {
        // Iniciamos el timer
        timer = new Timer();
        timer.schedule(this, 0, 10*60*1000);  // Ejemplo: Cada 10 minutos
    }
 
    public void contextDestroyed(ServletContextEvent evt) {
        timer.cancel();
    }
    
    public void run() {
        // Aquí el código a ejecutar cada cierto tiempo
    }    
}
 
Finalmente hay que añadir el listener al fichero web.xml de la aplicación. Ejemplo:
 
<web-app>
  <listener>
    <listener-class>Tarea</listener-class>
  </listener>
</web-app>
 
Comentario de omm1979:
este codigo funciona como hilo daemon o de background o solo muere cuando muere el servlet?
Comentario de juanjo:
Funciona como hilo en background. Se inicia cuando se inicia la aplicación web (cuando se inicia el tomcat).

Un saludo.
Comentario de omm1979:
se me ocurre otra cosa juanjo, tengo que hacer el mismo servlet pero que cada vez que le de un click a un boton de un formulario se programe o se ejecute la tarea a realizar, esto es un get o un post para ejecutar un exe, o x programa fuera del contenedor. otra pregunta es como puedo parar este servlet que acabo de empezar?, o si necesito reconfiguralo?, agradeceria mucho si pudieras darme alguna idea gracias, saludos.
Comentario de omm1979:

a lo que me refiero es que si se puede ejecutar cuando quiera darle click a un boton con get o post en la aplicacion dentro de tomcat, y que pueda parar la ejecucion o reprogramar reloj y la programada de ejecucion, agradeceria mucho si pudieras darme una idea o que pudieras contestarme mis dudas, gracias tambien por el codigo que muestras, de todos modos voy a probar que hace, saludos.

Comentario de mcordova:

Que ejemplo tan bueno. Limpio, util y conciso, me gusta mucho tu estilo.

Estamos pensando basarnos en este recorte para hacer un monitor/notificador JMX de threads en deadlock, exceso de threads corriendo y otras cosas – para tomcat6.

Muchas gracias.

Saludos,
Martin Cordova
Framework Dinámica para J2EE
http://www.martincordova.com

Comentario de gmancillas:

que tal , me podrian ayudar ??
en que parte de mi web.xml colocaria mi listener

Comentario de juanjo:

Hola, gmancillas.

No se si hay alguna restricción de donde ponerlo en el xml. Aquí tienes un ejemplo:

Event Listener Declaration and Invocation

Comentario de gmancillas:

que tal juanjo mira este es el error que me aparece en mi log

10/06/2011 01:18:17 PM org.apache.catalina.startup.HostConfig checkResources
INFO: Reloading context [/GUIAS]
10/06/2011 01:18:17 PM org.apache.catalina.core.StandardContext stop
INFO: No se ha arrancado el Contenedor org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/GUIAS]
10/06/2011 01:18:18 PM org.apache.catalina.core.StandardContext listenerStart
GRAVE: Error configurando escuchador de aplicación de clase Correoalas6
java.lang.ClassNotFoundException: Correoalas6 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1352) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3675) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4162) at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1085) at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1178) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:292) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1304) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1568) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1577) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1557) at java.lang.Thread.run(Unknown Source)
10/06/2011 01:18:18 PM org.apache.catalina.core.StandardContext listenerStart
GRAVE: Se ha saltado la instalación de escuchadores de aplicación debido a error(es) previo(s)
10/06/2011 01:18:18 PM org.apache.catalina.core.StandardContext start
GRAVE: Error listenerStart
10/06/2011 01:18:18 PM org.apache.catalina.core.StandardContext start
GRAVE: Falló en arranque del Contexto [/GUIAS] debido a errores previos

ojala me puedan ayudar

Comentario de gmancillas:

PONGO AHORA ESTE ERROR 10/06/2011 05:07:11 PM org.apache.catalina.core.StandardContext listenerStart
GRAVE: Error configurando escuchador de aplicación de clase org.quartz.ee.servlet.QuartzInitializerListener
java.lang.ClassNotFoundException: org.quartz.ee.servlet.QuartzInitializerListener at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1352) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3675) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4162) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:910) at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:873) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1118) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1020) at org.apache.catalina.core.StandardHost.start(StandardHost.java:718) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442) at org.apache.catalina.core.StandardService.start(StandardService.java:450) at org.apache.catalina.core.StandardServer.start(StandardServer.java:700) at org.apache.catalina.startup.Catalina.start(Catalina.java:551) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:275) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
10/06/2011 05:07:11 PM org.apache.catalina.core.StandardContext listenerStart
GRAVE: Se ha saltado la instalación de escuchadores de aplicación debido a error(es) previo(s)
10/06/2011 05:07:11 PM org.apache.catalina.core.StandardContext start
GRAVE: Error listenerStart
10/06/2011 05:07:11 PM org.apache.catalina.core.StandardContext start
GRAVE: Falló en arranque del Contexto [/GUIAS] debido a errores previos

Identifícate para dejar un comentario.
info@recortex.com - Proyecto: Juanjo Navarro, 2006 - Diseño: Albin - Información legal y técnica