¿Cómo puedo usar la API del servicio de temporizador J2EE en el código de inicio de Servlet?

StackOverflow https://stackoverflow.com/questions/1024081

Pregunta

Para un trabajo en segundo plano que me gustaría ejecutar en un contenedor J2EE, encontré la sugerencia de crear un servlet de inicio y usar la API del servicio de temporizador para crear un temporizador administrado (en las respuestas para ¿Qué herramientas hay para los procesos por lotes temporizados en J2EE? ).

Para crear un temporizador, necesito un contexto que implemente la API del temporizador. ( Ejemplo )

En la clase Servlet, anulo el método init, pero solo tiene acceso a un ServletContext, pero no a un SessionContext. Un ServletContext no tiene métodos para crear temporizadores, por lo que estoy atascado aquí.

¿Cómo puedo acceder al servicio del temporizador J2EE en el código de inicio de un servlet?

¿Fue útil?

Solución

Cada vez que escucho el trabajo del temporizador, no puedo evitar pensar que esto debería separarse de un servidor de aplicaciones Java EE. Puede usar algo como Quartz, o una tarea programada del sistema operativo, o un administrador de lotes como AutoSys, pero incrustarlo en un servlet me parece un mal uso de servlets.

Los contenedores Java EE 5 tienen un TimerService que es un EJB. Quizás esto lo ayudará a resolverlo.

Otros consejos

En lugar de utilizar el código de inicio de Servlet (que se ejecutará después de cada redistribución), me pareció más limpio iniciar los temporizadores en el inicio del EJB. Con EJB 3.1 y Singleton EJB esto ahora es posible con mucho menos código:

http://blogs.oracle.com/kensaks/entry/application_startup_shutdown_callbacks

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top