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 />
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