Das Eclipse Modeling Framework (EMF)



Ähnliche Dokumente
Was ist EMF? Wie wird EMF eingesetzt? Was ist ecore? Das Generatormodell Fazit

SEW Übung EMFText. 1 Aufgabe. 2 Domänenbeschreibung. 3 Installation von Eclipse/EMFText. 4 Schritt-für-Schritt Anleitung. 4.

EMF-GMF-Tutorial: Petrinet

Eclipse Modeling Framework Modellgetriebene Softwareentwicklung Prof. Andreas Schmidt

Software Engineering II

Model Driven Development im Überblick

Motivation Grundlagen Technologien Manipulation Ecore Genmodell Demo Persistenz Notification Ausblick GMF Fazit / Quellen

Definition von domänenspezifischen Sprachen mit Xtext: Einführung. 19. November 2014

DSLs mit Xtext entwerfen , A. Arnold

Einführung in das Eclipse Modeling Framework. Dr. Thorsten Arendt Marburg, 22. Oktober 2015

Sonnenfinsternis in der Technischen Redaktion

Current Workflow. formatted. Rules. Extensions. Rules. DOM processing with Meta API-calls. Code Generation (Smarty) XMLfile. Source code.

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Vortrag von: Ilias Agorakis & Robert Roginer

WhiteStarUML Tutorial

Faktor-IPS. Modellgetriebene Softwareentwicklung mit Faktor-IPS. Faktor Zehn AG. Seite 1

Software Engineering II

Eclipse Modeling Framework

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Model Driven Architecture Praxisbeispiel

Design Patterns 2. Model-View-Controller in der Praxis

Software Engineering in der Projektpraxis

Domänenspezifisch entwickeln mit UML (Vortrag mit Demo)

Datenhaltung für Android Model First Christian Ingenhaag, Frederik Götz, Carl Steeg

Einführung in die Programmierung

A Domain Specific Language for Project Execution Models

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Software-Engineering 2. Software-Engineering 2. Entwicklungsumgebungen (IDE) IT works. Klaus Mairon

Einführung in das Eclipse Modeling Framework (EMF)

Programmieren in Java

Einführung in das Eclipse Modeling Framework (EMF)

Thema 2 Acceleo-MTL- Sprachmittel

Beispielhaft MDSD in der Praxis. Dr. Shota Okujava

Einführung in das Eclipse Modeling Framework (EMF)

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Definition von visuellen Alphabeten basierend auf Meta Object Facilities (MOF) 23. Oktober 2012

Generisch entwickelte Software-Werkzeuge anpassbar wie ein Chamäleon

Model Driven Architecture (MDA)

5. Programmierschnittstellen für XML

Ein Erfahrungsbericht beim Einsatz von generierenden Ansätzen im Vergleich zu generischen Lösungen

Eclipse Plugins für die komfortablere Verwendung von ibatis SQLMaps

Themen. Software Design and Quality Group Institute for Program Structures and Data Organization

Software Engineering Interaktionsdiagramme

Language Workbench. Aktuelle Themen der Softwaretechnologie. Vortrag von: Arthur Rehm Steven Cardoso. Betreut von: Prof. Dr.

Kurzanleitung zu. von Daniel Jettka

Javakurs 2013 Objektorientierung

Übersicht. Eclipse Foundation. Eclipse Plugins & Projects. Eclipse Ganymede Simultaneous Release. Web Tools Platform Projekt. WSDL Editor.

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Objektorientierte Programmierung. Kapitel 12: Interfaces

UML-DSLs effizient eingesetzt. Insight 07, Klaus Weber

Grundlagen von Python

Arbeiten mit UMLed und Delphi

Große Übung Praktische Informatik 1

Anleitung zum Arbeiten mit Microsoft Visual Studio 2008 im Softwarepraktikum ET/IT

Andreas Lux Verknüpfung unterschiedlicher Modellsprachen (BPMN, UML, DSL) zur Anforderungsanalyse

Comparing Software Factories and Software Product Lines

Eine Anwendung mit InstantRails 1.7

Modellgetriebene Entwicklungsprozesse in der Praxis - eine Bestandsaufnahme. Tillmann Schall, anaptecs GmbH

ActiveCharts. Verknüpfung von Modellen und Code bei der modellgetriebenen Softwareentwicklung mit UML 2.0

Produktinformation DaVinci Developer

5. Programmierschnittstellen für XML

eclipse und Komponenten

Abacus Formula Compiler (AFC)

Inhaltsverzeichnis. TeiM. V E E.l E.2 E.3 E.4. Vorwort von Stefan Tilkov Einleitung Zielgruppe Über dieses Buch Konventionen Dank

Jochen Bauer

Design mit CASE-Tools

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

Anleitung zur Installation und Verwendung von eclipseuml 2.1.0

Objektorientierte Programmierung

Objektorientierte Programmierung

Werkzeuge für Datenbank Handwerker: IBM Data Studio und IBM Optim QWT

Einführung in die Java- Programmierung

Model Driven SOA Modellgetriebene Entwicklung von SOA Anwendungen. OOP München,

Modellbasierte Softwareentwicklung

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Graphical Modeling Framework

Spring Dynamic Modules for OSGi Service Platforms

Thema 5 Domain Specific Languages

SCHNELLEINSTIEG ZUM TOOL NODEBUILDER

JSP Grundlagen. JEE Vorlesung Teil 5. Ralf Gitzel

Telling TestStories Modellbasiertes Akzeptanz Testen Serviceorientierter Systeme

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

State Machine Workflow mit InfoPath Formularen für SharePoint 2010 Teil 6

Übung: Verwendung von Java-Threads

WIRTSCHAFTSINFORMATIK

Internet Explorer Version 6

XML Werkzeug XML Spy. Frank Heininger Axel Labuschke

Seminar Bassem Ben Helal

Es wird das Struts <html:option> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht.

Konzeption und Realisierung eines logikbasierten Anfragewerkzeugs für UML-Modelle

Architektur des agimatec-validation Frameworks

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Die Eclipse Rich Client Platform. Martin Lippert Consultant und Coach

Transkript:

Das Eclipse Modeling Framework (EMF) www.softwareexperts.de Dr. Frank Gerhardt fg@gerhardtinformatics.com Dieter Moroff D.Moroff@corag.de Dr. Stephan Eberle Stephan.Eberle@bosch.com

Agenda Einführung Eclipse Modelling Framework Demo Modellierung Generierung Runtime Objekt-Relationales Mapping Zusammenfassung, Fazit

Was ist EMF? Ursprünglich von IBM Implementierung von Essential MOF der OMG Heute Eclipse.org Aktuell EMF 2.2.0 Demnächst: zweite Auflage des EMF-Buchs

EMF ist kein graphisches Modellierungswerkzeug

Modellierungs-Werkzeuge Freie, open source und kostenlose Tools Topcased Omondo EclipseUML ediagram Argo + argo2ecore Kommerzielle Tools IBM Rational Software Architect (ehem. Rose) Borland Together Poseidon MagicDraw (demnächst)

Wo wird EMF verwendet? Eclipse RCP Anwendungen mit komplexem Domänenmodell UML2 Implementation von UML2 auf Basis von EMF (Analog wie UML auf Basis von MOF spezifiziert wird) Graphical Modeling Framework (GMF) Einfaches Erstellen von graphischen Modellen mit GEF und EMF Service Data Objects (SDO) Referenzimplementierung der JSR-235 mit EMF für SDO 1.0 Rational Software Development Platform (RSM, RAD) OmondoUML

Was ist EMF? 1. Ein Modellierungsspache (Metamodell) 2. Ein Code-Generator (mit Tools und Templates) 3. Ein neues Objekt-Modell für Java- Programme (Laufzeitumgebung) Modell Generator Output 1. ecore 2. JET/JMerge 3. EObject

Warum EMF? Code generieren MDSD (Model driven software development) Features der Laufzeitumgebung und des generierten Codes nutzen Roundtrip, wenn man wieder zurück ins Modell will Passt gut zu Eclipse RCP/SDK Schnell was machen, Prototyping

Wie wird EMF verwendet? UML ECore- Model XML- Schema Java- Modell Java- Edit Java- Editor

Drehbuch Mdl Datei importieren Ecore Editor zeigen, Topcased zeigen Gemodel Editor zeigen Generieren Generierten Code zeigen Starten Modell anlegen, speichern (XML zeigen), schließen, öffnen, undo/redo

Typisches Szenario Erzeugung eines EMF Modells Import UML (z.b. Rational Rose.mdl file) Import XML Schema Import annotated Java interfaces Direkte Erzeugung eines Ecore Modells mit dem EMF Ecore Editor oder Omondo s (freien) EclipseUML grafischen Editor Java Source-Code aus Modell generieren Iterativ Java Anwendung entwickeln Modell verfeinern; Java Source-Code generieren Modell-Instanz mit den generierten EMF Modell Editor füllen und testen EMF.Edit als Basis verwenden um ein eigenes Userinterface zu bauen

Model Import UML Rational Rose.mdlDateien direkt unterstützt Annotated Java Java Interface für jede Modell Klasse Annotations verwenden @model Tag um Modell- Definitionen einzuführen, die sich sonst nicht im Code ausdrücken lassen (z.b. Typ einer Collection) Keine zusätzlichen Tools erforderlich, Round-Trip möglich XML Schema Produziert komplizierteres EMF Modell als mit Java oder UML Spezielle Schematas notwendig, kann kein beliebiges Schema verwenden Ecore Modell (*.ecore file) Nur Generatormodell wird noch generiert.

Model Creation ECore Modell wird in einem Eclipse Projekt mittels eines Wizards erzeugt, Quellen siehe Modell Import Erzeugt wird: modelname.ecore Datei Ecore Modell im XMI Format Kanonische Form des Modells modelname.genmodel Datei Ein Modell um den Generator zu steuern Dekoratiert.ecore Datei EMF Code Generator ist selbst ein EMF.genmodel Editor.genmodel und.ecore Dateien werden automatisch synchronisiert.

Modell Editor Ein generierter (und angepasster) EMF Editor für Ecore Modelle Modelle können im Treeview zusammen mit dem Propertyview editiert werden Neue Komponenten (EClass, EAttribute, EReference, etc.) werden über die Popup-Menü im Treeview angelegt Namen, etc. werden im Propertyview editiert.

GenModel Editor Wiederum ein generierter und angepasster EMF.genmodel Editor Kontextmenü Eintrag um den Codegenerator zu starten: 1. Die Generate Model Code Aktion generiert den Code des Modells 2. Die Generate Edit Code Aktion generiert den Adapter-Code zur Unterstützung von Viewern 3. Die Generate Editor Code Aktion generiert eine vollständigen Eclipse Editor für das Modell 4. Die Generate All Aktion generiert alles zusammen Generation Eigenschaften können im Propertiesview verändert werden

EMF.Codegen - Tools GenModel Steuerung des Generators (Dekoratormodell) JMerge Mischt neu generierten Code mit verändertem Code und formatiert gemäß Eclipse Code Formatter Preferences JET Template Engine mit JSP-ähnlicher Syntax Auch außerhalb des EMF-Generator einsetzbar. Nature ermöglicht automatisches Übersetzen der JET- Templates Editieren mit JSP-Editor (z.b. Lomboz) oder speziellem JET Editor.

Demo - Tooling

Modellierung

OMG Modellebenen Modeling level M3 (Meta modeling language) Model definition Ecore «generates» JET Model implementation EMF Task Meta modeling tool development «instance of» M2 (Domain-specific language) Komponent Model «generates» JET «instance of» Komponent Editor Tool development M1 (User model) Petstore Model «generates» Petstore Decriptor «instance of» Application development M0 (Runtime instance) Petstore Deployment Application runtime

EMF Metamodell - ECore 0..n +esupertypes EClass abstract : boolean interface : boolean +eattributes 0..n EAttribute id : boolean +eattributetype 1 EDataType serializable : boolean = true 1 +ereferencetype +ereferences 0..n EReference containment : boolean container : boolean resolveproxies : boolean = true +eopposite 0..1

Beispiel eines EMF-Modells public /** interface @model /** @model /**/ Person @model */ { */ /** @model public public type="demo.conference.session" interface public final class Person interface Level { { { opposite="speaker" */ Conference List /** getspokensessions(); @model /** /** @model */ name /** @model name="beginner : EString */ */ boolean * @model public checksessions( String static type= demo.conference.adress gettitle(); final int BEGINNER = 0; DiagnosticChain /** @model diagnostics, /** containment="true" @model name="expert" type="java.lang.string" required="true" */ */ /** Program @model Map */ context); public type="demo.conference.person" List static getkeywords(); final int EXPERT = 1; opposite="spokensessions" List } //Level getadresses(); /** @model default="beginner" required="true" */ */ List getspeaker(); Level getlevel(); +participants +sessions /** @model transient="true" changeable="false" */ 0..* 0..* int getparticipantcount(); +theprogram public 1 interface Session { Session +mainspeaker title : EString... 1 <<0..*>> keywords : EString +spokensessions level : Level = Beginner +speaker date : Date participantcount : EInt 0..* +sessions 1..* +participants 0..* 0..* Person birthdate : Date firstname : EString surname : EString <<inv>> checksessions() <<datatype>> Date <<javaclass>> java.util.date 1..* +adresses <<enumeration>> Level Beginner Expert Adress street : EString zip : EString city : EString

