tiempo - manejo de fechas en java
La anotación @ Programar se ejecuta cada pocos minutos(o segundos) (1)
Me gustaría intentar usar la anotación @Schedule de la siguiente manera:
public class MyTestServlet extends HttpServlet {
private static JcanLogger LOG = JcanLoggerFactory.getLogger(ServiceTestServlet.class);
@EJB CronService cronService;
public void service(HttpServletRequest req, HttpServletResponse resp) throws .... {
....
cronService.iLive();
}
---
@Local // because the ejb is in a servlet (there is no other jvm)
public interface CronService {
public void iLive();
public void runsEveryMinute();
}
---
@Singleton
public class CronServiceBean implements CronService {
private static final JcanLogger LOG = JcanLoggerFactory.getLogger(CronServiceBean.class);
@Schedule(minute="*")
public void runsEveryMinute() {
LOG.info(" runs EveryMinute ");
}
public void iLive() {
LOG.info("iLive");
}
---
LOG
...
CronServiceBean:34 ] iLive
Basado en el registro, CronService está activo y en buen estado, pero la tarea programada ''runsEveryMinute'' no funciona.
¿Cómo debería funcionar usando una tarea programada EJB?
Según el Javadoc para la anotación @Schedule
, los valores predeterminados son:
-
*
para todos los campos excepto hora, minuto y segundo; y -
0
por hora, minuto y segundo, por defecto.
Al especificar minute="*"
y dejar la hora en su valor predeterminado de 0
, solicita que el temporizador se ejecute cada minuto después de la medianoche durante una hora (es decir, 00:00, 00:01, 00:02, ..., 00: 59) y luego no de nuevo hasta el día siguiente. En su lugar, utilice:
@Schedule(hour="*", minute="*")
Para ejecutar cada pocos segundos (por ejemplo, 10
segundos), puede usar una sintaxis similar a cron :
@Schedule(hour = "*", minute = "*", second = "*/10", persistent = false)
Por defecto, el programador persiste los eventos. Si se establece persistent = false
, evitará que se acumulen con el tiempo, si así lo desea.