Génération JavaEEavec
EEF et Acceleo
Frédéric Madiot - Obeo
(twitter: @fmadiot)
© C
opyr
ight
201
1 O
beo
De l'intention au code
«Gérer des personnes ayant un nom, un prénom et une date de
naissance»
Person.javaIPerson.javaPersonDAO.javaperson.hbm.xml
hibernate.cfg.xmlstruts-config.xmlPersonSearch.jspPersonList.jspPersonDetail.jspPersonForm.java
PersonSearchAction.java...
Hibernate / Spring / Struts
© C
opyr
ight
201
1 O
beo
Model-Driven Development
Automatiser la production de code à partir de modèles
Edition de modèles
Générationde code
Codage descompléments
Efficacité de la modélisation ? Adaptabilité ?
Traçabilité Code / Modèle ?
© C
opyr
ight
201
1 O
beo
L'approche DSL
Gérer la complexité
Restreindre les concepts manipulés au strict nécessaire
Utiliser le vocabulaire des personnes en charge de la modélisation
Cadrer les développements
Produire du code conforme aux choix techniques
Eviter le codage répétitif
Cadrer la modélisation
Suivre la démarche définie sur le projet
Outiller l'édition et l'exploration de modèles
5
© C
opyr
ight
201
1 O
beo
Principe
Définition du domaine
Choix des éditeurs
Exploitation des modèles
1
23
Vocabulaire métier Concepts Relations Propriétés
Types de représentation Graphique Textuelle Tabulaire Arborescente Formulaire
Outils MDE Générateurs Validateurs Comparateurs Transformateurs etc
© C
opyr
ight
201
1 O
beo
Entités métier
Block : conteneur d'entités
Entity : entité du domaine
Attribute : propriété d'une entité
Reference : lien reliant deux entités
Inheritance : relation d'héritage
Composition : relation de contenance
Exemples de DSL "SI"
Cinématique de navigation
Scenario : enchaînement d'écrans
Screen : écran
Transition : passage d'un écran à un autre
Action : action métier ou action IHM
SOA (Composants et Services)
Component
Service
Operation
DTO
© C
opyr
ight
201
1 O
beo
Eclipse Modeling Project
Projet Top Level Eclipse Modeling Framework
EMF Core, CDO, Compare, Query
Graphical Modeling Project
GMF, Graphiti
Model 2 Text
Jet, Acceleo, XPand2
Model 2 Model
ATL
Textual Modeling Framework
Xtext
Model Development Tools
UML2, OCL, BPMN2, MoDisco, ...
EMF Technology
© C
opyr
ight
201
1 O
beo
DSLs
entity.ecoresoa.ecore
cinematic.ecore
Person
Name
FirstName
BirthDate
String
Date
De l'intention au code
«Gérer des personnes ayant un nom, un prénom et une date de
naissance»
Editeurs de modèles
Templates de génération
Person.javaIPerson.javaPersonDAO.javaperson.hbm.xml
hibernate.cfg.xmlstruts-config.xmlPersonSearch.jspPersonList.jspPersonDetail.jspPersonForm.java
PersonSearchAction.java...
© C
opyr
ight
201
1 O
beo
Modelisation graphique
GMF
© C
opyr
ight
201
1 O
beo
Modélisation textuelle
XText
© C
opyr
ight
201
1 O
beo
Modélisation arborescente
Browser MoDisco
© C
opyr
ight
201
1 O
beo
Modélisation en mode formulaire
EEF
Edition des propriétés avec des widgets évolués
Paramétrage du rendu graphique
Approche Master-Detail
Intégration complète et native EMF
© C
opyr
ight
201
1 O
beo
Principe EEF
Génération de l'éditeur guidée par des modèles
© C
opyr
ight
201
1 O
beo
Indigo -> EEF 1.0
Rich text widget
Convergence vers EMF.edit
Génération du code des éditeurs EMF avec Acceleo
Héritage des customisations natives EMF
Intégration dans le package Modeling
Amélioration de la robustesse
Sortie du statut incubation
© C
opyr
ight
201
1 O
beo
Person
Name
FirstName
BirthDate
String
Date
De l'intention au code
«Gérer des personnes ayant un nom, un prénom et une date de
naissance»
Editeurs de modèles
Templates de génération
Person.javaIPerson.javaPersonDAO.javaperson.hbm.xml
hibernate.cfg.xmlstruts-config.xmlPersonSearch.jspPersonList.jspPersonDetail.jspPersonForm.java
PersonSearchAction.java...
DSLs
entity.ecoresoa.ecore
cinematic.ecore
© C
opyr
ight
201
1 O
beo
Acceleo
Principes
Templates + OCL + Java
Initialisation automatique à partir d'un exemple de code
Zones de code protégé
Surcharge de templates
Environnement d'édition des générateurs
Complétion
Colorisation syntaxique
Profiling
Debugging
Environnement d'exécution
Vue Result
© C
opyr
ight
201
1 O
beo
Entity -> Hibernate
"POJO"
Interface "DAO"
Fichiers de mapping
Génération de 2 type d'impl
Directe (Old School)
Spring
Tests unitaires
Script de création de schéma SQL
Exemples de générateurs JavaEE
SOA -> Spring
Pour chaque service du modèle
Une interface Java
Un squelette d'implémentation
Les classes DTOs
Descripteurs XML réalisant le lien entre les différentes couches
Cinematic -> Struts
Formulaires, Actions
JSPs, CSS, JS
struts-config.xml
Tiles-def + validation
© C
opyr
ight
201
1 O
beo
Offres Obeo complémentaires
Acceleo Traceability
Prévisualisation
Gestion du code hors balises
Traçabilité code -> modèle
Traçabilité modèle -> code
Traçabilité code -> template
Acceleo Premium
Support
Acceleo Traceability
Long Term Support
© C
opyr
ight
201
1 O
beo
Indigo -> Acceleo 3.1
Evolutions du langage de templates
Gestion des commentaires
Documentation affichée dans la complétion et le hover
© C
opyr
ight
201
1 O
beo
Indigo -> Acceleo 3.1
Edition des templates
Meilleure détection d'erreurs
Gestion des tags TODO et FIXME
© C
opyr
ight
201
1 O
beo
Indigo -> Acceleo 3.1
Edition des templates
Outline amélioré
Options de refactoring
extract as query, pull up, generate documentation
Nouveau wizard de création de projet
Intégration dans une chaîne de build
Génération de fichiers Ant et Maven
Amélioration des performances
Optimisations du moteur
Sérialisation des templates en format binaire (option)
© C
opyr
ight
201
1 O
beo
Merci !
Acceleo
www.eclipse.org/acceleo
EEF
www.eclipse.org/modeling/emft/?project=eef
ObeoNetwork
www.obeonetwork.com
Blogs
http://fmadiot.blogspot.com/
http://mariot-thoughts.blogspot.com/
http://eclipsemde.blogspot.com/
http://sbegaudeau.tumblr.com/
http://eef-modeling.blogspot.com/