Generierung

EMF - GenModel Marking-Model mit den zusätzlichen Generierungsinforma tion Automatische Synchronisation mit Ecore-Modell beim Reload GenModel-Editor ist Startpunkt für Generierung Ecore Strukturinformation (PIM) GenModel Plattforminformation (PSM)

JET Java Emitter Templates JET JET template template «is translated into» ClassGen Model generate() Code «invokes» JET JET generator generator

JMerge Integration von nichtgeneriertem Code Code mit @generated NOT wird beim Neugenerieren nicht überschrieben. /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public int getparticipantcount() { // TODO: implement this method to // return the 'Participant Count' attribute // Ensure that youremove @generated // or mark it @generated NOT throw new UnsupportedOperationException(); } /** * <!-- begin-user-doc --> * Liefert die Anzahl der Teilnehmer * <!-- end-user-doc --> * @generated NOT */ public int getparticipantcount() { return getparticipants().size(); }

EMF vs. MDA MDA-Prinzip Plattform unabhängige Modelle (PIM) Plattform spezifische Modelle (PSM) MOF (M3)-Metamodell EMF-Anwendung Ecore Modelle bis aus Verwendung <<datatype>> plattformunabhängig GenModel enthält Information für Plattform EMF-Runtime ECore implementiert EMOF (Essencial MOF) EMF verwendet die Prinzipien der MDA auf pragmatische Art und Weise für die Eclipse Plattform EMF ist kein universelles MDA / MDSD Framework

EMF als Basis für MDSD EMF zur Definition von Domain Specific Languages (DSL) Generierung des DSL-Metamodell mit EMF- Tooling Generierung von graphischen Editoren mit dem graphischen Modelling Framework (GMF) Erstellen von DSL Instanzen Codegenerierung aufgrund der DSL Modelle z.b mit openarchitectureware (http://www.eclipse.org/gmt/oaw)

Runtime

EMF-Objekte vs. POJOs Angereicherte Modellimplementierung Erweitert mächtige Runtime-Framework-Klassen Enthält modellspezifische Runtime-Logik-Anteile Vielfältiger und komfortabler Zugriff auf Modellinstanzen Zusätzliche Editierlogikschicht Darstellung von Modellinstanzen Editieren von Modellinstanzen

Runtime-Features Modell Semantikerhaltendes Handling von Referenzen bidirektionalen Referenzen Containment-Referenzen Change Notification von Settern im Modell an externe Observer/Adapter Generische Persistenz API Speichern von Modellen in ein oder mehreren Resourcen Cross-Resource-Referenzen und Lazy Loading Default-Implementierung für Dateien im XML/XMI-Format Effiziente reflektive API Laufzeitzugriff auf Ecore-Modelldefinition Reflektive Getter & Setter und Factory-Methode

Runtime-Features Edit Content-/Label-Provider zur Darstellung von Modellinstanzen in Views und Editoren Viewer-Refreshing bei Änderungen in Modellinstanz Command-basiertes Editieren von Modellinstanzen mit Undo/Redo-Möglichkeit

Advanced Runtime-Features Validator zum Prüfen der Modellkonsistenz Adapter zum Beobachten von Änderungen und/oder Erweitern des Verhaltens TreeIterator zum Iterieren über alle Knoten eines Modellbaums CrossReferencer zum Suchen nach Referenzen auf Modellobjekte ChangeRecorder zum Aufzeichnen Verarbeiten von Modelldeltas JET-Engine zur Generierung textbasierter Ausgaben aus Modellinstanzen

O/R-Mapping

O/R Mapping erstellen Zuordnung von Klassen/Attributen zu Tabellen/Tabellenfeldern mit Oracle TopLink Workbench:

O/R Mapping nutzen Abfragen/Ändern/Committen von Objekten aus/in Datenbank mit Oracle TopLink API:

O/R Mapping mit EMF EMF Persistence API EMF-Modell TopLinkResourceImpl TopLink Persistence API TopLink Add-Ons EMF Customization Layer EListFactory EMF Add-On O/R Mappings TopLink Runtime RDB (e.g. Oracle Database XE)

Demo O/R Mapping

Zusammenfassung, Fazit Pragmatisch, leistungsfähiges Toolkit für modellbasierte Entwicklung Vielenorts aber auch limitiert, z.b. kein Multithreading nur rudimentäre Validierung fehlende Datenbankanbindung Erfordert zeitweise Bereitschaft zu Kompromissen bzw. Vornahme von Erweiterungen Erfordert modellbasierte Denke, die z.t. noch wenig verbreitet ist

Zusammenfassung, Fazit Im Hintergrund teilweise sehr komplexe Architektur von EMF Kein universelles erweiterbares MDA Generatorframework Sehr gute Verbindung unterschiedlicher Modelle durch modellübergreifende Referenzen Idealer Ausgangpunkt für DSLs In Zukunft grosses Potential im Zusammenhang mit GMF

Zusammenfassung, Fazit Ideale Modellbasis für GEF Sehr schnell zu lauffähigen Modellen Einfacher Test des Modells mit generierten Editor Generierter Code Ausgangsbasis für eigene Editoren Echter Roundtrip möglich, nicht nur protected Regions Modell wie Source Code behandeln Nicht den generierten Code einchecken Im Nightly Build jedes Mal neu generieren Gefahr der Teamaufteilung in Modell-Gurus und Analphabeten

Danke für s Zuhören. Fragen? www.softwareexperts.de Dr. Frank Gerhardt fg@gerhardtinformatics.com Dieter Moroff D.Moroff@corag.de Dr. Stephan Eberle Stephan.Eberle@bosch.com

Resources EMF Overview http://download.eclipse.org/tools/emf/scripts/docs.php?doc=references/overv iew/emf.html EclipseCon 2005 http://www.eclipsecon.org/2005/ Models to Code with the Eclipse Modeling Framework Ed Merks, Dave Steinberg http://www.eclipsecon.org/2005/presentations/eclipsecon2005_tutorial1 1final.pdf Mastering Eclipse Modeling Framework Vladimir Bacvanski, Petter Graff http://www.eclipsecon.org/2005/presentations/eclipsecon2005_tutorial2 8.pdf Agile MDA, Stephen J. Mellor http://www.omg.org/agile/

Lizenz Dieser Vortrag ist lizenziert unter EPL mit Ausnahme der verwendeten Logos Er enthält Material aus den folgenden Tutorials Models to Code with the Eclipse Modeling Framework Ed Merks, Dave Steinberg http://www.eclipsecon.org/2005/presentations/eclipsecon2005_ Tutorial11final.pdf Mastering Eclipse Modeling Framework Vladimir Bacvanski, Petter Graff http://www.eclipsecon.org/2005/presentations/eclipsecon2005_ Tutorial28.pdf

Einführung Über MDA, Modellieren, Code- Generierung

Kontext Seit wann? Wieviele Downloads? Was ist ein Modell Wo kommt EMF her EMF wird z.b. extensiv in WSAD verwendet Was kann man damit machen

Was ist ein EMF Modell? Defining an EMF Model UML: "an EMF model is essentially the class diagram subset of UML" p. 14 XMI Annotated Java XML Schema Generating a Java Implementation

JET Prinzip: Compilierte Templates MyWriter.javajet MyWriter.java MyWriter.class Writer- Template JETCompiler Java- Writer- Source javac Java- Writer- Klasse EMF- Modell Generat

JET - Beispiel <%@ jet package="de.eclipseteam.jet.demo" class="htmldocwriter imports="org.eclipse.emf.ecore.* java.util.*" %> <% EPackage modelpackage = (EPackage)argument; %> <html> <head> <title>modeldokumentation</title> </head> <body> <h1>package <%=modelpackage.getname()%></h1> <% for ( Iterator ic = modelpackage.geteclassifiers().iterator(); ic.hasnext(); ) { EClassifier modelclassifier = (EClassifier)ic.next(); if ( modelclassifier instanceof EClass ) { EClass modelclass = (EClass)modelClassifier;

Adapter erstellen und nutzen (1) Vorgehen Adapter von AdapterImpl ableiten und implementieren public class MyAdapter extends AdapterImpl { } AdapterFactory von <ModelName>AdapterFactory ableiten und Adapter-Factory-Methoden für betreffende Modellelemente überschreiben public class MyAdapterFactoryextendsMyModelAdapterFactory { } adapt-methode aus AdapterFactory aufrufen und betreffendes Modellelement sowie gewünschte Adapterklasse übergeben MyAdapterFactory.INSTANCE.adapt(modelElement, MyAdapter.class);

Adapter erstellen und nutzen (2) Tipps & Hinweise Falls Adapter des gewünschten Typs bereits existiert, so wird kein neuer erzeugt sondern vorhandener zurückgeliefert Vereinbarung einer gemeinsamen Adapter- Factory-Methode für mehrere Modellelemente möglich, indem Adapter- Factory-Methode des gemeinsamen Superelements überschrieben wird