2010-04-14 12 views
5

Tengo una pregunta sobre la programación de trabajos en la aplicación web. Si tenemos que programar trabajos en la aplicación web, podemos usar java util Timer/TimerTask o Quartz (también hay otro mecanismo de programación, pero considero Quartz). Estaba considerando cuál usar, cuando llegué al sitio http://oreilly.com/pub/a/java/archive/quartz.html?page=1, que dice que usar el temporizador tiene un efecto negativo, ya que crea un hilo que está fuera del control de contenedores en la última línea. Las otras páginas discuten Quartz y sus capacidades, pero puedo leer que Quartz también usa thread y/o threadpool para programar tareas. Supongo que estos hilos tampoco están bajo el control de contenedoresQuartz en Webapplication

¿Alguien me puede aclarar esto? ¿Es seguro usar Quartz en mis aplicaciones web sin crear hilos colgantes o problemas de bloqueo de hilos? Gracias de antemano

Respuesta

2

¿Alguien me puede aclarar esto? ¿Es seguro usar Quartz en mis aplicaciones web sin crear hilos colgantes o problemas de bloqueo de hilos?

Tanto el cuarzo como el JDK Timer inician hilos no administrados que no tienen acceso a la información contextual de Java EE, ese es el problema más grande. Además, pueden usar recursos sin que el [servidor de aplicaciones] lo sepa, existen sin la capacidad de un administrador para controlar su número y uso de recursos, y obstaculizar la capacidad del servidor de aplicaciones para cerrar o recuperar recursos de la falla (ver Unmanaged threads)

Sin embargo, no tuve problemas para colgar hilos o bloquear (supongo que depende de lo que estés haciendo con ellos).

Si realmente esto es una preocupación, considere utilizar una implementación del temporizador JSR-237 y WorkManager (que funciona con hilo administrado) como Foo-CommonJ en lugar de cuarzo o temporizador JDK.

1

Ambos enfoques crearon hilos no administrados. Uso Quartz para programación en lugar de Java Timer, ya que ofrece más flexabilidad (expresiones cron, por ejemplo) y es mejor manejable.

1

Si tengo que decir en una línea, yo diría que use Quartz, ya que se encargará de administrar el trabajo de bajo nivel relacionado con la programación para usted. Con Timer, puede hacer todo lo que hace el cuarzo (incluso hacer que los hilos del temporizador sigan sondeando para verificar si la aplicación web se está ejecutando y salir de lo contrario). Pero esto debe hacerse en su código por usted. Con Quartz todo esto lo sacas de la caja.

ahora detalles cuarzo proporciona 1. Trabajo persistencia 2. agrupación de hebras Gestionado por lo que se crea un número apropiado de hilos y hacer los trabajos de esperar después de eso. 3. Servlet de inicialización para integrar con su aplicación web. Cuando la aplicación se apaga, creo que se encarga de cerrar tus hilos, pero no lo he intentado. Entonces no comentaría mucho sobre eso. 4. Programación basada en RMI, para entornos en clúster.

Hay otros también, pero estos han sido los principales motivadores por los que las personas usan el cuarzo con más frecuencia.

Cuestiones relacionadas