2011-03-18 6 views

Respuesta

40

Para empezar, no utilizaría JSP para esto. Ahí no es para.

Cuando se encuentre en Java EE 5, use las API de programación de trabajos provistas por el contenedor para esto. Más detalles dependen del contenedor que está utilizando. JBoss AS 5 por ejemplo se envía con Quartz fuera de la caja. O cuando está usando un marco sobre JSP/Servlet que ofrece API de programación de trabajos, como Spring, entonces debe usarlo.

Si no hay ninguno (por ejemplo, está utilizando solo Tomcat 6), o si desea ser independiente del contenedor y/o marco, cree un ServletContextListener con un ScheduledExecutorService. Se pueden encontrar más detalles en this answer.

O cuando ya estás en un contenedor Java EE 6 que soporta EJB 3.1 (JBoss AS 6, GlassFish 3, pero de este modo no Tomcat 7), más fácil es crear un EJB @Singleton con @Schedule método.

@Singleton 
public class UpdateSubscriptions { 

    @Schedule(hour="*/6", minute="0", second="0", persistent=false) 
    public void run() { 
     // Do your job here. 
    } 

}   

Eso es todo. No es necesaria ninguna otra configuración.


actualización: según los comentarios, que está utilizando Tomcat (6 o 7?). Para iniciar un hilo durante el inicio de la aplicación web que se ejecuta la tarea cada 6 horas, utilice el ejemplo de lo dispuesto en el beforelinked answer y hacer el siguiente cambio en el scheduleAtFixedRate() método

scheduler.scheduleAtFixedRate(new UpdateSubscriptions(), 0, 6, TimeUnit.HOURS); 

La clase UpdateSubscriptions debe implementar Runnable y las necesidades reales de empleo para hacer en el método run() que @Override, como en el ejemplo en la respuesta vinculada.

+2

+1 no se puede obtener una respuesta perfecta. – asgs

+0

Estoy usando Tomcat solamente. Vi la respuesta vinculada también. 1. Tenía la intención de usarlo en una clase, no iba a usar JSP. Pero, ¿Servlet es una mejor manera? 2. si lo pongo en un servlet como se muestra en la respuesta vinculada, ¿no creará un nuevo hilo cada 6 horas? – MalTec

+0

No es un servlet. Es un oyente. Y solo hay una instancia de esto en la vida útil de Webapp (lo mismo se aplica a los servlets por cierto). – BalusC

Cuestiones relacionadas