Einleitung

mariok edited this page Sep 26, 2012 · 7 revisions

Table of Contents

Einleitung

Zu den großen Problemen in einem Softwareprojekt gehören meistens eine unvollständige und inkonsistente Spezifikation, geringes Budget, ein eng kalkulierter Entwicklungszeitraum und die daraus resultierende, meist nicht zufriedenstellende, Softwarequalität.

Genau hier kann der MDA-Ansatz (Model Driven Architecture) helfen: Automation durch Formalisierung und Industrialisierung. Dies bedeutet, dass formal eindeutige UML-Modelle, welche im MDA-Prozess der formalen Dokumentation entsprechen, mit einem Modellierungstool erstellt werden und anhand der vorliegenden Modelle automatisch Quellcode generiert wird.

JPA Generator

Für die Persistenzschicht eines IT-Systems werden Entitäten immer nach demselben Schema erstellt. In sehr vielen Softwareprojekten werden diese manuell implementiert. Ziel diese Projektes ist es, den MDA-Ansatz auf die vollständige Generierung einer Persistenzschicht, die den Java Community Process Standard "Java Persistence API" (JPA) beinhaltet, anzuwenden.

Ein Software-Entwickler, der mit dem MDA-Generator die Persistenzschicht generieren möchte, muss nun folgende einfache Schritte durchführen:

1. UML-Entitäten-Modell erstellen und UML-Profil einhängen

Für die Erstellung der UML-Modelle wird momentan das Modellierungstool Enterprise Architect unterstützt.

2. UML-Entitäten-Modell exportieren (XMI)



Durch den XMI-Export (XML Metadata Interchange) ist das UML-Modell für den MDA-Generator lesbar.

3. Code generieren

Der Generator liefert vollständigen und fehlerfreien Java-Code (ab Version 1.5) und da er nach dem KISS-Prinzip (Keep it simple and stupid) arbeitet, wird die Modellierung dem Entwickler stark erleichtert. Der MDA-Generator beinhaltet das in Eclipse integrierte MDA-Tool open Architecture Ware (oAW). oAW verwendet somit eine weit verbreitete Entwicklungsumgebung, welche sich in der Softwareentwicklungsbranche etabliert hat.

Das mitgelieferte UML-Profil, welches den JPA-Standard enthält, macht es möglich, alle JPA-Annotationen inklusive aller zugehörigen Tagged Values im Modell mit zu modellieren. Der MDA-Generator bildet alle Informationen aus dem Modell Java-konform auf den Code ab. Für modellierte Beziehungen erzeugt der Generator die benötigten Annotationen automatisch. Es gibt darüber hinaus die Möglichkeit, Beziehungen manuell zu annotieren.

Primärschlüssel können, müssen aber nicht angeben werden. Falls Schlüssel im Modell nicht angegeben sind, wird für die Entität ein künstlicher Schlüssel als Integer generiert. Zusammengesetzte fachliche Schlüssel werden unterstützt, für diesen Fall generiert der Generator eine entsprechende Primärschlüsselklasse.

Um die CRUD-Operationen durchführen zu können, ist eine einfache Zugriffsschicht auf Entitäten nötig. Dafür werden entsprechende DAO-Klassen (Data Access Object) in einem separaten Java-Package generiert. Zusätzlich erzeugt der Generator das entsprechende DDL-File (Data Definition Language) für die Datenbank.

Mit diesem MDA-Generator ist es also möglich, in sehr kurzer Zeit eine Persistenzschicht in Java, welche den JPA-Standard einhält, generieren zu lassen. Zugleich hat man den großen Vorteil, dass im Softwareprojekt eine formale und vollständige Spezifikation vorliegt.

BVA Generator

In den meisten Projekten ist es notwendig, Datenvalidierungen an verschiedenen Stellen durchzuführen, bspw. im User Interface, an einer Schnittstelle oder vor dem Schreiben in die Datenbank. Dabei kommt es oft vor, dass die Validierungsregeln von den einzelnen Teams unterschiedlich interpretiert und redundant entwickelt werden.

Mit Hilfe der "Bean Validation API" (JSR-303) ist es in Java möglich, die Validierungsregeln mittels einer Annotation bspw. an ein Attribut zu binden.

Die Hibernate Referenzimplementierung bringt bereits einige Standardvalidatoren mit; es ist aber auch möglich, eigene komplexere Validatoren zu verwenden.

Die Modellierung der Validierungs-Annotationen wird im UML-Modell mittels Stereotypen vorgenommen. Diese Stereotypen sind in UML-Profilen vordefiniert.

Zum Einen gibt es das UML-Profil "SimpleJSR303", welches die Standardvalidatoren enthält, und zum Anderen "SimpleJSR303_Custom" in welchem die benutzerdefinierten Validatoren definiert sind. Diese eigenen Validatoren ermöglichen es, für ein Projekt eine eigene Validierungsbibliothek zu entwickeln und somit die Wartbarkeit sowie Wiederverwendbarkeit zu erhöhen. Die Parameter (z.B. message ="Invalid Email") der Stereotypen werden mittels "Tagged Values" angegeben.

Lösungsansatz

Um aus den Modellen Code generieren zu können, werden diese mit Hilfe eines UML2-Exporters in das XMI Format gewandelt.

Diese exportierten Daten können von openArchitectureWare, einer Open-Source Plattform für modellgetriebene Softwareentwicklung, weiterverarbeitet werden. Die tatsächliche Codegenerierung wird in einer oAW Cartridge, mit Hilfe der in oAW und Eclipse verfügbaren Tools (Xpand2, Xtend, EMF, Modell-2-Modell Transformation) realisiert.