24.02.2013 Aufrufe

MODELLGETRIEBENE ARCHITEKTUR IN EINEM J2EE ... - OXSEED

MODELLGETRIEBENE ARCHITEKTUR IN EINEM J2EE ... - OXSEED

MODELLGETRIEBENE ARCHITEKTUR IN EINEM J2EE ... - OXSEED

MEHR ANZEIGEN
WENIGER ANZEIGEN

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)

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!