2009-03-04 16 views
5

Sto cercando un generico framework di esecuzione del lavoro asincrono Java in grado di gestire Callable s o Runnable s. Sarebbe simile a java.util.concurrent.ExecutorService, (e forse avvolgere ExecutorService), ma sarebbe anche avere le seguenti caratteristiche:Ricerca di framework/libreria esecuzione asincrona generica in Java

  1. la capacità di persistere di posti di lavoro a un database nel caso in cui l'applicazione va giù mentre un lavoro è in manutenzione e essere in grado di riavviare i lavori incompleti. (Capisco che il mio lavoro potrebbe dover implementare Serializable che è OK.)

  2. Lavorare con UUID per consentire al client di ottenere token di lavoro e informarsi sullo stato del lavoro. (Sotto il cofano queste informazioni sarebbe persistito a un database, pure.)

ho iniziato a lavorare su questo io stesso con la costruzione intorno ExecutorService, ma preferirei un out of the box, soluzione open source, se ne esiste uno

Qualcosa che potrebbe funzionare all'interno del Framework di primavera sarebbe l'ideale.

risposta

3

È possibile utilizzare Quartz, e creare un adattatore concreta Job che i delegati ad un Runnable o Callable. L'interfaccia al quarzo 'Job aggiunge la possibilità di mantenere uno stato tra le invocazioni di un'attività. Se lo si desidera, Quartz può archiviare i lavori e il loro stato in modo duraturo in un database relazionale ed eseguirli su un cluster scalabile di host.

8

Si consiglia di guardare Quartz.

quarzo è un aperto sistema di pianificazione full-optional, lavoro di origine che può essere integrata con, o utilizzati lungo il lato praticamente qualsiasi applicazione J2EE o J2SE - dal più piccolo applicazione stand-alone per il più grande sistema di e-commerce. Il quarzo può essere utilizzato per creare programmi semplici o complessi per l'esecuzione di decine, centinaia o persino decine di migliaia di lavori; lavori le cui attività sono definite come componenti Java standard o EJB. Quartz Scheduler include molte funzionalità di classe enterprise, come le transazioni JTA e il clustering.

2

altro la direzione potrebbe essere qualcosa di simile all'utilizzo di Terracotta, che ha la capacità di accumulare cluster nella JVM e di mantenerlo disponibile per la disponibilità. Terracotta supporta l'integrazione con Quartz se ciò è utile dal punto di vista della pianificazione. Inoltre, c'è un master worker e un messaggio integration module che potrebbe essere utile. La terracotta è open source.

2

Per dare seguito al punto di Alex, una soluzione in Terracotta non avrebbe mantenuto il tuo lavoro nel Database, sarebbero persistenti nello store di memoria distribuita Terracotta.

Dal momento che Terracotta mantiene l'archivio di memoria su disco, questa è una versione più efficiente di inserire tali lavori nel database.

Allo stesso tempo, ti fornisce un puro modello di programmazione POJO, quindi non devi nemmeno occuparti di DB txns, ORM e simili - a meno che il tuo particolare carico di lavoro non parli al DB (nel qual caso La terracotta non ti aiuta o ti fa male qui, aiuta solo a distribuire il lavoro).

Il modello MasterWorker vi aiuterà a distribuire il lavoro fuori sulla griglia di partenza, e si può facilmente iniziare a utilizzare un DistributedExecutorService, presentando il lavoro si presenta come segue:

CompletionService executor = new DistributedCompletionService(new DistributedExecutorService("myTopologyName")); 
executor.submit(new MyRunnable(), null); 
... 
Future f = executor.take(); 

Ecco il link per Quickstart guide in the master-worker implementation on the Terracotta Forge.

Cosa c'è di più - Terracotta non richiede di implementare Serializable - anche se è possibile, se si vuole :)

+0

l'URL non è aggiornato, provate questo [master-lavoratore con terracotta] (http: // www.infoq.com/articles/master-worker-terracotta) –

Problemi correlati