Ausnahmeregelungen

IFS-Logo Diese Seite ist ein Teil der IsyFact-Standards. Alle Inhalte der Seite, insbesondere Texte und Grafiken, sind urheberrechtlich geschützt. Alle urheberrechtlichen Nutzungs- und Verwertungsrechte liegen beim Bundesverwaltungsamt.

Creative Commons Namensnennung Die Nutzung ist unter den Lizenzbedingungen der Creative Commons Namensnennung 4.0 International gestattet.

In bestimmten Situationen, zum Beispiel bei der Verarbeitung extrem großer Datenmengen, kann der Fall auftreten, dass die Implementierung eines Batches in Java nicht sinnvoll ist. In solchen Fällen muss dann eine Sonderlösung, wie zum Beispiel ein SQL-Skript oder ein Shell-Skript, gefunden werden.

Die Entscheidung, ob in einem solchen Einzelfall eine Sonderlösung gewählt werden kann, muss zwingend in einer Architekturentscheidung erfolgen. Eine solche Abweichung von der Referenzarchitektur muss im Systementwurf in der Liste der Abweichungen aufgeführt und begründet werden. Dabei muss die Abwägung getroffen werden zwischen der Einhaltung der nicht-funktionalen Anforderungen und der Verringerung der Wartbarkeit durch mehrfach implementierte Funktionalität.

Wichtig ist, dass die einheitliche Außenschnittstelle der Batches erhalten bleibt. Anhand der übergebenen Parameter, Return Codes, Daten im Log darf für Nutzende des Batches nicht erkennbar sein, dass dieser in einer anderen Technologie umgesetzt ist.

Die Dokumentation der abweichenden Batch-Implementierung erfolgt im Systementwurf und wird daraus in die Systemdokumentation übernommen.

1. Shell-Batches

Als Shell-Batch wird ein Shell-Skript bezeichnet, das Stapelverarbeitungsbefehle ausführt, die direkt in diesem Skript definiert sind. Reguläre Batches werden meist ebenfalls über ein Shell-Skript gestartet, ihre Logik ist aber in Java programmiert. Das Skript startet also nur das zugehörige Programm.

Der Vorteil von Shell-Batches ist, dass sie etwas schlanker sind und daher auch schneller entwickelt werden können. Komplexe Geschäftslogik sollte aber immer als dediziertes IT-System umgesetzt werden, da diese auf lange Sicht besser wartbar sind.

Ein Beispiel für Shell-Batches sind einmalige SQL-Migrationen. Das Shell-Skript baut dabei eine Verbindung mit dem Datenbank-Server auf und führt eine SQL-Datei aus.

Es gibt aber auch Systeme, die im regulären Wirkbetrieb regelmäßig Shell-Batches ausführen, beispielsweise um Datenbankabzüge für statistische Auswertungen zu erstellen.

Ein Shell-Batch besteht aus einem Skript und gegebenenfalls weiteren Dateien:

  • Property-Dateien für Konfigurationen, wie beispielsweise die zu verwendende Datenbankverbindung,

  • SQL-Skripte, die vom Shell-Batch ausgeführt werden,

  • weitere Skripte, die vom Shell-Batch ausgeführt werden.

Ein Shell-Batch muss folgender Namenskonvention folgen:

Tabelle 1. Name des Skripts
Name des Skripts

Schema

<name-des-batches>.sh

Beispiele

loeschfrist-pruefen.sh
import-bhknz-liste.sh

Die Dateien sollten entweder in einen eigenen Ordner unter /opt abgelegt werden oder – falls der Batch Teil eines bestehenden Batch-Projekts ist – in den vorhandenen Batch-Ordner des Systems deployt werden.

In letzterem Fall sollte das Deployment über das RPM des Batch-Projekts erfolgen. Andernfalls ist – insbesondere bei nur einmaligen auszuführenden Batches – ein manuelles Deployment möglich.

Shell-Batches müssen immer nach dem folgenden Schema aufgebaut werden:

  • Beschreibungskommentar mit Parametern und Return Codes,

  • Automatisches Ermitteln des Home-Verzeichnisses des Batches,

  • Einlesen der Übergabe-Parameter,

  • Einlesen notwendiger Properties aus den Konfigurationsdateien,

  • Ausführen der eigentlichen Batchlogik.

Der Batch gibt zudem die Startzeit, Endzeit und Laufzeit aus. Es müssen dokumentierte Return-Codes für erwartete Fehlerfälle verwendet werden, um die Fehleranalyse zu vereinfachen.

Folgende Rahmenbedingungen sind bei der Umsetzung einzuhalten:

  • Das Home-Verzeichnis (<HOME>), in dem der Shell-Batch liegt, wird automatisiert ermittelt und wird nicht als Parameter übergeben.

  • Das Log-Verzeichnis muss ein optionaler Parameter sein (und damit als letzter Eingabeparameter definiert sein). Bei Nichtangabe wird der Pfad <HOME>/log/ verwendet.

  • Datenbankverbindungsangaben müssen in einer Konfigurationsdatei (<HOME>/etc/jpa.properties) stehen und dürfen nicht als Parameter übergeben werden.

  • SQL-Skripte, die vom Shell-Batch verwendet werden, müssen im Verzeichnis <HOME>/sql/ abgelegt werden.

  • Weitere Skripte, die vom Shell-Batch aufgerufen werden, müssen unter <HOME>/sh/ abgelegt werden.

Ein funktionsfähiges Template für einen Shell-Batch ist Teil der Bibliothek isy-batchrahmen. Um es ausführen zu können, muss eine funktionierende Datenbankverbindung auf ein leeres Schema in der jpa.properties Datei angegeben werden.