Anwendungen aus Modellen Michael Löwe Forschungskolloquium der FHDW,Hannover Hannover, 21. Februar 2005 Inhalt Modell basierte Anwendungsentwicklung (MbA) Die Standardarchitektur (Persistenzgenerator) – – – Das Modell – – – – – – – Die Datenbank Der Applikationsserver Der View Einfache, Mengen-wertige, indizierte und transiente Attribute Server und Connections Observer Active Objects Singletons Exceptions Visitoren Entwicklungsmöglichkeiten 21. Februar 2005 FHDW-MDA 2 MbA Ein zentrales fachliches Modell Ableitung der Architektur aus dem Modell Konsistente Umsetzung des Modells – in alle beteiligten Komponenten – über alle beteiligte Schnittstellen Aber: Details in den speziellen Komponenten und Sprachen – Adäquate Benutzeroberflächen – Nutzung vorhandener Entwicklungswerkzeuge – Performanzverbesserung in der Datenbank Kein Round-Trip aber ein „iterativer Wasserfall“ 21. Februar 2005 FHDW-MDA 3 Die Standardarchitektur Klient Klient Klient Klient Single-User-Anwendung: Java Offene Schnittstelle: XML-RPC AnwendungsServer Multi-User-Anwendung: Java „Geschlossene“ Schnittstelle: JDBC Datenbank 21. Februar 2005 Relationale Datenbank: Oracle FHDW-MDA 4 Die Datenbank Prozedurale Schnittstelle für jede Klasse (PL/SQL) Eine Tabelle pro Vererbungshierarchie Konsistenz der Tabelleninhalte zum Modell Meta-Tabellen für Klassen und Vererbung 21. Februar 2005 FHDW-MDA 5 Der Anwendungsserver Web-Server (XML-RPC) Java-Anwendung Mehrbenutzerfähigkeit durch Multi-Threading Objekt-weises Nachladen aus der Datenbank nach Bedarf Cache Management Zweifache Indirektion JDBC-Facaden Oracle-Thin-Client Derzeit eine Verbindung 21. Februar 2005 FHDW-MDA 6 Der View Standardoberfläche (Swing, SWT, etc.) Server Stubs ohne Cache Server Connections (Refresh Threads) 21. Februar 2005 Objekt-weises Nachladen vom Server nach Bedarf Dynamische Verbindung (Garbage Collector beim Server) FHDW-MDA 7 Das Modell Klassen, abstrakte Klassen und Interfaces Spezielle Server- und Exception-Klassen Einfach-Vererbung und Mehrfach-Implementierung Basistypen: Integer und String Einfache, mengen-wertige, indizierte und transiente Attribute (Abstrakte) Operationen mit – Deklaration von Exceptions – Einfachen und Mengen-wertigen Rückgabetypen 21. Februar 2005 FHDW-MDA 8 Klassen und Attribute Konkrete Klasse. Erzeugt statische Factorymodel model1 { Methode mit allen Basisattributen class MyClass { Bzgl. Spezialisierung maximale Klasse. Integer integer; Erzeugt statische Suche nach Objektidentität String string; Attribute zu Basistypen. indexed Integer iIndex; indexed String sIndex; Indizierte Attribute nur zu Basistypen. transient Integer tInteger; Erzeugt statische Suchfunktionen MyClass myClass; Transiente Attribute. MyClass ** myClasses; Werden nicht in Datenbank abgelegt } Mengen-wertige Attribute. } In speziellen Collections verwaltet: „add“, „iterator“ und „remove“ über Iterator 21. Februar 2005 FHDW-MDA 9 Server und Connections model model1 { class MyClass { Integer integer; ..... model model1 { server MyClass { Integer integer; ..... model model1 { server Server { ...} server MyClass { Integer integer; ..... 21. Februar 2005 Server Klasse. Alle Objekte dieser Klassen können mit ihren Operationen Schnittstellenobjekte zum Klient sein. Erhalten zwei Methoden „hasChanged“ für das „Refresh“ des Klienten und „initialize“ zur Initialisierung nach der Erzeugung. Server Klasse Server. Die Objekte sind mit ihren Operationen die primäre Schnittstelle zum Anwendungsserver. Erhalten implizit die Attribute „user“ und „password“. FHDW-MDA 10 Observer class Observer { observe Observee observee; } Class Observee { ObsInterface * Subj Integer contents; update() } Observer SubjInterface register(ObsInterface obs) deregister(ObsInterface obs) update() Observee ObserverObservee observee_update() Automatische Registrierung durch „setter“ bzw. „add“ und „remove“ bei ** 21. Februar 2005 FHDW-MDA 11 Active Objects model model4 { Invoker CMD server Server{ handleResult(CMD cmd) execute() MyClass myClass; handleException(CMD cmd, Exception exc) } MyInter active interface MyInter{ myOp1() void myOp1(); myOp1(Invoker invoker) void myOp2(); myOp2() } myOp2(Invoker invoker) class MyClass implements MyInter{ * MyInterCMD MyClass Server } asynchron } MyOp1CMD 21. Februar 2005 MyOp2CMD FHDW-MDA receiver 12 Singletons model model5 { server Server{ MyClass myClass; } active interface MyInter{ void myOp1(); void myOp2(); } singleton class MyClass implements MyInter{ } } 21. Februar 2005 Singleton Klasse MyClass. Keine Suche nach Objektidentität mehr. Keine Factory-Methode mehr. Dafür: Beschaffung des Singleton-Objekts mit Aufruf einer Initialisierungsoperation bei der Instantiierung. FHDW-MDA 13 Exceptions Operationen können beliebige Exceptions „schmeißen“ (ggf. Kennzeichnung mit extern). Operationen in Servern können nur interne Exceptions „schmeißen“. Interne Exceptions werden in der Datenbank abgelegt. Interne Exceptions werden zum View übertragen. Syntax: exception myException {...} statt class myException {...} 21. Februar 2005 FHDW-MDA 14 Visitoren model model7 { MyClass2Visitor (3 x handle) server Server{} class MyClass1{} class MyClass2 extends MyClass1 {} MyClass1Visitor (3 x handle) class MyClass3 extends MyClass1 {} class MyClass4 extends MyClass2 {} MyInt2Visitor (2 x handle) class MyClass5 extends MyClass2 {} interface MyInt1{} interface MyInt2 extends MyInt1{} MyInt1Visitor (1 x handle) class MyClass6 implements MyInt1 {} class MyClass7 implements MyInt2 {} class MyClass8 implements MyInt2 {} } Standard-„accept“-Methoden 21. Februar 2005 FHDW-MDA 15 Entwicklungsmöglichkeiten Anschluss von Stored-Procedures – Generierung der Java-Methoden und Oracle-Pakete – Paketrümpfe mit geschütztem Bereich – Behandlung von Seiteneffekten aufwändig (zweifache Indirektion über Proxis) Mehrere Datenbankverbindungen Mehrere Modelle Mehrere Server 21. Februar 2005 FHDW-MDA 16