Projekte: "Order Traffic Shaper"

Nur ein kleines Projekt, aber mit interessanten Details (siehe "Java Versions-Downgrade").

In einer B2B-Anwendung mit Webservice-Schnittstelle sollte die Anzahl der prozessierten Aufträge pro Kunde pro Tag aus vertraglichen Gründen limitiert werden. Der Aufwand für die Implementierung wurde von einem Dienstleister auf 400 Stunden geschätzt.

Das war meiner Ansicht nach extrem großzügig bemessen - meine eigene Schätzung belief sich auf 100 Stunden. Ich bekam den Auftrag und habe die Anwendung in 110 Stunden implementiert, wobei in dieser Zahl schon die Bugfixes aus dem Systemtest enthalten waren, d.h. die Anwendung war bei Auslieferung fehlerfrei.

Implementierung

Konzept

Für die Implementierung des Traffic Shapers wurde eine interne FTP-Schnittstelle aufgetrennt. Die Frontend-Anwendung schreibt Aufträge in XML-Dateien und stellt sie auf einem FTP-Server ein. Die Backend-Anwendung holt die Dateien vom FTP-Server ab und löscht sie.

Die FTP-Schnittstelle war somit ein guter Punkt, um den Order Traffic Shaper einzuklinken.

Leser-Komponente

Der Leser liefert sequentiell die Datensätze aus den Dateien auf dem FTP-Server. Dabei ist sowohl transparent, dass die Datensätze auf Dateien aufgeteilt sind, also auch dass die Dateien auf einem FTP-Server liegen.

Shaper-Komponente

Der Shaper liest die Datensätze vom Leser und zählt die Aufträge pro Kunde. Solange der Schwellwert nicht erreicht ist werden die Datensätze mit dem Schreiber geschrieben und vom Leser gelöscht.

Datensätze, die über die Quote hinausgehen, werden schlicht nicht aus den Eingabedateien gelöscht und beim nächsten Lauf erneut berücksichtigt. Auf diese Weise konnten neuen Datenbank-Tabellen für die Pufferung eingespart werden.

Da sowohl Dateien als auch Datensätze chronologisch sortiert sind ist die FIFO-Verarbeitung sichergestellt.

Die klare Kapselung von Leser und Schreiber hat dazu geführt, dass die Shaper-Komponente praktisch nur Geschäftslogik enthält, gut zu verstehen ist, und auch mit Dummy-Lesern und -Schreibern einfach zu testen war.

Schreiber-Komponente

Der Schreiber speichert sequentiell Datensätze in Dateien auf dem FTP-Server. Dabei ist transparent, dass nach einer bestimmten Anzahl von Datensätzen eine neue Datei begonnen wird, und dass die Dateien auf einem FTP-Server liegen.

Java Versions-Downgrade

Die Anwendung wurde in Java 5 implementiert. Es stellte sich jedoch heraus, dass der Wirkbetrieb nur Java 1.4 unterstützt. Zum Glück konnte ich das Tool "Retroweaver" nutzen: Damit lassen sich Java 5-Anwendungen in Java 1.4-Anwendungen umwandeln. Dazu muss nicht einmal der Quelltext vorliegen!

Das "Retroweaving" klappte sogar mit den Hibernate-Anteilen der Anwendung (es war lesender Zugriff auf existierende Kundendaten erforderlich). Allerdings musste auf Annotations verzichtet und konventionelle Konfiguration per XML verwendet werden.