MODELLGETRIEBENE ARCHITEKTUR IN EINEM J2EE ... - OXSEED
MODELLGETRIEBENE ARCHITEKTUR IN EINEM J2EE ... - OXSEED
MODELLGETRIEBENE ARCHITEKTUR IN EINEM J2EE ... - OXSEED
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
objekte<br />
modellgetriebene architektur<br />
von joachim purgahn, gerhard renner,<br />
jochen reckziegel und jürgen f. krusch<br />
<strong>MODELLGETRIEBENE</strong><br />
<strong>ARCHITEKTUR</strong> <strong>IN</strong> E<strong>IN</strong>EM<br />
<strong>J2EE</strong>- UND COBOL-<br />
GROSSRECHNER-UMFELD<br />
Die Deutsche Bank Bauspar AG modernisiert ihr Bausparsystem durch die Integration<br />
eines COBOL-Großrechner-Systems in web-basierte Applikationen. Hierzu wurde ein<br />
eigener Architekturstil entwickelt, der sich an der „Model Driven Architecture” orientiert<br />
und der die heterogenen Plattformen durch die Codegenerierung aus einem gemeinsamen<br />
UML-Modell verbindet. Der Artikel vermittelt einen Überblick der Architektur<br />
und der eingesetzten Techniken.<br />
Das Kernsystem der Deutsche Bank Bauspar<br />
AG läuft auf einem IBM-Großrechner<br />
und basiert auf CICS (Customer Information<br />
Control System), COBOL und<br />
DB2. Es entstand in den 80er Jahren und<br />
wurde seitdem stetig weiterentwickelt.<br />
Dabei lag der Schwerpunkt auf der<br />
Implementierung neuer fachlicher Funktionen;<br />
die technische Basis blieb im<br />
Wesentlichen unberührt.<br />
Mit unserer IT-Strategie wurde vor zwei<br />
Jahren der Grundstein für die evolutionäre<br />
Weiterentwicklung des Systems und den<br />
dafür notwendigen sukzessiven Aufbau<br />
der methodischen und organisatorischen<br />
Grundlagen der Softwareentwicklung<br />
gelegt. Unter evolutionärer Weiterentwicklung<br />
wird dabei eine zukunftsorientierte,<br />
schrittweise Überarbeitung des<br />
Kernsystems verstanden mit dem Ziel, ein<br />
Höchstmaß an Prozessunterstützung für<br />
die internen Arbeitsabläufe zu bieten<br />
sowie die Offenheit für das Internet sicher<br />
zu stellen. Dabei haben unsere Kunden,<br />
Vertriebspartner und Mitarbeiter immer<br />
anspruchsvollere Bedürfnisse, denen wir<br />
mit umfangreichen Serviceleistungen gerecht<br />
werden wollen:<br />
■ Der Kunde möchte seinen Vertrag über<br />
das Internet einsehen, Formulare herunterladen<br />
und sich zu Vertragsoptimierungen<br />
beraten lassen.<br />
■ Die Vertriebspartner wünschen sich darüber<br />
hinaus weitreichendere Berechnungs-<br />
und Bestandsinformationen,<br />
die auch ohne Internetanschluss im<br />
mobilen Vertrieb zugänglich sein müssen.<br />
■ Im Backoffice möchten unsere<br />
Mitarbeiter nahtlos die Prozesse weiterführen,<br />
ohne Daten redundant eingeben<br />
zu müssen.<br />
Hierfür basiert unsere Anwendung für<br />
sämtliche Zielgruppen auf nahezu identischen<br />
Quellcode und dem gleichen<br />
Datenbestand. Durch diese enge Verzahnung<br />
der Zielgruppen und der einheitlichen<br />
technischen Lösung wird eine<br />
Reduzierung des Entwicklungsaufwands<br />
heute, aber auch zukünftig in der Wartung<br />
angestrebt. Allein unsere Vertriebspartner<br />
und Mitarbeiter stellen mehrere zehntausend<br />
Anwender dar.<br />
Das Umfeld der bestehenden Großrechner-Kernanwendung<br />
bedingt weitreichend<br />
die gewählte Softwarearchitektur.<br />
Das bauspar-spezifische Wissen liegt im<br />
Erfahrungsschatz der COBOL-Entwickler,<br />
die seit mehr als einem Jahrzehnt die<br />
Anwendung pflegen. Daher haben wir uns<br />
entschlossen, wesentliche Bausparfunktionen<br />
wieder in COBOL abzubilden und<br />
diese als Services über eine XML-<br />
Schnittstelle in ein web-basiertes <strong>J2EE</strong>-<br />
Umfeld zu integrieren. Die sukzessive<br />
Überführung auf die neue Softwarearchitektur<br />
impliziert eine enge Verbundenheit<br />
zum bestehenden Datenbankschema,<br />
da jede strukturelle Änderung in<br />
den Daten eine Anpassung der bestehenden<br />
Kernanwendung und damit hohe<br />
Aufwände bedeutet. Im neuen Bausparsystem<br />
verbleibt die Kernlogik auf dem<br />
Großrechner, die Präsentationslogik und<br />
die Steuerung langer Transaktionen werden<br />
innerhalb einer mehrschichtigen <strong>J2EE</strong>-<br />
Architektur mit „BEA WebLogic Server”<br />
(BEA Systems) unter dem Betriebssystem<br />
„Sun Solaris” (Sun Microsystems) verfügbar<br />
gemacht. Die verschiedenen Anwendergruppen<br />
– Kundenbetreuer, Vertriebspartner<br />
und Internet-Kunden – werden<br />
über eigene Web-Applikationen bedient.<br />
Ausgehend von der darunter liegenden<br />
EJB-Schicht wird die Anwendung einheitlich<br />
gehalten.<br />
die autoren<br />
Dr. Joachim Purgahn ist<br />
Softwareentwickler bei der Deutsche<br />
Bank Bauspar AG und im<br />
beschriebenen Projekt verantwortlich<br />
für das Framework und die<br />
Generierungsaspekte.<br />
Gerhard Renner ist Softwareentwickler<br />
bei der Deutsche Bank Bauspar AG und<br />
im Projekt verantwortlich für das<br />
Framework auf dem Großrechner.<br />
Jochen Reckziegel ist Leiter der<br />
Softwareentwicklung bei der Deutsche<br />
Bank Bauspar AG und technischer<br />
Projektleiter.<br />
Jürgen F. Krusch ist Leiter der<br />
Organisation bei der Deutsche Bank<br />
Bauspar AG und Gesamtprojektleiter.<br />
Der Architekturstil des<br />
neuen Bausparsystems<br />
Von Projektbeginn an wurde die Entwicklung<br />
eines eigenen Architekturstils in
objekte<br />
modellgetriebene architektur<br />
Abb. 1: Die Architekturschichten des neuen Bausparsystems<br />
im Überblick (die Abk. WFMS steht für „Workflow-<br />
Management-System”)<br />
die Planungen einbezogen und verfolgt. Hierzu gehörte neben dem<br />
Aufbau der schichtenartigen Softwarearchitektur (siehe Abb. 1) das<br />
Herausarbeiten eines Designstils mit einem UML-Modell, das weitgehend<br />
von technischen Aspekten und Implementierungsdetails abstrahiert<br />
und die Grundlage einer translativen Codegenerierung bilden sollte.<br />
Als Werkzeuge für diesen Ansatz wurden „ArcStyler” (Interactive<br />
Objects Software GmbH) und „Rational Rose” (Rational Software<br />
Corporation) ausgewählt (vgl. [IOS02]). Die Interactive Objects<br />
Software GmbH hat nach unseren Vorgaben in wenigen Wochen eine<br />
Technologie-Projektion erstellt, die von uns ausgebaut wurde und selbständig<br />
weiterentwickelt wird. Sie enthält die Generierungsschablonen<br />
(Templates) der zu generierenden Artefakte, in die Aufrufe von Jython-<br />
Methoden 1 ) eingebettet sind, über die auf die Modellinformationen<br />
zugegriffen wird. Für die Erstellung dieser Schablonen bietet der<br />
ArcStyler eine integrierte Entwicklungsumgebung mit Debugging-<br />
Möglichkeiten an. Die Schablonen definieren geschützte Bereiche, in<br />
denen sich der Anwendungsentwickler ausschließlich bewegen und<br />
Fachlogik einfügen darf, da nur diese Bereiche in nachfolgenden<br />
Generierungsläufen erhalten bleiben. Hierzu muss dem Generator<br />
immer der aktuelle Quellenstand zur Verfügung gestellt werden.<br />
Die Generierung kann für einzelne Modellklassen, für Pakete von<br />
Modell-Klassen oder für das ganze Modell aus dem CASE-Werkzeug<br />
heraus aufgerufen werden. Um die zur Generierung notwendigen<br />
Parameter einstellen zu können, wurden in Rational Rose neben den<br />
1 )Jython ist eine Java-Implementierung der<br />
Skriptsprache Python (siehe: http://www.jython.org).<br />
speziellen Eigenschaftsleisten des ArcStylers auch eigene<br />
eingefügt, deren Properties die Generierungsvorlagen<br />
verwenden. Daneben wird die<br />
Generierung auch durch den Einsatz von Stereotypen<br />
gesteuert.<br />
Während die Kernteile des Designmodells (Klassen,<br />
Methoden, Assoziationen etc.) relativ technologieunabhängig<br />
sind, werden die technologiespezifischen<br />
Einstellungen innerhalb der leicht austauschbaren<br />
Eigenschaftsleisten gepflegt, und die<br />
Generierungsschablonen enthalten die Projektion auf<br />
die technische Umgebung. Damit kann unser Stil als<br />
konform zum Standard der „Model Driven<br />
Architecture” der OMG angesehen werden (vgl.<br />
[Koc02]). Der Ansatz der modellbasierten Generierung<br />
konzentriert sich auf diejenigen Komponenten und<br />
Anwendungsteile, bei denen fachliche Breite zu erwarten<br />
ist und deren Menge mit der Zahl der<br />
Anwendungsfälle stetig anwächst. Unsere Darstellung<br />
trägt dem Rechnung und setzt deshalb bewusst den<br />
Schwerpunkt auf den stilbildenden modellgetriebenen<br />
Ansatz.<br />
Methodenaufruf:<br />
<br />
<br />
<br />
<br />
615<br />
010<br />
AFH002<br />
<br />
<br />
<br />
<br />
Methodenantwort:<br />
<br />
<br />
<br />
<br />
<br />
<br />
Testfiliale B<br />
615<br />
Test-Name<br />
10<br />
<br />
<br />
Eschborn<br />
6236<br />
<br />
Stuttgarterstr. 1<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Listing 1: Beispiel des zur Server-Großrechner-<br />
Kommunikation eingesetzten, auf XML basierenden<br />
Protokolls. Es wird die Methode „getStandort” des<br />
COBOL-Moduls „BL-User” aufgerufen.
objekte<br />
XML-Schnittstelle<br />
Die Architektur des neuen Bausparsystems<br />
ist geprägt von der Schnittstelle zwischen<br />
Server und Großrechner. Zur Kommunikation<br />
wird „MQSeries” von IBM als<br />
Message Queue eingesetzt, über das<br />
Remote Procedure Calls in XML-Form<br />
verschickt werden. Dabei wird sowohl ein<br />
asynchrones Kommunikationsmodell für<br />
schreibende Zugriffe als auch ein synchrones<br />
für lesende Zugriffe eingesetzt.<br />
Das auf XML basierende Protokoll (vgl.<br />
Listing 1) ist eine Eigenentwicklung, die<br />
vor der Etablierung des Simple Object<br />
Access Protocol (SOAP) in der Version 1.1<br />
bereits abgeschlossen war und auf die speziellen<br />
Anforderungen der Schnittstelle<br />
abgestimmt ist. Es ermöglicht den Aufruf<br />
mehrerer Methoden innerhalb einer Nachricht,<br />
womit das Setzen der CICS-<br />
Transaktionsklammern von der Serverseite<br />
aus ermöglicht wird. Wichtiger<br />
Bestandteil des Protokolls ist ein eigenes<br />
Typensystem mit Transformationsregeln<br />
zur Überführung in Java-Klassen und<br />
COBOL-Datentypen. Die Datenstrukturen,<br />
die als Parameter und Rückgabewerte<br />
über die Schnittstelle transportierbar<br />
sind, werden als UML-Klassen<br />
modelliert (siehe Abb. 2). Diese Schnittstellenklassen<br />
werden dem Generator mit<br />
dem Stereotyp «dtd» kenntlich gemacht.<br />
Sie werden unter der Programmiersprache<br />
Java auf Value Objects (vgl. [Sun02]) und<br />
unter COBOL auf Copy-Strecken abgebildet.<br />
Zur Steuerung der Transformation<br />
zwischen diesen Instanzformen und XML<br />
werden in Java je eine XML-Transfer-<br />
Klasse zuzüglich SAX-Handler (Simple<br />
API for XML) und Test-Klasse und in<br />
COBOL jeweils ein Modul generiert, welches<br />
das Navigieren über den Element-<br />
Baum ermöglicht. Zur Erzeugung dieser<br />
XML-Module wurde das Produkt<br />
„XML4cobol” der Maas High Tech<br />
Software GmbH (vgl. [Maa02]) vollständig<br />
in den Generierungsprozess des<br />
ArcStylers integriert. Alle aufgezählten<br />
modellgetriebene architektur<br />
Abb. 2: Beispielhaftes Klassendiagramm mit assoziierten Schnittstellenklassen. Die<br />
Umsetzung in XML ist in der Methodenantwort von Listing 1 enthalten.<br />
Artefakte sind komplett generierbar und<br />
bedürfen keiner Nachbearbeitung (siehe<br />
Tabelle 1).<br />
Frontend-Layer<br />
Als Thin Client fungiert stets ein Browser<br />
auf dem Rechner des Benutzers, der über<br />
HTTP-Anfragen die Frontend-Schicht der<br />
Anwendung anspricht. Diese liegt in mehreren<br />
Ausprägungen als Web-Applikation<br />
vor, die das bewährte Entwurfsmuster<br />
Model View Controller für Web-Architekturen<br />
(vgl. [Sun02]) implementieren.<br />
Dabei setzen wir das freie Framework<br />
Struts (vgl. [Apa02]) ein, das neben diversen<br />
Tag-Bibliotheken und Hilfsklassen die<br />
Möglichkeit bietet, Model und View lose<br />
zu koppeln, indem der Kontrollfluss des<br />
Controller-Servlets über eine XML-Datei<br />
konfiguriert werden kann. Die View-<br />
Elemente werden durch Java Server Pages<br />
(JSPs) umgesetzt. Das Model wird von<br />
sogenannten Action-Klassen umhüllt, die<br />
nach dem Command-Entwurfsmuster<br />
vom Controller-Servlet aufgerufen werden.<br />
Einer Action-Klasse können Form-<br />
Klassen zugeordnet sein, die mit HTML-<br />
Formularen korrespondieren und<br />
innerhalb der auszuführenden Aktion ausgewertet<br />
oder gefüllt werden können. Die<br />
Action-Klassen leiten die Anfragen über<br />
RMI (Remote Methode Invocation) an die<br />
EJB-Schicht (Business-Layer) weiter.<br />
Action- und Form-Klassen werden modelliert<br />
und generiert, wobei die Rahmen der<br />
modellierten Methoden gegebenenfalls<br />
noch ausprogrammiert werden. Wenn<br />
Daten über mehrere Kontrollflüsse hinweg<br />
vorzuhalten sind, werden sie im Kontext<br />
der Sitzung („HttpSession”) gespeichert.<br />
Eingaben in Formulare werden noch<br />
innerhalb der Frontend-Schicht geprüft.<br />
Business-Layer: Server<br />
Die Aufgaben der serverseitigen Business-<br />
Schicht sind das Ansprechen der Datenzugriffsschicht,<br />
der Aufruf von Großrechner-Diensten,<br />
die Steuerung langer<br />
Transaktionen über ein Workflow-Mana-<br />
gement-System (WFMS) und Prüfungen,<br />
zu denen der serverseitige Datenbestand<br />
heranzuziehen ist. Diese Funktionalität<br />
wird gemäß dem Session-Facade-Entwurfsmuster<br />
(vgl. [Sun02]) durch<br />
zustandslose Session-Beans gekapselt. Die<br />
Session-Beans werden über je eine Klasse<br />
im Modell gepflegt, in der nur die<br />
Geschäftsmethoden zu modellieren sind.<br />
Daraus wird die Bean-Klasse mit ihren<br />
Interfaces generiert, einschließlich Deployment-Deskriptoren,<br />
die über eigene Eigenschaftsleisten<br />
konfiguriert werden, und<br />
Test-Klassen. Die Entwicklungsarbeit konzentriert<br />
sich auf das Ausprogrammieren<br />
der Geschäfts- und ihrer Testmethoden.<br />
Da die Bestandsdaten weiterhin auf dem<br />
Großrechner-System gehalten werden, sind<br />
die Datenbestände unter Oracle auf der<br />
Serverseite überschaubar. Es handelt sich um<br />
Wiedervorlagedaten der Beratungsanwendung<br />
mit Informationen zu durchgeführten<br />
Beratungen oder auch um Benutzerdaten.<br />
Die Zugriffsschicht auf diese Daten teilt sich<br />
in eine logische und eine physische Schicht<br />
auf, die weiter unten beschrieben werden.<br />
Diesen wird eine JDBC-Verbindung (Java<br />
Database Connectivity) aus der Session-<br />
Bean heraus übergeben, über die der EJB-<br />
Container die Transaktionen steuert.<br />
Zugriffe auf das Großrechner-System<br />
werden an Stub-Klassen delegiert, die die<br />
Serialisierung der Anfragen in XML,<br />
deren Weiterleiten an die Message Queue<br />
über eine Kommunikationsschicht und –<br />
bei synchronen Zugriffen – die Deserialisierung<br />
der Antwort steuern. Diese Stub-<br />
Klassen werden für jede Business-Schicht-<br />
Komponente der Host-Seite (siehe<br />
nächsten Abschnitt) vollständig aus dem<br />
Designmodell generiert.<br />
Einige aufwändige Arbeitsabläufe im<br />
Bausparsystem erfordern lange Transaktionen,<br />
die über ein Workflow-System<br />
gesteuert werden. Kundenbetreuer müssen<br />
definierte Aktivitäten sukzessive abschließen,<br />
bevor ein komplexer Prozess nach<br />
mehreren Minuten beendet werden kann.<br />
Die im Kontext einer Aktivität bearbeiteten<br />
Formulardaten werden innerhalb des<br />
Workflow-Systems persistent gespeichert<br />
und erst mit dem Abschluss der Aktivität<br />
in Änderungsfunktionen umgesetzt, die als<br />
XML-Nachricht an das Großrechnersystem<br />
gesendet und innerhalb einer<br />
Transaktion abgearbeitet werden. Die<br />
Antwort erfolgt asynchron und triggert<br />
bei Erfolg den Abschluss der Aktivität.<br />
Dabei wird ein optimistisches Sperrkonzept<br />
verfolgt. Die Value Objects tragen<br />
den Zeitstempel ihres Lesens mit sich,
objekte<br />
modellgetriebene architektur<br />
Abb. 3: Die Modell-Klasse „BL-User”, die auf ein COBOL-Modul abgebildet wird<br />
und eine Änderung der Bestandsdaten<br />
wird nur zugelassen, wenn dieser Zeitstempel<br />
jünger ist als derjenige der letzten<br />
Datensatzänderung. Beim Workflow-<br />
Management-System greifen wir auf eine<br />
Eigenentwicklung zurück, die sich in unserem<br />
automatisierten Dokumenten-Management-System<br />
bewährt hat.<br />
Business-Layer: Host<br />
Die Programme dieser Business-Schicht bieten<br />
der Serverseite ihre Dienste mit XMLfähigen<br />
Methodenaufrufen an und steuern<br />
die für deren Abarbeitung erforderlichen<br />
Abläufe einschließlich dem Aufbau der<br />
XML-Rückantworten. Dabei werden vorrangig<br />
Methoden der logischen Schicht aufgerufen,<br />
aber auch Methoden der Business-<br />
Schicht können herangezogen werden und<br />
– falls erforderlich – werden Methoden<br />
innerhalb des gleichen Moduls benutzt.<br />
Methoden der Module der Business-<br />
Schicht und auch der logischen Schicht<br />
werden grundsätzlich über einen eigens<br />
entwickelten Name-Service angesprochen,<br />
der die Namen der Methoden in Aufrufe<br />
von COBOL-Programmen umsetzen<br />
kann. Der Name-Service wird beim CICS-<br />
Start oder auf Anforderung durch einen<br />
Rundruf an alle COBOL-Module, welche<br />
die von ihnen angebotenen Methoden mitteilen,<br />
initialisiert. Die Methoden selbst<br />
sind innerhalb der Module als eigenständige<br />
Unterprogramme (sogenannte Nested<br />
Programs) implementiert. Dieses Verfahren<br />
ermöglicht den geschachtelten Aufruf<br />
von Methoden innerhalb eines<br />
Moduls. Außerdem löst es das Problem<br />
des reflektiven Aufrufs, wenn die Methoden<br />
über die XML-Schnittstelle anhand<br />
ihres Namens aufrufbar sein müssen.<br />
Die Nutzdaten werden bei diesen<br />
Methodenaufrufen über Zeiger auf XML-<br />
Bäume weitergeleitet, die mit XML-<br />
Modulen verwaltet werden können. Die<br />
XML-Module dienen hierbei als dynamische<br />
Datencontainer und können mit<br />
Copy-Strecken oder Character-Feldern mit<br />
XML-Inhalt gefüllt werden. Für die<br />
COBOL-Module wurde ein Mechanismus<br />
zur Ausnahmebehandlung implementiert.<br />
Bei einem Fehlerfall sorgt die klammernde<br />
Methode der Business-Schicht dafür, dass<br />
die Ausnahme mit ihrem Aufruf-Stack in<br />
die XML-Rückantwort gestellt wird.<br />
Da die Module prozedural arbeiten,<br />
werden sie als Klassen ohne Attribute<br />
modelliert (siehe Abb. 3). Ihre Methoden<br />
werden auf Nested Programs abgebildet<br />
und ein Überschreiben ist nicht erlaubt.<br />
Als Übergabeparameter und Rückgabewerte<br />
sind primitive Datenklassen und<br />
Schnittstellenklassen möglich. Die Modellklassen<br />
werden über den Stereotyp «host»<br />
als COBOL-Module kenntlich gemacht.<br />
Zur Pflege der auf acht Stellen begrenzten<br />
Modulnamen setzen wir eine vierstellige<br />
Kennung auf der Ebene eines Modell-<br />
Pakets ein und fügen dieser eine vierstellige<br />
Nummer hinzu, die wir auf übersichtliche<br />
Weise für alle Module einer Schicht im<br />
Modell pflegen. Für jede Methode wird<br />
eine Copy-Strecke generiert, über die mit<br />
dem Name-Service kommuniziert wird. In<br />
Architektureinheit Anteil generierter Codezeilen<br />
XML-Schnittstelle 100 %<br />
Frontend-Layer 40 %<br />
Business-Layer Server 60 %<br />
Business-Layer Host 70 %<br />
Logical-Layer Server 70 %<br />
Logical-Layer Host 60 %<br />
Physical-Layer Server 90 %<br />
Physical-Layer Host 90 %<br />
Tabelle 1: Die relativen Anteile generierter Zeilen einschließlich Kommentaren für<br />
die anwendungsfallabhängigen Codeteile der einzelnen Architekturschichten und der<br />
Artefakte der Schnittstellenklassen. Für die Frontend-Schicht wurden nur die Java-<br />
Klassen, nicht aber die JSP-Seiten berücksichtigt.<br />
ihren achtstelligen Namen geht eine eindeutige<br />
Kennung des Modulnamens und<br />
ihr dreistelliger Stereotyp ein. Auf Methodenebene<br />
werden die aufgerufenen<br />
Fremdmethoden im Modell gepflegt, die<br />
der Generator über Abhängigkeitsbeziehungen<br />
auflösen kann. Auf diese Weise<br />
gelingt es, umfangreiche Teile der Module<br />
zu generieren, denn der zum Bestücken<br />
von Methoden-Schnittstellen unter<br />
COBOL sehr hohe Aufwand ist vollständig<br />
aus dem Modell ableitbar (siehe<br />
Tabelle 1). Die Fachlogik wird innerhalb<br />
der Nested Programs ausprogrammiert.<br />
Logical-Layer<br />
Die logische Datenzugriffsschicht ist als<br />
Adapter der physischen Zugriffsschicht<br />
implementiert und erlaubt es, mit Value<br />
Objects unter Java oder mit XML-Copy-<br />
Strecken unter COBOL auf die Datenbank<br />
zuzugreifen. Da auf Serverseite das<br />
Datenmodell das Klassenmodell der Value<br />
Objects nahezu abbildet, beschränkt sich<br />
deren Aufgabe im Wesentlichen auf das<br />
Aufsammeln assoziierter Instanzen. Hostseitig<br />
bildet die logische Schicht das<br />
gewachsene Datenmodell des Kernsystems<br />
auf die neuen Datenstrukturen ab und entkoppelt<br />
die darüber liegende Business-<br />
Schicht von zukünftigen Überarbeitungen<br />
des Datenbankschemas.<br />
Serverseitig wird die logische Schicht<br />
durch Java-Klassen, host-seitig durch<br />
COBOL-Module realisiert, die jeweils aus<br />
Modell-Klassen, in denen die Schnittstellen<br />
definiert werden, generierbar sind.<br />
Lediglich die Logik der Methoden ist zu<br />
programmieren.<br />
Die obigen Ausführungen zur Generierung<br />
von COBOL-Modulen der<br />
Business-Schicht treffen in gleicher Weise<br />
auf diejenigen der logischen Schicht zu.<br />
Der Generator verwendet sogar dieselbe<br />
Generierungsschablonen.<br />
Physical-Layer: Server<br />
Die physische Datenzugriffsschicht realisiert<br />
die Zugriffe auf die Datenbank,<br />
wobei auf der Serverseite über JDBC auf<br />
Oracle zugegriffen wird. Das Datenmodell<br />
ist serverseitig nahezu isomorph zum<br />
Modell der Value Objects. Die Standardzugriffe<br />
auf die Datenbanktabellen werden<br />
mit Data Access Objects (vgl. [Sun02]) zur<br />
Verfügung gestellt, die mit Value Objects<br />
korrespondieren. Sie werden daher nicht<br />
eigens modelliert, sondern sind durch<br />
zusätzliche Modellparameter aus den<br />
Schnittstellenklassen ableitbar. So wird im<br />
Modell definiert, ob eine Schnittstellen
objekte<br />
modellgetriebene architektur<br />
Abb. 4: Modellierung des COBOL-Moduls „UDPLA120” der physischen Schicht über die Klasse „PL-Bausparer”. Die firmenspezifischen<br />
Eigenschaftsleisten unserer Technologie-Projektion sind rot markiert.<br />
klasse überhaupt persistent ist, welche<br />
Attribute Primärschlüsselbestandteile<br />
sind, ob assoziierte Klassen in einer<br />
Tabelle zusammengezogen werden und ob<br />
die Datenbanktypen von einer vordefinierten<br />
Typenabbildung abweichen sollen. Die<br />
Data Access Objects und die zugehörigen<br />
DDL-Skripte (Data Definition Language)<br />
werden vollständig aus dem Modell generiert.<br />
Komplexere Anfragen werden in<br />
eigenen Klassen gekapselt, die von Hand<br />
programmiert werden.<br />
Physical Layer: Host<br />
Die physische Schicht der Host-Seite steuert<br />
die Zugriffe auf die operativen Bestandsdaten<br />
des Kernsystems unter DB2.<br />
Sie besteht aus COBOL-Modulen, die<br />
jeweils einer Tabelle zugeordnet sind.<br />
Diese Module stellen die Zugriffsmethoden<br />
auf die Tabellen bereit, deren sich<br />
die logische Schicht bedienen kann; der<br />
Datenaustausch erfolgt dabei über Copy-<br />
Strecken.<br />
Modellierung und programmatische<br />
Umsetzung unterscheiden sich von den<br />
bisher besprochenen Modularten. Zusätzlich<br />
zu den Modul-Klassen wird je eine<br />
Excel-Datei angelegt, in der feldbezogene<br />
Transformationsregeln und Zusatzinformationen<br />
gepflegt werden, die in die<br />
Generierung der Datenzugriffe eingehen.<br />
Aus Gründen der Übersichtlichkeit ziehen<br />
wir diese Technik der Pflege der Feldinformationen<br />
über Klassenattribute vor.<br />
Der Generator erkennt einen Satz von<br />
Standard-Zugriffsmethoden anhand ihres<br />
Namens („read”, „readNext”, „insert”,<br />
„update” und „delete”; siehe Abb. 4) und<br />
generiert sie mit den Informationen der<br />
zugeordneten Excel-Datei vollständig. Für<br />
andere Methoden werden die Rahmen<br />
erzeugt, in die spezielle Datenzugriffe individuell<br />
einzufügen sind.<br />
Je Modul wird eine Copy-Strecke generiert,<br />
die allein als Übergabe- und<br />
Rückgabeparameter der Methoden erlaubt<br />
ist. Sie repräsentiert eine Tabellenzeile,<br />
wobei die Transformationen in das<br />
Typensystem der XML-Schnittstelle berücksichtigt<br />
sind.<br />
Die Architektur des<br />
Beratungsclients<br />
Die Beratungsanwendung wird nicht nur<br />
zentral als Web-Anwendung bereitgestellt,<br />
sondern auch als Client-Anwendung, die<br />
ohne Kontakt zum Server lauffähig sein<br />
kann (siehe Abb. 5). Dieser Beratungsclient<br />
wird mit „Jakarta Tomcat” (Apache<br />
Software Foundation; siehe http://jakarta.apache.org/tomcat)<br />
als Web-Container<br />
auf den Zielrechnern ausgerollt und setzt<br />
die freie Java-Datenbank „HSQL” (vgl.<br />
[hsq02]) ein. Im Online-Modus greift sie<br />
auf die Geschäftslogik der Server-Anwendung<br />
zu. Dazu werden das XML-Protokoll<br />
der Server-Großrechner-Schnittstelle und<br />
HTTP als Transport-Protokoll eingesetzt.<br />
Die aufgerufene Geschäftslogik wird damit<br />
als Web-Service verfügbar. Serverseitig<br />
nimmt ein Servlet den HTTP-Post-Aufruf<br />
an und leitet dessen Inhalt an eine Session-<br />
Bean weiter, die ihn interpretiert und in<br />
einen Methodenaufruf umsetzt.<br />
Das Frontend der Web-Anwendung<br />
wird im Client vollständig wiederverwendet;<br />
die Unterschiede liegen allein in der<br />
Business-Schicht. Hierzu wird auf deren<br />
Komponenten über eine abstrakte Fabrik<br />
(vgl. [Gam95]) zugegriffen, die je nach<br />
Anwendungsmodus drei Arten von<br />
Klassen erzeugt, die alle das Business-<br />
Interface der korrespondierenden Session-<br />
Bean implementieren:<br />
■ eine Proxy-Klasse, welche die Aufrufe<br />
über RMI an die Session Bean weiterleitet<br />
(im Fall der Server-Anwendung),<br />
■ eine Java-Klasse, die die Geschäftslogik<br />
direkt anstößt (im Offline-<br />
Modus der Client-Anwendung) und<br />
■ eine Proxy-Klasse, die die Aufrufe an<br />
eine Stub-Klasse weiterleitet, die diese<br />
in XML-Form umsetzt und über<br />
HTTP als Transport-Protokoll an die<br />
Serveranwendung weiterleitet (im Fall<br />
des Online-Modus der Client-Anwendung).<br />
Jede dieser Klassen kann vollständig aus<br />
der Modell-Klasse der Business-Layer-<br />
Komponente generiert werden – mit<br />
Ausnahme der Java-Klassen, die lokal verfügbare<br />
Geschäftslogik aufrufen, da hier<br />
nur die Methodenrahmen aus dem Modell<br />
ableitbar sind. Ob eine Geschäftsmethode<br />
entfernt über XML aufrufbar sein soll,<br />
wird im Modell eingestellt. Die Zugriffe<br />
auf die lokale Datenbank werden wie in<br />
der Server-Anwendung über eine logische<br />
Schicht gesteuert, die einer physischen vorgeschaltet<br />
ist. Dabei wird ein möglichst<br />
hoher Grad an Wiederverwendung der<br />
Quellen der Serveranwendung angstrebt.<br />
Schreibende Zugriffe auf Bestandsdaten<br />
sind in der Client-Anwendung nur im Zuge<br />
eines Herunterladens vom Server zulässig.<br />
Die Wiedervorlagedaten eines Benutzers<br />
werden mit dem Legitimieren an der<br />
Server-Anwendung repliziert, wobei die<br />
Client-Anwendung die Datenhoheit trägt.
Bemerkungen zum<br />
Entwicklungsprozess<br />
Das Bausparsystem wird innerhalb eines<br />
Rational Unified Process (vgl. [Kru98])<br />
iterativ entwickelt. Einer Analysephase<br />
schließt sich innerhalb der Iterationen eine<br />
Designphase an, die von der Implementierung<br />
nicht scharf abzutrennen ist. Das<br />
Klassenmodell der Anwendungsfälle wird<br />
entworfen und sukzessive mit den<br />
Konfigurationsparametern für die Codegenerierung<br />
versehen. Parallel dazu werden<br />
die ersten Komponenten generiert und<br />
getestet. Für den Anwendungsentwickler<br />
bedeutet das Arbeiten in dieser Umgebung<br />
neben dem Implementieren auch stets<br />
Bearbeiten des Modells und Generieren<br />
der betroffenen Artefakte.<br />
Das UML-Modell und die Generierungsschablonen<br />
werden mit den Java-<br />
Quellen unter dem Concurrent Versions<br />
System (CVS) versioniert. Die COBOL-<br />
Quellen werden auf dem Großrechner in<br />
einem eigenen Verwaltungssystem gepflegt<br />
und bearbeitet. Modellierung, Generierung<br />
und Java-Entwicklung werden auf<br />
Arbeitsplatzrechnern unter Windows NT<br />
durchgeführt. Der Generator arbeitet<br />
dabei immer auf dem aktuellen Stand der<br />
Java-Quellen, wodurch die Übernahme<br />
der geschützten Bereiche in neue Generate<br />
sichergestellt ist. Um die COBOL-Quellen<br />
automatisiert erzeugen zu können, wurde<br />
ein FTP-Client in den Generator integriert,<br />
der für jedes Generat die aktuelle Quelle<br />
aus der Großrechnerumgebung transferiert<br />
und im Falle einer Aktualisierung die<br />
geänderte Quelle wieder zurücküberträgt.<br />
Während die Konsistenz und die<br />
Lauffähigkeit des Quellcodes nächtlich<br />
durch automatisiertes Übersetzen und<br />
objekte<br />
modellgetriebene architektur<br />
Abb. 5: Übersicht der verschiedenen Versionen und Modi der Beratungsanwendung<br />
und deren Datenhaltung<br />
Packen der Java-Quellen und durch<br />
Protokollieren der Entwicklertests überprüft<br />
werden, setzen wir in der Konsistenz<br />
von Modell, Generierungsschablonen und<br />
Quellen auf die Disziplin des Entwicklerteams<br />
und führen Generierungen des gesamten<br />
Modells nur vor definierten<br />
Release-Ständen durch.<br />
Fazit<br />
Die beschriebene Architektur des neuen<br />
Bausparsystems wurde anhand eines<br />
Prototyps, der einem Last- und Performanztest<br />
unterzogen wurde, erfolgreich<br />
erprobt. Seit Mitte 2001 hat der modellgetriebene<br />
Ansatz seine hohe Effizienz innerhalb<br />
der ersten Iterationsphasen unter<br />
Beweis gestellt; die ersten Anwendungsteile<br />
gehen in diesem Jahr in Produktion.<br />
Durch die Konzentration auf die<br />
Umsetzung der Fachlogik ereichen wir<br />
eine hohe Produktivität, die zusätzliche<br />
Aufwände zur Administration des relativ<br />
komplexen Entwicklungsprozesses um ein<br />
Vielfaches überwiegt. Als besonders hilfreich<br />
hat sich die Verbindung unserer<br />
heterogenen Systemlandschaft über die<br />
Codegenerierung aus einem gemeinsamen<br />
Modell herausgestellt, wodurch nicht nur<br />
COBOL- und Java-Entwicklung stets konsistent<br />
gehalten werden, sondern auch das<br />
wichtige einheitliche Verständnis der<br />
Architektur bei den verschiedenen Entwicklergruppen<br />
herbeigeführt und dadurch<br />
die Zusammenarbeit entscheidend<br />
verbessert wurde. Indem wir die Pflege der<br />
Generierungsschablonen in den Entwicklungsprozess<br />
einbeziehen, beugen wir der<br />
möglichen Gefahr vor, Design und<br />
Implementierung zu stark an ihnen auszurichten<br />
und daran zu binden.<br />
Durch das weitgehende Freihalten des<br />
Kernmodells von technischen Details, die<br />
in den Generierungsschablonen gepflegt<br />
und in speziellen Eigenschaftsleisten konfiguriert<br />
werden, erreichen wir die<br />
Offenheit, auf die in steter Weiterentwicklung<br />
begriffene Technologie-Landschaft<br />
flexibel eingehen zu können. Diese Offenheit<br />
kommt insbesondere an den<br />
Schnittstellen zwischen den Plattformen<br />
und zu Datenbanken zum Tragen, da hier<br />
die programmatische Umsetzung umfassend<br />
generiert wird. So sind Änderungen<br />
am Transport-Protokoll – z. B. eine Umstellung<br />
auf SOAP – durchaus möglich, da<br />
nur wenige Frameworkklassen und Generierungsschablonen<br />
umzustellen wären<br />
und der ständig anwachsende, abhängige<br />
Quellcode vollständig generiert wird.<br />
Mit unserem Architekturstil und seiner<br />
Orientierung an der Model Driven Architecture<br />
haben wir eine wichtige<br />
Weichenstellung für die Weiterentwicklung<br />
unserer unternehmenskritischen DV-<br />
Systeme gelegt und glauben, ein interessantes<br />
Beispiel der Integration eines<br />
COBOL-Großrechner-Systems in webbasierte<br />
Anwendungen zu bieten. ■<br />
Literatur & Links<br />
[Apa02] Apache Software Foundation,<br />
Struts: Open source framework for building<br />
Web applications (siehe: http://jakarta.<br />
apache.org/struts)<br />
[Gam95] E. Gamma, R. Helm, R. Johnson,<br />
J. Vlissides, Design Patterns, Addison-<br />
Wesley 1995<br />
[hsq02] The hsqldb Development Group,<br />
HSQL database engine (siehe http://hsqldb.<br />
sourceforge.net)<br />
[IOS02] Interactive Objects Software<br />
GmbH, ArcStyler: Architectural IDE for<br />
Model Driven Architecture (siehe: http://<br />
www.io-software.com)<br />
[Koc02] T. Koch, „Model Driven<br />
Architecture”: eine Einführung, in:<br />
OBJEKTspektrum 2/2002<br />
[Kru98] P. Kruchten, The Rational Unified<br />
Process, John Wiley & Sons 1998<br />
[Maa02] Maas High Tech Software GmbH,<br />
XML4cobol: Werkzeug zur Generierung<br />
von COBOL-Modulen, die XML auf<br />
COBOL-Strukturen abbilden (siehe: http://<br />
xml4cobol.com)<br />
[Sun02] Sun Microsystems, Sun Java<br />
Center <strong>J2EE</strong> Patterns (siehe http://developer.<br />
java.sun.com/developer/technicalArticles/<br />
<strong>J2EE</strong>/patterns)