2009-11-18 33 views
5

necesitamos ejecutar una función periódicamente en la aplicación web Java. ¿Cómo llamar a la función de alguna clase periódicamente? ¿Hay alguna manera de invocar la función cuando se produce algún evento como una carga alta en el servidor y demás? ¿Qué es crontab? Es ese trabajo periodicamente?Llamar a la función periódicamente en Java

Respuesta

10

Para llamar a algo periódicamente, ver TimerTask

5

Si necesita algo más robusto puede utilizar Quartz

En cuanto a crontab es la herramienta de programación en máquinas Unix.

+0

¿Más robusto que TimerTask? Es simplemente más flexible. – BalusC

+0

@BalusC: Robusto sería, con Quartz, puede programar diferentes tipos de objetos, puede usar transacciones JTA, clustering y muchas otras características de Java EE. – OscarRyz

+0

@Brian. Bueno, sí, depende de tu concepto de solidez entonces. Una de las características adicionales que tiene Quartz es la persistencia entre los reinicios del sistema. Ese es un futuro solo, sí, pero es un futuro que agrega robustez a la biblioteca de todos modos, al menos en mi punto de vista. – OscarRyz

2

Si desea ejecutar algo periódicamente, no lo haga en el servidor web. Ese sería un enfoque muy equivocado de la OMI. Es mejor usar cron en su lugar, si está en un sistema operativo tipo Unix. Los servidores de Windows ofrecen una funcionalidad similar.

+0

La aplicación web Java bien podría ejecutarse en un servidor de aplicaciones JEE. Si la acción periódica que desea realizar para invocar Business Logic implementada en JEE, el uso de las fallas de JEE Timer es totalmente razonable y totalmente compatible. – djna

+0

¿Quizás podría explicar por qué es un mal enfoque colocarlo en el servidor web en lugar de usar algo como cron? – chrisbunney

+0

djna: De acuerdo. Se necesita más información. –

4

Para los métodos de llamada cuando el servidor tiene una carga alta, tiene al menos dos enfoques posibles. Su Servidor de Aplicaciones podría tener ganchos de administración que le permitirían monitorear su comportamiento y tomar medidas progromáticas. Alternativamente, usted tiene alguna capacidad de monitoreo del sistema (por ejemplo, Tivoli u OpenView) y genera "eventos", no debería ser demasiado difícil entregar eventos tales como (por ejemplo) mensajes JMS y hacer que su servidor los recoja.

Sin embargo, es posible que desee explicar un poco más acerca de lo que quiere lograr. El comportamiento adaptativo de la aplicación puede ser bastante complicado para hacerlo bien.

1

¿Cómo llamar a la función de alguna clase periódicamente?

hay varias soluciones: una Timer, una aplicación Java como cron cron4j, Quartz, o incluso el EJB Timer API. Elegir uno u otro depende mucho del contexto: el tipo de aplicación, las tecnologías utilizadas, el número de trabajos, etc.

¿Hay alguna manera de invocar la función cuando se produce algún evento como carga alta en el servidor y así sucesivamente

Quizás pueda utilizar JMX en sus trabajos para acceder y monitorear información y desencadenar una acción bajo alguna condición específica. Pero esto es más un modo de extracción, no basado en eventos.

2

tenemos que ejecutar una función periódica en aplicaciones Web Java

(1) Así que busque en su descriptor de despliegue (web.xml) definir un oyente para que se inicie en tiempo de inicio.

¿Cómo llamar a la función de alguna clase periódicamente?

(2) Crear un Timer en el oyente.

¿Hay alguna manera de que llame a la función cuando algún suceso se produjo como alta carga en servidor y así sucesivamente

(3) y ejecutar algunos hilos para comprobar las condiciones del sistema que son accesible con Java , incluso ejecute programas del sistema (tiempo de actividad, etc.) y analice la salida.

crontab podría ser una manera, pero la ejecución de Java iniciará otra JVM y eso es realmente lo bueno en contenedores servlet: todas se ejecutan en la misma JVM.

2

Si ya usa Spring, puede echarle un vistazo al marco de ejecución de tareas de Spring - utilizando @Scheduled y @Async para anotar métodos como tareas e implementar la funcionalidad en un procesador que delega el trabajo real a un Worker, como se describe en:

http://blog.springsource.com/2010/01/05/task-scheduling-simplifications-in-spring-3-0/

La ventaja es que se puede definir temporizadores utilizando una sintaxis similar a cron en su contexto primavera y no necesita nada especial para establecer tareas, sino que también está bien integrado en Las aplicaciones Java EE y deberían funcionar bien con los servidores web (que los hilos personalizados tienden a no hacer siempre).

Cuestiones relacionadas