AndroMDA

AndroMDA (gesprochen Andromeda) ist ein Framework zur Generierung von Programmcode auf Basis der Model Driven Architecture ( MDA). MDA ist dabei der grundlegende Standard zur generativen Entwicklung von Software, der von der Object Management Group ( OMG) im Juni 2003 spezifiziert wurde. MDA realisiert eine von bestimmten Technologien unabhängige Spezifikation, die für die automatische Generierung von Programmcode auf verschiedenen Plattformen wie der J2EE, . NET oder CORBA genutzt werden kann.

Neben AndroMDA implementiert auch das ebenfalls als Open Source verfügbare Framework OpenArchitecture-Ware die MDA-Spezifikation der OMG. AndroMDA wurde auf Basis des Codegenerators UML2EJB von Matthias Bohlen und einer großen Open Source Community - auch AndroMDA-Team genannt - entwickelt. Der Hintergrund zur Entwicklung von AndroMDA war es, auf der Basis von statischen und dynamischen UML-Modellen direkt den entsprechenden Programm- Code generieren zu können. Dabei werden Cartridges verwendet, die die Elemente der Andro-MDA-Meta-Modelle verarbeiten, um daraus dann die Fragmente des Programmcodes zu generieren. Derzeit stehen Cartridges u.a. für Java, C#, JSF (JavaServer Faces), XmlSchema oder auch Hibernate zur Verfügung. Das Framework unterstützt auch die Realisierung anwendungsspezifischer Cartridges. Dabei wird die Generierung von Programmcode für unterschiedliche Zielsprachen über Templates gesteuert, so dass beispielsweise auch Implementierungen für HTML oder PHP realisiert werden können. Bei der Erstellung der UML-Modelle ist AndroMDA auf ein externes Tool zur Modellierung angewiesen. Die dafür notwendigen Voraussetzungen werden aber aus Sicht von AndroMDA von einer Reihe verfügbarer Modellierungs-Tools erfüllt. So können mit AndroMDA redundante Standard- Aufgaben - die an spezifischen Applikationen häufig einen erheblichen Anteil haben - automatisiert werden. Anwender berichten in diesem Zusammenhang von Code-Generierungsraten von über 50%.

Baukasten mit unterschiedlichen Tools

AndroMDA ist als ein umfangreicher Baukasten mit unterschiedlichen Tools zur Generierung von Programmcode im Rahmen eines komplexen Frameworks realisiert.

Komponenten von AndroMDA

Komponenten von AndroMDA

Die Abbildung zeigt daher zunächst einmal die verschiedenen Komponenten von AndroMDA, wovon die wichtigsten nachfolgend kurz erläutert werden.

Für den Einsatz von AndroMDA wird ein externes UML-Modellierungs-Tool benötigt, das in jedem Fall den Export von XML MetaData Interchange ( XMI) Files - in diesem Format werden die erstellten UML-Modelle abgelegt - unterstützen muss. Weiterhin sollten Klassendiagramme, Aktivitätsdiagramme, UML Tagged Values und UML Constraints ( OCL) erstellt werden können. Ein solches Beispiel für die Umsetzung der genannten Anforderungen ist das Modellierungs-Tool MagicDraw, das unter dem u.g. Link in begrenzter Funktionalität frei verfügbar ist.

Wie die Abbildung zeigt, wird das gesamte Framework über das Maven Plug-In gesteuert, dessen Grundlagen im Apache Ant Projekt geschaffen wurden. Maven ist ein in Java implementiertes Build Management Tool, das einen modellbasierten, deklarativen Ansatz zur Umsetzung des Build-Prozesses verfolgt. Dadurch wird auch der Umsetzungsprozess deutlich vereinfacht.

Zentrale Komponenten von AndroMDA

Das MetaData Repository sorgt für das Einlesen der XMI- Datei und die Abbildung des UML-Modells als instanziiertes Metamodell im Speicher. Dabei wird für jedes Modell-Element ein eigenes Java- Objekt instanziiert. Der Zugriff auf diese Objekte erfolgt über die JMI- API (Java Metadata Interface). Damit ist die Grundlage für weitere Transformationen gegeben.

Cartridges sind die zentrale Komponente der Code-Generierung und bestehen aus JAR-Archiven mit Templates, Metafacades und Deskriptoren. Cartridges erlauben die Verarbeitung von Modell-Elementen, 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 oder XmlSchema. Die Erstellung von weiteren Cartridges für den individuellen Bedarf ist möglich. Der zu generierende Code wird von den Templates vorgegeben, welche im Cartridge- Deskriptor definiert werden können.

Metafacades (abgeleitet von: Metamodell Facades) ermöglichen den Zugriff auf die Modell-Objekte des MetaData Repositorys und basieren auf dem Software- Entwurfsmuster Facades. Damit wird die Komplexität des JMI hinter simplen Schnittstellen-Klassen verborgen. Zudem übernehmen die Metafacades noch weitere Aufgaben wie die Validierung des Metamodells oder die Umsetzung der Translation Libraries und der Datatype Mappings. Über die Templates wird der Zugriff auf Methoden der Metafacade-Klassen realisiert.

Die Template Engine unterstützt die Verarbeitung der Templates, wobei AndroMDA die Verwendung von zwei möglichen Engines anbietet - Freemarker und Velocity.

Funktionsweise der Velocity Template Engine

Funktionsweise der Velocity Template Engine

Die prinzipielle Funktionalität einer Template Engine wird durch die in der Abbildung gezeigten Velocity Template Engine demonstriert. Mehr Informationen zu den genannten Template Engines sind unter dem u.g. Link verfügbar.

Die Translation Libraries ermöglicht die Verarbeitung von Ausdrücken in Object Constraint Language (OCL) beispielsweise für Anfragen an eine Datenbank. Die Datatype Mappings übersetzen schließlich die Datentypen des Modells in die im Deskriptor festgelegte Zielsprache.

Zusammenfassend ergibt sich die Funktionsweise von AndroMDA aus den folgenden Schritten:

  • Überführen eines UML-Modells im XMI-Format,
  • Einlesen der XMI-Datei von der Repository-Komponente,
  • Abbildung im Speicher als instanziiertes UML-Metamodell auf der Basis von Java-Objekten,
  • Zugriff über Metafacades und Templates einer Cartridge,
  • Steuerung der Codegenerierung durch Template Engine.
Informationen zum Artikel
Deutsch: AndroMDA
Englisch:
Veröffentlicht: 28.10.2013
Wörter: 791
Tags: Entwicklung, Codierung
Links: Framework, Quelltext, mesh deterministic access (802.11s) (MDA), Software, object management group (OMG)
Übersetzung: EN
Sharing: