Frage

Ich bin für eine generische asynchron Java Jobausführung Framework, das Callables oder Runnables umgehen konnte. Es wäre ähnlich wie java.util.concurrent.ExecutorService, (und möglicherweise wickeln ExecutorService), aber es wäre auch folgende Merkmale aufweisen:

  1. Die Fähigkeit, Aufträge an eine Datenbank, falls anhalten unten die Anwendung geht, während ein Job gewartet wird, und in der Lage, die noch nicht abgeschlossenen Aufträge neu zu starten. (Ich verstehe, dass meine Arbeit Serializable implementieren müssen können, die in Ordnung ist.)

  2. Die Arbeit mit UUIDs den Client ermöglichen Job-Token zu erhalten und über den Auftragsstatus erkundigen. (Unter der Haube würden diese Informationen in eine Datenbank beibehalten werden, wie gut.)

Ich habe angefangen, daran zu arbeiten, mich um rund ExecutorService bauen, aber ich würde eine aus der Box, Open-Source-Lösung bevorzugen, wenn ein solches vorhanden ist.

Etwas, das innerhalb des Spring Framework wäre ideal funktionieren könnte.

War es hilfreich?

Lösung

Sie können mit Quartz und einem konkreten erstellen Job Adapter, der die Delegierten zu einem Runnable oder Callable. Quartz‘Job Schnittstelle bietet die Möglichkeit, einigen Zustand zwischen Aufrufen einer Aufgabe zu erhalten. Falls gewünscht, kann Quarz speichern Arbeitsplätze und ihren Zustand dauerhaft in einer relationalen Datenbank, und führt sie auf einem skalierbaren Cluster von Hosts.

Andere Tipps

Sie können unter Quartz suchen.

  

Quartz ist ein voll funktionsfähige Open-Source-Job-Scheduling-System, das mit integriert werden kann, oder an der Seite von praktisch jede J2EE oder J2SE-Anwendung verwendet - von der kleinsten Stand-alone-Anwendung auf das größten E-Commerce-System. Quarz kann einfache oder komplexe Zeitplan für die Ausführung Dutzende, Hunderte oder sogar Zehn-of-Tausende von Arbeitsplätzen zu schaffen, verwendet werden; Jobs, deren Aufgaben als Standard-Java-Komponenten oder EJBs definiert sind. Der Quartz Scheduler viel Enterprise-Klasse, wie JTA-Transaktionen und Clustering enthält.

Werfen Sie einen Blick auf http://www.opensymphony.com/quartz/wikidocs /Features.html und sehen, ob es für Sie schon etwas hat.

Von dieser Seite:

  

Mit der Verwendung des mitgelieferten JDBCJobStore, alle Jobs und Trigger konfiguriert als "nicht-flüchtig" sind in einer relationalen Datenbank über JDBC gespeichert

könnte andere Richtung etwas sein wie mit Terracotta , die die Fähigkeit Heap in Ihrer JVM zu Cluster hat und bleiben es für Verfügbarkeit. Terracotta unterstützt die Integration mit Quartz wenn das ist nützlich, von einer Planungs Sicht . Außerdem gibt es ein Master-Arbeiter und Messaging Integrationsmodul das könnte sein als auch nützlich. Terracotta ist Open Source.

Um auf Alex 'Punkt zu verfolgen, eine Terrakotta-Lösung würde nicht Ihre Aufträge an die Datenbank bestehen, würden sie in der Terrakotta verteilten Speicherspeicher persistent sein.

Da Terracotta die Speicherspeicher auf der Festplatte weiterhin besteht, ist dies eine effizientere Version dieser Arbeitsplätze in die Datenbank zu stellen.

Zur gleichen Zeit, es gibt Ihnen ein reines POJO-Programmiermodell, so dass Sie auch nicht mit DB txns, ORM beschäftigen müssen und dergleichen - es sei denn, Ihre besondere Arbeitsbelastung geschieht mit dem DB sprechen (in diesem Fall Terracotta nicht Sie hier helfen oder schaden, es hilft nur die Arbeit zu verteilen).

Das MasterWorker Muster wird Ihnen helfen, auf dem Gitter verteilen arbeiten, und Sie können sehr einfach loszulegen eine DistributedExecutorService verwenden, einen Vorschlag einzureichen, der wie folgt aussieht:

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

Hier ist der Link zu Kurzanleitung in dem Master-Arbeiter Implementierung auf dem Terrakotta-Forge .

Was ist mehr - Terracotta erfordert nicht, dass Sie Serializable implementieren - obwohl Sie können, wenn Sie wollen:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top