Optimierungen Quartz-Servlet für die Ausführung von CRON Jobs

QSLog: G2VB : 931, 1178, 1209

Kundenbereich: alle

Änderungsdatum: 03.11.2015

 

Es wurden Optimierungen bezüglich Quartz-Servlet für die Ausführung von CRON-Jobs vorgenommen.

Es gibt momentan zwei Lösungsansätze, welche getrennt oder gemeinsam eingeschaltet werden können:

 

Lösung1:

Die Quartz-Tabellen von MainMandants können einbezogen werden, wenn man in der web.xml von g2vb den Schalter für QuartzServlet/isClustered auf true setzt. Dann können noch weitere Einstellungen in die Konfigurationsdateien g2vb-quartz-clustered-oracle.properties oder g2vb-quartz-clustered-sqlserver.properties aus dem g2vb.war getätigt werden.

VORTEIL: Quartz regelt selbst, dass keine parallelen Prozesse für den gleichen Job auf den zwei Cluster-Knoten entstehen.

NACHTEIL: Es muss sichergestellt werden, dass die Uhrzeiten der betroffenen Cluster- Knoten nicht mehr als 1 Sekunde abweichen, sonst drohen schwere Dateninkonsistenzen.

Damit ist es für gemischte Umgebungen eher ungeeignet.

 

Lösung2:

Es gibt eine eigene G2vb-Patchjob-Lösung. Je Jobkürzel gibt es höchstens einen Datenbankeintrag.

Durch diese Lösung kann ein Jobkürzel von mehreren Triggern mit je einer Jobinstanz bearbeitet werden (Unter Umständen auf unterschiedlichen JVMs.)

Diese Jobinstanzen konkurrieren untereinander. Jedes Jobkürzel wird von der zuerst ankommenden Jobinstanz belegt. Dieses Lock ist aber nicht fest (temporär), weil es immer vom letzten Aktualisierungszeitpunkt und einer vorkonfigurierten höchsten Zeitdauer ausgerechnet wird.

Diese höchstmöglichste Zeitdauer ist im Admin-Tool konfigurierbar: Menü "Extras/ Dezentrale Einstellungen" "DemoQuartzService/HoechsteDauerSchritteInSek".

Es gibt einen Eintrag pro Job Kennung (fest kodiert in Java) in der neuen Tabelle G2VB_QRTZ_JOB_DETAILS. Dieser wird bei der Ausführung des Jobs regelmäßig aktualisiert. Bei jeder Änderung werden automatisch neue Einträge in G2VB_QRTZ_JOB_DETAILS geschrieben oder es wird ein bestehender Eintrag erneuert (Wenn der Trigger sich nicht ändert, dann wird er nur aktualisiert). Es wird ausschließlich mit Datenbankserverzeiten gearbeitet.

 

Eine neue kundenspezifische Einstellung enthält Details zum letzten Bearbeitungsschritt des aktuell laufenden Jobs/Triggers: Menü "Extras/ Dezentrale Einstellungen" "DemoQuartzService/LetzteBearbeitungsdetails".