2010-04-14 16 views
5

Ho una domanda nella pianificazione dei lavori nell'applicazione web. Se dobbiamo pianificare i lavori nell'applicazione web, possiamo utilizzare java util Timer/TimerTask o Quartz (esistono anche altri meccanismi di pianificazione, ma ho considerato Quartz). Stavo valutando quale utilizzare, quando raggiungo il sito http://oreilly.com/pub/a/java/archive/quartz.html?page=1 che dice che usare il timer ha un effetto negativo poiché crea un thread fuori dal controllo dei contenitori nell'ultima riga. Le altre pagine discutono di Quartz e delle sue funzionalità, ma posso leggere che Quartz utilizza anche thread e/o threadpool per pianificare le attività. La mia ipotesi è che questi thread non siano anche sotto il controllo dei containerQuartz in Webapplication

Qualcuno può chiarirmi questo? È sicuro usare Quartz nelle mie applicazioni web senza creare thread sospesi o problemi di thread lock? Grazie in anticipo

risposta

2

Qualcuno può chiarirmi questo È sicuro utilizzare Quartz nelle mie applicazioni Web senza creare thread sospesi o problemi di blocco del thread?

Sia quarzo e il timer JDK iniziano le discussioni non gestiti che non hanno accesso a Java EE informazioni contestuali, questo è il più grande problema. Inoltre, possono utilizzare le risorse senza il [server delle applicazioni] che ne sono a conoscenza, esistono senza la capacità dell'amministratore di controllare il numero e l'utilizzo delle risorse e impediscono la capacità del server dell'applicazione di arrestare o ripristinare correttamente le risorse dall'errore (vedere Unmanaged threads).

Detto questo, non ho dovuto affrontare discussioni sospese o problemi di blocco (suppongo che dipenda da ciò che stai facendo con loro però).

Se davvero questo è un problema, si consideri l'utilizzo di un'implementazione di JSR-237 Timer e WorkManager (che funziona con thread gestiti) come Foo-CommonJ anziché quarzo o JDK Timer.

1

Entrambi gli approcci hanno creato thread non gestiti. Uso Quartz per la pianificazione piuttosto che per il timer java poiché offre una maggiore flessibilità (espressioni cron, ad esempio) ed è più gestibile.

1

Se devo dire in una riga, direi utilizzare Quartz in quanto si occuperà di gestire il lavoro di basso livello relativo alla pianificazione per voi. Con Timer, puoi fare tutto ciò che fa il quarzo (anche fare in modo che i thread del timer continuino a sondare per verificare se l'app web è in esecuzione e uscire altrimenti). Ma questo deve essere fatto nel tuo codice da te. Con Quartz tutto questo ti esce dalla scatola.

ora dettagli quarzo fornisce 1. Lavoro persistenza 2. pool di thread gestito in modo da creare un numero adeguato di fili e fare i lavori aspettano dopo. 3. Servlet di inizializzazione da integrare con l'applicazione Web. Quando l'app si spegne, penso che si occupi di chiudere i thread, ma non l'ho provato. Quindi non vorrei commentare molto su di esso. 4. Pianificazione basata su RMI, per ambienti cluster.

Ce ne sono anche altri, ma questi sono stati i principali motivi per cui le persone usano il quarzo più frequentemente.

Problemi correlati