oAW-Cartridges

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    oAW-Cartridges - Presentation Transcript

    1. Best Practices für flexible und wartbare Codegeneratoren mit openArchitectureWare Karsten Thoms Software Architekt 20.04.2009 © itemis AG 2008 – All rights reserved 1
    2. Agenda (1) Fornax-Plattform, Cartridges (2) Referenzimplementierung, Referenzmodell (3) Projektstruktur (4) Feature-Konfiguration (5) Modelltransformationen (6) Externes / Internes Metamodell (7) Build-Integration (8) Projektspezifische Anpassungen (9) Cartridge Testing (10) Implementierung © itemis AG 2008 – All rights reserved 2
    3. Agenda (1) Fornax-Plattform, Cartridges (2) Referenzimplementierung, Referenzmodell (3) Projektstruktur (4) Feature-Konfiguration (5) Modelltransformationen (6) Externes / Internes Metamodell (7) Build-Integration (8) Projektspezifische Anpassungen (9) Cartridge Testing (10) Implementierung © itemis AG 2008 – All rights reserved 3
    4. Die Fornax Plattform • http://www.fornax-platform.org • „Umbrella-Projekt“ für oAW Cartridges, Tools und Erweiterungen außerhalb des openArchitectureWare Kernprojekts • Cartridges • JavaBasic, Hibernate, Spring, Sculptor • Incubation: JSF, Grails, EJB2, EJB3 • Tools • XML Formatter, C/C++ Formatter • oAW Maven2 Plugin © itemis AG 2008 – All rights reserved 4
    5. Was sind Cartridges? • Cartridge = „Steckmodul“ • Abgeschlossener Codegenerator für eine spezifische Zielplattform • oAW-Cartridges: • Aufrufbarer Workflow • Sammlung von oAW Artefakten • Xpand-Templates, Extensions, Transformationen, Checks • Kann als JAR paketiert werden © itemis AG 2008 – All rights reserved 5
    6. Cartridges <workflow> workflow.oaw <property file=\"./workflow.properties\"/> ... <cartridge file=\"org/fornax/cartridges/uml2/hibernate/ hibernate.oaw\" inheritAll=\"true\"> <prExcludes value=\"*.svn-base\"/> <workflow> hibernate.oaw </cartridge> <property </workflow> file=\"org/fornax/cartridges/uml2/hibernate/ hibernateCartridgeDefaults.properties\" /> <bean id=\"mm_hibernate_profile\" class=\"org.openarchitectureware.uml2.profile.ProfileMetaModel\"> <profile value=\"${profile.persistence.file}\" /> <errorIfStereotypeMissing value=\"${hibernate.cartridge.errorIfStereotypeMissing}\" /> </bean> <bean id=\"mm_uml2\" class=\"org.openarchitectureware.uml2.UML2MetaModel\" /> © itemis AG 2008 – All rights reserved 6
    7. Cartridges • „Lego-Traum“ • Beispiel AndroMDA • Gute, ausgereifte, gepflegte Cartridges • Schneller Start • Wartungsproblem bei Anpassung • Lange Releasezyklen • openArchitectureWare • Cartridges werden im Kernprojekt nicht bereit gestellt © itemis AG 2008 – All rights reserved 7
    8. Contra • Hoher Pflegeaufwand • Höhere Komplexität • eingeschränkte Erweiterbarkeit • Muss mehr abdecken, als für einen konkreten Anwendungsfall notwendig ist © itemis AG 2008 – All rights reserved 8
    9. Agenda (1) Fornax-Plattform, Cartridges (2) Referenzimplementierung, Referenzmodell (3) Projektstruktur (4) Feature-Konfiguration (5) Modelltransformationen (6) Externes / Internes Metamodell (7) Build-Integration (8) Projektspezifische Anpassungen (9) Cartridge Testing (10) Implementierung © itemis AG 2008 – All rights reserved 9
    10. Referenzimplementierung und Referenzmodell • Manuell entwickelte Implementierung, die alle Aspekte der Zielarchitektur mindestens einmal jederzeit abdeckt • Jedes neue Konzept und Änderung wird zuerst in der Referenzimplementierung erprobt • Das Referenzmodell stellt die abstrakten Konzepte der Referenzimplementierung mit der gewählten Modellierungssprache dar • Der Codegenerator erzeugt aus dem Referenzmodell die generierbaren Artefakte der Referenzimplementierung © itemis AG 2008 – All rights reserved 10
    11. Referenzmodell © itemis AG 2008 – All rights reserved 11
    12. Agenda (1) Fornax-Plattform, Cartridges (2) Referenzimplementierung, Referenzmodell (3) Projektstruktur (4) Feature-Konfiguration (5) Modelltransformationen (6) Externes / Internes Metamodell (7) Build-Integration (8) Projektspezifische Anpassungen (9) Cartridge Testing (10) Implementierung © itemis AG 2008 – All rights reserved 12
    13. Projektstruktur • Aufbau von oAW (Cartridge) Projekten wird durch oAW nicht festgelegt • Potentiell unterschiedlicher Aufbau unterschiedlicher Projekte • Potentielle Namenskonflikte vermeiden! • „generator.oaw“, „workflow.properties“ immer im Classpath Root • Vorschlag für eine einheitliche, redundanzfreie Projektstruktur: • http://www.fornax-platform.org/cp/display/fornax/Structure+of+Cartridges © itemis AG 2008 – All rights reserved 13
    14. Projektstruktur • Fornax-Projekte bestehen aus mehreren Teilprojekten • Parent: Dokumentation, Projekt Master-POM (Maven) • Cartridge-Projekt: oAW Artefakte • Referenz-Implementierung • Plattform/Framework-Projekt: Generische Komponenten © itemis AG 2008 – All rights reserved 14
    15. Projektstruktur cartridge-project |--src |--main |--java |--<packagename> |--*.java |--resources |--<packagename> |--validation |--m2t |--m2m |--util © itemis AG 2008 – All rights reserved 15
    16. Projektstruktur cartridge-project |--src |--main |--java |--<packagename> |--*.java |--resources |--<packagename> |--validation |--m2t |--m2m |--util |--cartridge.oaw <-- Place 'cartridge.oaw' here! © itemis AG 2008 – All rights reserved 16
    17. Projektstruktur cartridge-project |--src |--main |--java |--<packagename> |--*.java |--resources |--<packagename> |--validation |--m2t |--m2m |--util |--cartridge.oaw |--metamodels |--[prefix].ecore |--[prefix].profile |--[prefix]_cartridge_default.properties <-- place here default workflow properties! © itemis AG 2008 – All rights reserved 17
    18. Projektstruktur cartridge-project |--src |--main |--java |--<packagename> |--*.java |--resources |--<packagename> |--validation |--m2t |--m2m |--util |--cartridge.oaw |--metamodels |--[prefix].ecore |--[prefix].profile |--[prefix]_cartridge_default.properties |--[prefix]_cartridge.featurecfg <-- this is the feature configuration file! © itemis AG 2008 – All rights reserved 18
    19. Agenda (1) Fornax-Plattform, Cartridges (2) Referenzimplementierung, Referenzmodell (3) Projektstruktur (4) Feature-Konfiguration (5) Modelltransformationen (6) Externes / Internes Metamodell (7) Build-Integration (8) Projektspezifische Anpassungen (9) Cartridge Testing (10) Implementierung © itemis AG 2008 – All rights reserved 19
    20. Feature Konfiguration • Selektive Generierung, Transformation, Ausführung von Komponenten abhängig von Feature-Konfiguration • Package org.openarchitectureware.util.featureconfig • Per Feature-Konfiguration und AOP © itemis AG 2008 – All rights reserved 20
    21. Feature-Konfiguration © itemis AG 2008 – All rights reserved 21
    22. Agenda (1) Fornax-Plattform, Cartridges (2) Referenzimplementierung, Referenzmodell (3) Projektstruktur (4) Feature-Konfiguration (5) Modelltransformationen (6) Externes / Internes Metamodell (7) Build-Integration (8) Projektspezifische Anpassungen (9) Cartridge Testing (10) Implementierung © itemis AG 2008 – All rights reserved 22
    23. Realisierung Convention-over-Configuration Paradigma mit Modell-Modifikationen • Zum Validierungszeitpunkt muss ein Modell vollständig und konsistent sein • Im Quellmodell können alle automatisch herleitbaren Informationen ausgelassen werden (Konventionen) • Nur Abweichungen von Konventionen werden explizit modelliert • Ausgelassene Konfigurationen werden per Konvention automatisch per M2M-Transformation mit Xtend ergänzt • Der Modellierungsaufwand wird reduziert © itemis AG 2008 – All rights reserved 23
    24. Realisierung Convention-over-Configuration Paradigma mit Modell-Modifikationen © itemis AG 2008 – All rights reserved 24
    25. Cartridge-Adapter • Damit eine Cartridge genutzt werden kann muss das Eingabemodell das von der Cartridge definierte Metamodell nutzen • Verwendung des selben Metamodells • Schneller zur Erstellung von Modellen • Modellstruktur wird von der Cartridge aufgezwungen • Nicht robust gegen Änderungen der Cartridge • Adaption durch Transformation • Das von der Cartridge erwartete Modell wird per M2M Transformation erstellt • Alle für die Transformation erforderlichen Informationen müssen im Eingabemodell vorhanden sein © itemis AG 2008 – All rights reserved 25
    26. Agenda (1) Fornax-Plattform, Cartridges (2) Referenzimplementierung, Referenzmodell (3) Projektstruktur (4) Feature-Konfiguration (5) Modelltransformationen (6) Externes / Internes Metamodell (7) Build-Integration (8) Projektspezifische Anpassungen (9) Cartridge Testing (10) Implementierung © itemis AG 2008 – All rights reserved 26
    27. Externes / Internes Metamodell • Maßgeschneiderte EMF Metamodelle • erleichtern die Implementierung von Templates, Extensions, Checks • erhöhen die Wartbarkeit der Artefakte • enthalten nur die tatsächlich benötigten Konzepte • Einfachere Adaption für alternative Modellierungs-Frontends • Adaption durch Model-2-Model-Transformation vom Externen Metamodell (z.B. UML2, Xtext DSL) © itemis AG 2008 – All rights reserved 27
    28. Externes / Internes Metamodell Beispiel: Sculptor © itemis AG 2008 – All rights reserved 28
    29. Externes / Internes Metamodell Beispiel: Sculptor © itemis AG 2008 – All rights reserved 29
    30. Agenda (1) Fornax-Plattform, Cartridges (2) Referenzimplementierung, Referenzmodell (3) Projektstruktur (4) Feature-Konfiguration (5) Modelltransformationen (6) Externes / Internes Metamodell (7) Build-Integration (8) Projektspezifische Anpassungen (9) Cartridge Testing (10) Implementierung © itemis AG 2008 – All rights reserved 30
    31. Build-Integration • oAW ist out-of-the-box zunächst nur innerhalb Eclipse ausführbar • Grundsätzlich lässt sich ein oAW Prozess aber beliebig integrieren © itemis AG 2008 – All rights reserved 31
    32. Build-Integration • Codegenerator muss IDE unabhängig ausführbar sein • Shell, Ant, Maven • Fornax Maven2 Plugin • Eclipse Plugins in Maven Repositories • Maven zwingt zu künstlicher Projektstruktur © itemis AG 2008 – All rights reserved 32
    33. 2878 INFO IOExtensions - * * * Checking configuration. Read property file: hibernateCartridge.properties * * * Build-Integration [INFO] [fornax-oaw-m2:run-workflow {execution: default}] [INFO] oAW Maven2 Plugin V2.1.1 0 INFO WorkflowRunner - -------------------------------------------------------------------------------------- 3 INFO WorkflowRunner - openArchitectureWare v4.3.1 3 INFO WorkflowRunner - (c) 2005-2008 openarchitectureware.org and contributors 3 INFO WorkflowRunner - -------------------------------------------------------------------------------------- 3 INFO WorkflowRunner - running workflow: workflow.oaw 4 INFO WorkflowRunner - 2099 INFO CompositeComponent - TextConfigurationReader: loading global configuration model (text) from hibernateConfig.txt 2100 INFO CompositeComponent - DirectoryCleaner: cleaning directory '/Users/thoms/Documents/Events/ 20090420_DortmunderVortragsreihe/workspace/fornax-cartridges-uml2-hibernate-reference/src/generated/java, /Users/thoms/Documents/ Events/20090420_DortmunderVortragsreihe/workspace/fornax-cartridges-uml2-hibernate-reference/src/generated/java, /Users/thoms/ Documents/Events/20090420_DortmunderVortragsreihe/workspace/fornax-cartridges-uml2-hibernate-reference/src/generated/resources' 2100 INFO DirectoryCleaner - Cleaning /Users/thoms/Documents/Events/20090420_DortmunderVortragsreihe/workspace/fornax- cartridges-uml2-hibernate-reference/src/generated/java 2159 INFO DirectoryCleaner - Cleaning /Users/thoms/Documents/Events/20090420_DortmunderVortragsreihe/workspace/fornax- cartridges-uml2-hibernate-reference/src/generated/java 2160 INFO DirectoryCleaner - Cleaning /Users/thoms/Documents/Events/20090420_DortmunderVortragsreihe/workspace/fornax- cartridges-uml2-hibernate-reference/src/generated/resources 2172 INFO CompositeComponent - XmiReader: file './model/topcased/topcased-reference.uml' => slot 'model' 2450 INFO CompositeComponent - Workflow: executing workflow org/fornax/cartridges/uml2/hibernate/hibernate.oaw in workflow.oaw: 42 2451 INFO CompositeComponent - CheckComponent: slot model check file(s): org::fornax::cartridges::uml2::hibernate::checks::CartridgeProperties 2878 INFO IOExtensions - * * * Checking configuration. Read property file: hibernateCartridge.properties * * * © itemis AG 2008 – All rights reserved 33
    34. Agenda (1) Fornax-Plattform, Cartridges (2) Referenzimplementierung, Referenzmodell (3) Projektstruktur (4) Feature-Konfiguration (5) Modelltransformationen (6) Externes / Internes Metamodell (7) Build-Integration (8) Projektspezifische Anpassungen (9) Cartridge Testing (10) Implementierung © itemis AG 2008 – All rights reserved 34
    35. Projektspezifische Anpassungen • Xpand/Xtend AOP erlaubt Anpassung von Cartridges ohne Kopieren des gesamten Generators • Non-invasive Erweiterung • Cartridge muss für Erweiterbarkeit entworfen werden • Nicht zu große Definitionen oder zu komplexe Funktionen • gezielt AOP Hooks einbauen • Dokumentation der Erweiterungspunkte ist sehr wichtig © itemis AG 2008 – All rights reserved 35
    36. Modifikation und Ergänzung bestehender Cartridge- Funktionalität mit Xpand/Xtend AOP <component adviceTarget=\"hibernateCartridge_pojo_generator\" hibernate.oaw id=\"JPAAnnotationAdvice\" class=\"oaw.xpand2.GeneratorAdvice\"> <advices value=\"org::fornax::cartridges::uml2::hibernate::templates::HibernateAnnotations\"/> </component> <component id=\"hibernateCartridge_pojo_generator\" class=\"org.openarchitectureware.xpand2.Generator\"> <metaModel idRef=\"mm_hibernate_profile\" /> <metaModel idRef=\"mm_uml2\" /> <fileEncoding value=\"${file.encoding}\" /> <extensionAdvice value=\"org::fornax::cartridges::uml2::hibernate::extensions::Naming\" /> <advice value=\"org::fornax::cartridges::uml2::hibernate::templates::HibernateAOPExtensions\" /> © itemis AG 2008 – All rights reserved 36
    37. Xpand AOP Hooks © itemis AG 2008 – All rights reserved 37
    38. Xpand AOP © itemis AG 2008 – All rights reserved 38
    39. Xtend AOP Naming.ext around org::fornax::cartridges::uml2::javabasic::extensions::Helper::getFQNPackageName (uml::Type type) : if Persistence::Entity.isInstance(type) then Fornax Hibernate getFQNPackageName(type) Cartridge else ctx.proceed(); Helper.ext String getFQNPackageName(uml::Type type): JAVA org.fornax.cartridges.uml2.javabasic.Helper.getFQNPackageName (org.eclipse.uml2.uml.Type); Fornax JavaBasic Cartridge © itemis AG 2008 – All rights reserved 39
    40. Agenda (1) Fornax-Plattform, Cartridges (2) Referenzimplementierung, Referenzmodell (3) Projektstruktur (4) Feature-Konfiguration (5) Modelltransformationen (6) Externes / Internes Metamodell (7) Build-Integration (8) Projektspezifische Anpassungen (9) Cartridge Testing (10) Implementierung © itemis AG 2008 – All rights reserved 40
    41. Test • Referenzimplementierung so vollständig wie möglich durch Unittests abdecken, zusätzlich Integrationstests • Problematisch: Test von Xtend Funktionen, Checks und Templates • Funktionsfähigkeit des Generators wird vor allem durch Vergleich der resultierenden Artefakte mit der Referenzimplementierung sichergestellt • Test von Constraints nur durch Verletzung der Constraints möglich © itemis AG 2008 – All rights reserved 41
    42. Unitests • Unittests gegen Referenzimplementierung implementieren • Unittests werden müssen den generierten Code testen • Fehlerhafte Generierung möglichst schon durch Compile-Fehler erkennen © itemis AG 2008 – All rights reserved 42
    43. fit4oaw • Testing Plattform für openArchitectureWare • Basiert auf FitNesse (www.fitnesse.org) • Open Source (GPL) • http://fit4oaw.wiki.sourceforge.net/ • Features • White-Box Tests für Xtend, Xpand, Check • Build-Integration mit Maven2 • Implementierung von Tests in einem Wiki • Test privater Xtend Funktionen möglich © itemis AG 2008 – All rights reserved 43
    44. fit4oaw © itemis AG 2008 – All rights reserved 44
    45. Agenda (1) Fornax-Plattform, Cartridges (2) Referenzimplementierung, Referenzmodell (3) Projektstruktur (4) Feature-Konfiguration (5) Modelltransformationen (6) Externes / Internes Metamodell (7) Build-Integration (8) Projektspezifische Anpassungen (9) Cartridge Testing (10) Implementierung © itemis AG 2008 – All rights reserved 45
    46. Xpand Templates • Dispatcher-Template als Generator-Einstiegspunkt © itemis AG 2008 – All rights reserved 46
    47. Xpand-Templates • Ein Template je Artefakt-Typ © itemis AG 2008 – All rights reserved 47
    48. Extensions • Xtend Files nach Metamodelltyp trennen (bei Verwendung mehrerer Metamodelle) • Funktionen im Javadoc Stil dokumentieren • Reexportieren allgemein genutzter Funktionen (reexport Keyword) • Nicht alles cachen, nur bei allgemeinem Nutzen • Template spezifische Extensions in eigene .ext Dateien (mit Namen der zugeh. Xpand Datei) © itemis AG 2008 – All rights reserved 48
    49. Validierung • Alle getroffenen Annahmen in Constraints überprüfen • Ggf. trennen nach schnell laufenden Checks, die immer mitlaufen und komplexeren, die per Feature aktiviert werden können • Validierung erfolgt, wenn das Modell konsistent sein muss (ggf. nach Vervollständigung durch Modellmodifikation) • Validierung nach jeder Transformation © itemis AG 2008 – All rights reserved 49
    50. Diskussion ! © itemis AG 2009 – All rights reserved 50
    51. Diskussion ! © itemis AG 2009 – All rights reserved 50
    52. Best Practices für flexible und wartbare Codegeneratoren mit openArchitectureWare Karsten Thoms Software Architekt 20.04.2009 © itemis AG 2008 – All rights reserved 51
    SlideShare Zeitgeist 2009

    + Michael JendryschikMichael Jendryschik Nominate

    custom

    850 views, 0 favs, 2 embeds more stats

    Innerhalb kürzester Zeit lassen sich flexible Gene more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 850
      • 786 on SlideShare
      • 64 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 15
    Most viewed embeds
    • 62 views on http://www.itemis.de
    • 2 views on https://onion.net

    more

    All embeds
    • 62 views on http://www.itemis.de
    • 2 views on https://onion.net

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories