Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

XDoclet ETIS SS05.

Ähnliche Präsentationen


Präsentation zum Thema: "XDoclet ETIS SS05."—  Präsentation transkript:

1 XDoclet ETIS SS05

2 Gliederung Motivation Allgemeines Ablauf der Code-Generierung Aufbau
Templates Beispiel Zusammenfassung Reflection API ETIS SS05 - Nadine Fröhlich

3 Motivation - Code Generierung I
Problem: immer komplexere Software aufgrund wachsender Anforderungen (Verteilung, Sicherheit, GUIs) Lösung-Stichworte: Abstraktion Separation of concerns Komponentenorientierte Softwareentwicklung (lose Kopplung / Kohäsion) - z.B. EJBs Lösung-Probleme: redundante Informationen in verschiedenen Dateien (z.B. EJB remote/home interface, deployment-Descriptor,...) Reflection API ETIS SS05 - Nadine Fröhlich

4 Motivation - Code Generierung II
Lösung (eine gute :) Schreiben einer Ressource (+ Annotationen) Generierung der restlichen notwendigen Artefakte Vorteile: schnellere Entwicklung bessere Qualität, da Entwickler: sich auf Business Logik konzentrieren können und von fehleranfälligen, langweiligen Routinearbeiten befreit Wiederverwendbarkeit Änderungen an einer Stelle, d.h. schnelle Reaktion auf Probleme oder veränderte Anforderungen möglich Kosten sparen Einheitlicher Code durch Generierung Lernen, Lizenzkosten sind teuer Reflection API ETIS SS05 - Nadine Fröhlich

5 Allgemeines I Open source Tool, aus Javadoc hervorgegangen
Code getriebenes Code-Generierungswerkzeug Input: Java Source Code (+ Annotationen) Output: Code, z.B. Java Code, SQL Scripte, Deployment Descriptoren, … ermöglicht attributorientierte Programmierung für Java, d.h.: Javadoc-Kommentar mit XDoclet-Attributen (Metadaten) angereichert XDoclet- Attribute: Javadoc Erweiterungen (sehen aus, arbeiten wie Javadoc-Attribute) Reflection API ETIS SS05 - Nadine Fröhlich

6 Allgemeines II Javadoc vs. XDoclet-Tags: Metadaten im Code - Vorteile:
Javadoc besteht aus Name + Beschreibung etisAuthor */ XDoclet erweitert Javadoc um parametrisierte Tags (erhöhen die Ausdrucksstärke drastisch) generator-class=“uuid.string“ */ Metadaten im Code - Vorteile: Metadaten und Code sind nicht getrennt Metadaten sind menschen- und maschinenlesbar Reflection API ETIS SS05 - Nadine Fröhlich

7 Ablauf der Code-Generierung
XDoclet parst Quellcode Zugriff auf Attribute und Struktur der Quellen übergibt Ergebnis Templates daraus Code generiert Source files Output File(s) XDoclet Merge files Temp- late Reflection API ETIS SS05 - Nadine Fröhlich

8 Aufbau I Framework + Tasks (Generierungsanwendungen) Task Subtask Ant
nur aus Ant zu starten Task besteht aus Subtasks Ant-Task Beispiele: <ejbdoclet> <webdoclet> <hibernatedoclet> Subtask Erledigt eigentliche Code-Generierung durch Aufruf von Templates Ant XDoclet Ant task subtask subtask subtask XDoclet Ant task subtask subtask subtask ... Reflection API ETIS SS05 - Nadine Fröhlich

9 Aufbau II Subtask Beispiel Subtasks von ejbdoclet besteht u.a. aus:
<localhomeinterface> <remoteinterface> <deploymentdescriptor> Subtasks eines Tasks: teilen oft Funktionalität nutzen oft selbe Tags im Code Reflection API ETIS SS05 - Nadine Fröhlich

10 Templates I Muster / Prototypen des zu generierenden Codes
Template-Dateien ähnlich JSP-Dateien Enthalten Text und XML Tags XDoclettags beginnend mit XDt + Namensraum Contenttags: produzieren Text public class <XDtClass:className/>{ } Bodytags: haben Text zwischen Anfang und Ende <XDtMethod:forAllMethods> <XDtMethod:methodName/> </XDtMethod:forAllMethods> Reflection API ETIS SS05 - Nadine Fröhlich

11 Templates II Nutzerdefinierte Erweiterungen / Anpassungen der Templates durch mergepoints möglich Einfügen von Templatefragmenten (ebenfalls xdt-Dateien) zur Laufzeit möglich Manchmal reichen vordefinierte Tasks nicht aus: Template Engine erweiterbar einfach eigene Tags zu schreiben (mit Java) Konzept ähnelt Tag-Libraries in JSP Reflection API ETIS SS05 - Nadine Fröhlich

12 Beispiel - TODO soll maschinenlesbar werden
vorher: public void motivate(){ // TODO motivate students } in von XDoclet lesbarer Form /** motivate students */ // … Ejb.relation (Konvention namespace.tagname für Attribute) Reflection API ETIS SS05 - Nadine Fröhlich

13 Beispiel - Ant-Script I
<!- - in init-Target gehören alle benutzten XDoclet-Tasks - -> <target name=“init“> <!- - benutzerdefinierter Task - -> <taskdef name = “documentdoclet“ classname=“xdoclet.modules.doc.DocumentDocletTask“ classpathref=“xdoclet.lib.path“ </target> Reflection API ETIS SS05 - Nadine Fröhlich

14 Beispiel - Ant-Script II
<! - - eigentlcher XDoclet Task - - > <target name=“todo“ depends=“init“> <documentdoclet destdir=“todo“> <fileset dir=“${dir.src}“> <include name=“**/*.java“/> </fileset> <! - - subtask, macht die eigentliche Arbeit - -> <info/> </documentdoclet> </target> Reflection API ETIS SS05 - Nadine Fröhlich

15 Beispiel - Ausgabe Reflection API ETIS SS05 - Nadine Fröhlich

16 Zusammenfassung Attributorientierter Code Generator für Java
Metadaten im JavaDoc-Kommentar Leicht zu handhaben, pragmatisch, trotzdem mächtig erweiterbar Hinweis: Codegenerierung nur sinnvoll, wenn nicht zu wenig Code Nichts generieren, was man nicht versteht (bei Fehlern: Was ist Design Problem? Was ist Problem des Generators?) Reflection API ETIS SS05 - Nadine Fröhlich

17 Quellen Walls, C., Richards, N., XDoclet in Action, Manning Publications Co., Greenwich, 2004 Die XDoclet-Seite: Reflection API ETIS SS05 - Nadine Fröhlich


Herunterladen ppt "XDoclet ETIS SS05."

Ähnliche Präsentationen


Google-Anzeigen