Ein EJB-planen von tasks mit "crontab-syntax"
Ich versuche herauszufinden, die Möglichkeiten, die ich zu lösen haben Folgendes problem.
a) ich möchte eine Datenbank-Tabelle mit "crontab-syntax", um tasks zu planen, die Struktur wäre so etwas wie dieses:
|-Id- | ---Crontab-Syntax--- | ---------Aufgabe----------| | 1 | 30 * * * * * | MyClass.TaskA(args[]) | | 2 | 0 1 * * 1-5 * | MyClass.TaskB(args[]) | | | | |
Der obigen Tabelle wird jederzeit geändert werden, indem eine externe Anwendung. Aufgaben Hinzugefügt oder entfernt werden, sollten sofort Einfluss auf den scheduler.
b) Der scheduler selbst sollte sich auf einem Java application server. Es sollte ständig synchronisiert werden, die mit der active geplanten Aufgaben in der Datenbank-Tabelle. Wenn Sie einen Zeitplan-Ereignis tritt ein, es auslösen sollte/Aufruf einer EJB mit dem Wert in 'Aufgabe' als argument.
Ich bin nicht auf der Suche nach einer Antwort auf das obige problem. Aber eher etwas input in welche frameworks verwendet werden können, für die crontab zu analysieren und in welcher Weise der EJB-Vertretung der scheduler bereitgestellt werden sollten.
Vielen Dank im Voraus.
InformationsquelleAutor aksamit | 2011-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden Sie in der EJB 3.1
@Schedule
API. Die API wir wählten für die Skillung ein wenig näher zu Quarz-syntax als cron -- winzigen Abweichungen zwischen den beiden.Hier ist eine Anmerkung Beispiel:
Vollständige Quelle für diese hier
Können Sie das gleiche tun programmgesteuert über die ScheduleExpression Klasse, welche nur eine constructable version der oben genannten Anmerkung. Hier ist, was das obige Beispiel Aussehen würde, wenn der Zeitplan war getan-code:
Den Quellcode für dieses Beispiel ist hier
Seite beachten Sie, beide Beispiele sind ausführbar in einem einfachen IDE-und test-Fällen, die Verwendung des Einbettbaren EJBContainer API auch neu in EJB 3.1.
@Schedule vs ScheduleExpression
Oben alles geschieht im deployment-descriptor und beschränkt sich daher nur auf Dinge, die konfiguriert werden können, im Voraus. Die dynamischere version verwendet, die nach der Unterzeichnung des TimerService:
TimerService.createCalendarTimer(javax.ejb.ScheduleExpression, javax.ejb.TimerConfig)
javax.ejb.Timer
als parameterBeachten Sie auch, dass es ein interceptor
@AroundTimeout
Anmerkung, dass die Funktionen identisch zu@AroundInvoke
und ermöglicht Abfangjäger zur Teilnahme an der bean timer-Funktionalität.Die ScheduleExpression API ist genau das: eine generische Methode mit spezifischen Argumenten für jeden Zeitplan. Ich habe aktualisiert die Antwort zu versuchen, und markieren Sie, dass Sie ein bisschen mehr.
Danke. Mein problem gelöst, ohne dass Quarz (das wäre auch die Aufgabe zu lösen)
+1 für die überprüfung auf Ihre Töchter
dennoch wäre es schön, wenn es neue ScheduleExpression("0 1 * * 1-5 *" /*crontabLine*/)
InformationsquelleAutor David Blevins
EJB hat seinen eigenen eingebauten Timer, aber Sie haben zu schreiben, die boilerplate-code zu übersetzen cron analysieren. Die Analyse der cron-Anweisungen selbst sollte trivial sein.
Wenn du keine Angst hast, Wagen außerhalb von EJB -, Quarz ist als lexicore erwähnt, eine hervorragende Wahl.
InformationsquelleAutor mikek
Werfen Sie einen Blick auf Quarz. Wenn Sie Frühjahr gibt es sehr gute Unterstützung gibt. Eine gepflegte, zuverlässige gut funktionierende Sache.
InformationsquelleAutor lexicore