230 likes | 308 Views
AndroMDA. Vortrag im Rahmen des Seminars "Software Engineering" Irina Thome. Agenda. AndroMDA Einführung Komponenten Funktionsweise Arbeiten mit AndroMDA Entwicklungsumgebung Beispiel Kritische Würdigung Fazit. Agenda. AndroMDA Einführung Komponenten Funktionsweise
E N D
AndroMDA Vortrag im Rahmen des Seminars "Software Engineering" Irina Thome
Agenda • AndroMDA • Einführung • Komponenten • Funktionsweise • Arbeiten mit AndroMDA • Entwicklungsumgebung • Beispiel • Kritische Würdigung • Fazit
Agenda • AndroMDA • Einführung • Komponenten • Funktionsweise • Arbeiten mit AndroMDA • Entwicklungsumgebung • Beispiel • Kritische Würdigung • Fazit
AndroMDA • Open Source MDA-Generator • Dokumentation und Support unter www.andromda.org • Eingesetzt u.a. bei Lufthansa Systems • Letzte stabile Version: AndroMDA 3.2 • Neueste verfügbare Version: AndroMDA 4.0-M1-Snapshot
AndroMDA • Codegenerierungs-Framework • Hohe Anpassbarkeit durch modulare Architektur • Kernkomponente: template-basierter Generator • Ziel: Transformation von PIM in PSM und von PSM in Code
AndroMDA • Automatisierung von redundanten Standard-Aufgaben (bis zu 90% des Aufwands) • Nur Geschäftslogik muss weiterhin von Hand implementiert werden • Prototypische Implementierung einer Onlinebibliothek mit rudimentärem UI ergibt:
Aufbau von AndroMDA Quelle: vgl. Dewanto (2006)
MetaData Repository • Einlesen einer XMI Datei • Abbildung als instanziiertes Metamodell im Speicher • Interne Repräsentation der Modellelemente als Java-Objekte • z.B. Modellklasse Kunde Java-Objekt der Klasse Class;Name-Attribut hat den Wert Kunde • Zugriff über JMI (Java Metadata Interface) möglich • Grundlage für weitere Transformation
Cartridges • JAR-Archive mit Templates, Metafacades und Deskriptoren • Zentrale Komponente der Codegenerierung • Erlauben Verarbeitung von Modellelementen, die mit Stereotypen gekennzeichnet sind oder deren Abhängigkeit sich aus bestimmten Konditionen ergibt • Zur Verfügung stehen Cartridges für: • BPM4Struts, jBPM, JSF, EJB, Hibernate, Java, Meta, Spring, WebService, XmlSchema • Erstellung von weiteren Cartridges für individuellen Bedarf möglich
Metafacades und Templates • Metafacades ermöglichen Zugriff auf Modell-Objekte vom MDR • verstecken Komplexität des JMI hinter simplen Schnittstellen-Klassen • weitere Aufgaben: • Validierung des Metamodells • Umsetzung der Translation Libraries und der Datatype Mappings • Templates ermöglichen Zugriff auf Methoden der Metafacade-Klassen
Template Engine • Verarbeitung der Templates • Unterstützt: Velocity und FreeMarker Quelle: Karner (2006)
OCL (Object Constraint Language): context Kunde::getKandidaten(wohnort: String, mindestalter: Integer): Collection(Kunde) body getKandidatenBody: allInstances()-> select (Kunde|Kunde.ort = wohnort and Kunde.alter >= mindestalter) Hibernate Query Language: from seminar.Kunde as kunde where kunde.ort = :wohnort and kunde.alter >= :mindestalter EJB Query Language: SELECT DISTINCT OBJECT(kunde)FROM Kunde kunde WHERE kunde.ort = ?1 AND kunde.alter >= ?2 Translation Libraries • Verarbeitung von Ausdrücken in OCL, z.B. für Datenbankanfragen
Datatype Mappings • Übersetzung von Datentypen des Modells in Zielsprache <mappings name="Java"> </mapping> ... <mapping> <from>guarded</from> <to>synchronized</to> </mapping> <mapping> <from>sequential</from> <to/> </mapping> <mapping> <from>datatype::File</from> <to>java.io.File</to> </mapping> <mapping> <from>datatype::String</from> <to>java.lang.String</to> </mapping> ... <mapping> <from>datatype::void</from> <to>void</to> </mapping> <mapping> <from>datatype::ContentHandler</from> <to>org.xml.sax.ContentHandler</to> </mapping> … </mappings>
AndroMDA Framework Quelle: Karner (2006)
Funktionsweise von AndroMDA • Überführen eines UML-Modells im XMI-Format • Einlesen der XMI-Datei von Repository-Komponente • Abbildung im Speicher als instanziiertes UML-Metamodell in Form von Java-Objekten • Zugriff über Metafacades und Templates einer Cartridge • Steuerung der Codegenerierung durch Template Engine
Agenda • AndroMDA • Einführung • Komponenten • Funktionsweise • Arbeiten mit AndroMDA • Entwicklungsumgebung • Beispiel • Kritische Würdigung • Fazit
Entwicklungsumgebung • Steuerung über Maven-Plugin • Maven: auf Java basierendes Build Management Tool • Lädt sämtliche benötigten Plugin's automatisch übers Internet • UML-Modellierungswerkzeug: MagicDraw 9.5 Community Edition • Datenbank: MySQL Server 5.0 • Java Development Kit 1.0.5 • JBoss Application Server 5.0.5 • Eclipse
Beispielanwendung • Anlegen eines AndroMDA-Projektes • Entstehende Ordnerstruktur: • mda: UML-Modell der Anwendung • common: Klassen und Ressourcen, auf die von mehreren Teilprojekten zugegriffen wird • core: Klassen und Ressourcen, die Spring (und optional Hibernate und/oder EJB) verwenden • web: Klassen und Ressourcen der Präsentationsschicht • app: Klassen und Ressourcen, die zum Bilden der .ear Files benötigt werden
Beispielanwendung • Codegenerierung • Für eine Klasse User mit Stereotyp <<Entity>> werden erzeugt: • User.java: abstrakte Klasse; implementiert die User-Entität • UserImpl.java: konkrete Erweiterung von User.java (vom Entwickler zu ergänzen) • UserDao.java: Interface; definiert Methoden für das Data Access Object • UserDaoBase.java: implementiert die Methoden von UserDao.java • UserDaoImpl.java: konkrete Erweiterung für UserDao (vom Entwickler zu ergänzen)
Bewertung des Entwicklungsprozesses Positiv • Die meisten Werkzeuge sind Open Source • Code-Generierung funktioniert gut • AndroMDA übernimmt die lästigen, zeitraubenden Aufgaben • Entwickler kann sich auf das Wesentliche konzentrieren
Bewertung des Entwicklungsprozesses Negativ • Kompatibilitätsprobleme beim Einrichten der Entwicklungs-umgebung • Teils fehlende oder lückenhafte Dokumentation, tote Links auf der Support-Webseite • Für unerfahrene Benutzer schwierige Bedienung über Kommandozeile
Agenda • AndroMDA • Einführung • Komponenten • Funktionsweise • Arbeiten mit AndroMDA • Entwicklungsumgebung • Beispiel • Kritische Würdigung • Fazit
Fazit • MDA soll Vorteile bei Software-Entwicklung bringen • AndroMDA setzt MDA-Idee um • Fast 100% automatische Codegenerierung im Back-End möglich • Unterstützung der Transformation von Modellen zu Code • Nicht triviale Installation und Bedienung, mangelnde Dokumentation • Daher eher für erfahrene Anwender empfehlenswert