J2EE-Batchverarbeitung - Erklärung und Lösungsansätze

Batch-Verarbeitung ist auch im Zeitalter von J2EE ein Thema. Bisher ist das Thema Batchverarbeitung eng verbunden mit dem Mainframe. Dort gibt es ausgefeilte Batchsteuerungssysteme, die Batchjobs, meist Cobol-Programme zeitgesteuert ablaufen lassen.

Charakteristisch für diese Batchjobs sind die langen Verarbeitungszeiten, die periodisch und ohne manuelle Eingriffe ablaufen können. Beispielsweise werden hier umfangreiche Datenmengen für ausgefeilte Reports wie sie im Bereich des Rechnungswesens und des Controllings zu finden sind, verarbeitet.

Gestartet werden die Batchjobs im Unixumfeld über sogenannte Cronjobs. Innerhalb der Cronjobs kann dann die Häufigkeit und der Zeitpunkt der anfallenden Jobs definiert werden. Die Ausführungen können dann in der Regel in sogenannten Logging-Dateien nachvollzogen werden. Im Mainframeumfeld wird hier ein Tool namens OPC benutzt, um die Batchabläufe planen und steuern zu können. Da es sich bei den Jobs um komplexe Abläufe handelt, die ressourcenintensiv arbeiten, werden diese nachts durchgeführt um den Tagesbetrieb nicht zu beeinträchtigen. Für die Jobplanung heißt dies, das sogenannte Batchzeitfenster optimal auszunutzen.

Im J2EE-Umfeld ist der Bedarf für derartige Batchjobs ebenfalls gegeben. Die in diesem Umfeld halten dem Vergleich mit einem Steuerungssystem auf dem Host oftmals nicht stand. Hier wird oftmals Quick-and-Dirty mit Scriptsprachen oder wie oben erwähnt mit Cronjobs gearbeitet. Merkmale wie Re-entrant, automatisches Wiederaufsetzen eines Jobs im Falle von Fehlersituationen oder auch die begrenzten Zeitfenster werden hier im Vergleich zum Host nicht ausreichend berücksichtigt.

Es gibt im J2EE Umfeld kann der geneigte Programmierer natürlich auch auf Java zurückgreifen, um Jobs zu realisieren. Java bietet hier seit dem JDK 1.3 von Hause aus 2 Klassen, die man als Basis eines Jobsteuerungssystems nutzen kann: dies sind die Klassen java.uitl.Timer und java.util.TimerTask. Eine einfache zeitgesteuerte Verarbeitung läßt sich mit diesen Bordmitteln sicherleich realisieren. Was hier fehlt ist das Persistieren von Jobs, prioritätsgesteuerte Abläufe, Threadverarbeitung unter dem Einsatz von Threadpools etc..

Seit dem EJB 2.1 existiert im EJB-Umfeld die Möglichkeit zeitgesteuerte Verarbeitungen mit dem Timer Service implementieren zu können. Da der TimerService nur für EJB's verfügbar ist, muß also eine entsprechender J2EE-Container vorhanden sein. Wer auch bei vorhandenem J2EE Container nur mit POJO's arbeiten möchte bekommt hier ebenfalls ein Problem, da wie eben gesagt der TimerService nur für EJB's zur Verfügung steht.

Dies führt mich zum Quartz-Framework, welches sich in Batchkreisen großer Beliebtheit erfreut. Quartz ist zu 100 % in Java geschrieben und läuft als OpenSource-Projekt unter der Apache-Lizenz 2.0 - zu finden ist Quartz unter www.opensymphony.com. Quartz bietet viele Features an, mit der sich eine umfangreiche, ausgefreilte Batchsteuerung im J2EE-Umfeld realisieren lässt. Hierzu zählt neben der Definition von unterschiedlichsten Häufigkeiten und Frequenzen, angelehnt an die Unix-CronJobs auch solche Features wie zum Beispiel Clustering, Load Balancing und Persistenz von Jobs. Der Java-Programmierer bekommt hier einen umfangreichen Werkzeugkasten an die Hand mit dem sich komplexe Batchsteuerungen wie das oben aufgeführte System OPC auf dem Mainframe realisieren lassen.

 

zurück zur Technolounge