1. Génération de code
à partir d’un « modèle léger »
Laurent Guérin
Telosys Project Leader
Sogeti & OW2 Consortium
Paris - 24 novembre 2011
2. Introduction
Sogeti : Company Capgemini : Company
belongs to
: Plateform
Laurent Guérin : Person Telosys : Project
leads
laurent.guerin@sogeti.com
: IDE
located in
hosts
OW2 : Consortium
: License
France : Country
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 2
4. Contexte
• Constat :
– Généralisation de Java :-)
– Projet Java = projet lourd :-(
• Génération de code ?
Oui, mais …
– solution légère et efficace,
adaptée aux projets à cycle court
– solution simple, utilisable par tous
– environnement léger (installation en quelques
heures/minutes)
• Objectif « démarrage rapide »
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 4
5. Le projet Telosys
Method
Tools Framework
( code generation ) ( global & simple )
• Un framework global, auto-suffisant pour
construire une application complète
• Des outils (plugins Eclipse) pour générer le code
initial de l’application et guider le développeur.
Puis ouverture sur d’autres cibles…
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 5
6. Philosophie du projet
“Keep it simple and stupid” ( KISP ? )
– framework simple et léger
– « petits outils » (faciles à installer et à utiliser)
“Respects des standards”
– servlet/JSP/JSPX, JDBC, JPA, http, XML, …
“Ouverture”
– Open Source ( projet / OW2 consortium )
– Format ouvert (modèle léger = XML)
– Templates adaptables différentes cibles :
Telosys fwk, autres Frameworks Java, Flex, PHP, …
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 6
7. Outillage
• Ne pas réinventer la roue (il existe déjà de
nombreux outils), apporter une alternative
• Offrir une boite à outils intégrée dans Eclipse,
immédiatement utilisable par des développeurs
non initiés au MDD
• La génération de code pour tous !
- sophistication +
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 7
9. Le framework
• Framework global “all in one“
• Un seul jar (+ JDBC) => pas de "jar hell" !
• Basé sur des concepts simples
• Léger (servlet container + base de données)
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 9
10. « Global effect »
Un seul framework
qui couvre toutes les couches de l’application
Authenti-
cation
Presentation Application Business Persistence
Services
Screen Java Beans
Maps ( POJO ) DAO
XML conv
"VO" SQL
JSP + taglib Screen
AJAX Managers
Framework
Services Thin persistence
Javascript layer
Very simple objects
Natively AJAX Commons, logging, I18N, … ( "Pure POJO" )
• “Global” => moins de “glue”, moins d’objets
(empreinte mémoire réduite), moins de
configuration, … => plus homogène
• “Modulaire” (utilisation partielle)
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 10
11. Le paradigme « client-serveur »
• Une fois chargé dans le navigateur, un écran
dialogue avec le server via des requêtes AJAX
• Découplage ( facilite la génération de code )
Client-side http Server-side
<request screen-name="Employee"
screen-id="0" action="get" >
</request> Screen
Manager
Action
<response screen-name="Employee"
screen-id="0" action="get" >
<return code="0" message="Ok" >
</return>
Framework
JavaScript
<data>
<employee id="23" lastName="Wayne"
firstName="John" manager="0" email="" />
</data>
</response>
Service
Service
http://myhost:8080/.../Add.svc?p1=2&p2=6
<response service-name="Add">
<return code="0" message="Ok" />
<values> <value result="8" /> </values>
<data> </data>
</response>
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 11
12. La persistance
• Une alternative aux “ORM” classiques
ORM : JPA (or Hibernate) …
High level & "Object Oriented"
Java objects
Hides the complexity rule the persistence
Sometimes misunderstood by the developers
( "lazy/eager" loading, cache effects, DB
"attached/detached" entities,
"owning side"/"inverse side" links, … ) new new
Telosys DAL (based on DAO pattern)
Intermediate level & "Record Oriented" Database records
One Bean = One Record rule the persistence
The developer keeps the control
No links, no cache, no byte-code enhancement
DB
Very simple API : load, save, insert, update,
exists, loadList, updateList, … new legacy
JDBC API Les deux sont utiles.
Low level Au choix …
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 12
13. Un framework ne suffit pas…
Outils
Framework « boilerplate »
Plate-forme (Java EE)
Application
Code générique Code spécifique
• Le problème : le code technique et spécifique
• Les outils de génération de code sont une
réponse possible.
Exemples :
Ruby on Rails, Grails, Spring Roo, etc…
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 13
15. Approche « Model First »
• Démarche MDD classique, MDA, etc …
• « Model - First » => concevoir un model !
– investissement initial important
– nécessite de respecter le process (formation)
• Incompatible avec un démarrage rapide
MODEL Split !
XMI
Service
name
+port 0..n
( XML )
Port Binding Port Type
1
+binding name
name name Param
1 +type
name
StartWithExtensions
+output 0..1 +operation 0..n +operation 0..n
+input Input
0..1 +input
BindingOperation Operation
0..1
Code
name name
1 0..1 Output
+output
+message 1
+fault 0..n +fault 0..n
Message
Fault +message
BindingFault name
name
1 1
+part 0..n
Part
name
TOOL
Template
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) www.telosys.org 15
16. Approche « scaffolding »
• Scaffolding de type « Database - First »
• Très efficace ( rapide ) Database
• Mais pas d’action possible sur l’outil
Metadata
de génération
• Pas assez d’informations … TOOL
– Noms/types des attributs Java
– Règles de validation : min, max, regexp, … Template
– Représentation des Booléens
(1/0, "T"/"F", … )
Code
– etc …
• Il faudrait injecter/stocker des informations
complémentaires… un modèle ?
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 16
17. Les « wizards »
• Bien intégré dans l’IDE :-) “Java Model”
org.eclipse.jdt.core
• Informations en entrée : Workspace
files
– Saisie utilisateur :-( I.D.E.
– Artefacts existants dans le projet
• Java class Java class
• WSDL file Java classes
• Génération unitaire,
non automatisable
• Peuvent être utilisés comme Bulk
Code
generation
des « accélérateurs »
( après la génération de masse )
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 17
19. Expression du besoin
• Les souhaits :
– générer rapidement le code initial des écrans de
DB
mise à jour des entités d’une base de données Metadata
(notion de scaffolding / database first)
– avec un outil simple, bien intégré dans l’IDE
(comme les wizards)
Template
– modifier/adapter les « patrons » de
génération (notion de templates)
– modifier (raffiner) les informations brutes
issues des méta-data, pouvoir y ajouter
des informations complémentaires Modèle ?
– lancer des générations de masse
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 19
20. Telosys Tools : le processus
• Un processus en 3 étapes
Template
Database updates customizes
Metadata
modify
& add
information Code
Repository Code
generator generator
generates
Repository
(Lightweight
updates model)
1 2 3
Approche Adapter / enrichir Générer
“Database-first” le “modèle léger” le code
pour initialiser un initial
“modèle léger”
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 20
21. Telosys Tools
• Modèle ( « léger » )
– seules les entités sont gérées
– représentation graphique inutile
– simple fichier XML (indépendant d’Eclipse)
– adhérence Eclipse : limitée à l’ IHM
• Moteur de génération de code
( « templating engine » )
– simple
– connu
– open source
– utilisable avec les wizards Basique
mais suffisant
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 21
25. Les artefacts générés N fois
• VO Bean (POJO = “entity record”)
• VO List (liste de bean avec tri & sélection) Code
generator
• DAO code « jetable »
• Convertisseurs
Book
.java
BookDAO
BookConv VO Bean .java
.java
Data
Database
XML XML Access
<…>
VO List Layer Book
</ … >
Table
Con- BookList
verters .java
DataSet Parsers
Files
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 25
26. Persistance : objet ou record ?
• Approche “graphe d’objets” : les liens peuvent
être générés (persistance de type JPA)
Bean
@ManyToOne Code
@OneToMany generator
@ManyToMany
@OneToOne
• Approche “record” : les liens ne sont pas
nécessaires, assemblage possible par
“agrégation”
Code
Bean generator
Aggregation
(composite) DAO
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 26
27. Les artefacts générés 1 fois
code « initial » à reprendre
Code
(ne pas régénérer après évolution) generator
request BookMgr BookProc
ScreenMap .java .java
response ScreenManager ScreenProcedure
V C
AJAX acts on …
BookData
.java Book (bean) M
ScreenData
AuthorList
Book.jsp (aggregation
( or .jspx)
0 .. N objects) Shop (bean)
Book.js DataSet
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 27
29. Conventions
• "Framework" => "Frame" !
• "CoC" ( Conventions over Configuration )
– Les développeurs savent où placer les fichiers
– Les outils savent où générer les fichiers et n’ont pas à
modifier les fichiers de configuration
• Exemple : Java : 1 package Web : 1 répertoire
1 écran = +
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 29
30. Qu’est-ce qu’un projet Telosys ?
• Une application Java Web standard
src (server side)
TelosysTools (+) déploiement
WebContent (client side) .war
• Le projet peut être organisé pour Maven,
ou pas …
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 30
31. Démo avec Eclipse
• Création d’un nouveau projet Telosys …
1) Création d’un projet
« Dynamic Web Project » 2) Importation du
« Telosys starter kit »
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 31
32. Démo avec Eclipse (suite)
3) Tester le
projet (run)
4) Définir les
conventions
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 32
34. Vue d’ensemble
Utilisable en ligne Tout peut être fait
de commande dans Eclipse
Editors Wizards Properties
Repository Repository Template
Database .dbrep .vm
Meta-data generator ( XML )
Code
.java
generator
Context .jsp / .jspx
.js
Velocity
other …
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 34
35. Généralisation : nouvelles cibles
• Si ça fonctionne pour le framework Telosys …
ça peut aussi être utilisé pour …
d’ autres frameworks Java
- Spring MVC
- Vaadin
- etc…
d’ autres langages/plates-formes
- Flex (MXML & Action Script)
- PHP
- etc …
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 35
36. La démo …
• Connexion à la base de données
• Génération du « repository »
• Modification/adaptation du « repository »
• Génération des objets basiques (Bean, List, DAO,
Conv.)
• Génération des écrans (server side & client side)
• Modification des template
• Gestion des liens inter-entités
• Génération des beans pour JPA & Validators
• Ajout d’un nouveau template spécifique
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 36
38. Conclusion
Base de Modèle Outils Code initial
données léger
et le projet est
sur les rails…
Gain (J/H)
Temps de mise en œuvre
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 38
39. Le future
• Roadmap 2012 / principales évolutions
– Repository
• Extension (sans limite) des informations pour chaque
entité et chaque champ
• Templates pour des collections d’entités
– Screens design
• Release officielle du plugin Screen Builder (WYSIWYG)
–Portails
• Portlet JSR-168 pour embarquer des écrans Telosys
dans une page de portail
– NoSQL
• DAO pour GAE/BigTable & Cassandra
– etc …
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 39
50. Demo (cont’d)
• Generator templates
– The generator is based on "Velocity"
– The templates ( ".vm" files ) can be modified in order
to conform with each project requirements
• coding style
• comments
• etc…
i.e. :
add/remove
serialization
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 50
51. Demo (cont’d)
• Entities links
– The foreign keys can be used to generate
links between entities
–Useful for JPA beans generation
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 51
52. Demo (cont’d)
• Generator project’s variables
– Each project can
define its own
specific variables…
… and use them
in the templates
#if ( $bean_jpa == "1" )
$link.jpaAnnotations(4)
#end
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 52
53. Demo (cont’d)
• Adding a new specific template
– 1) create the new “.vm” file vo_doc_html.vm
– 2) add it in the “templates.cfg” file
HTML documentation ; ${BEANNAME}.html ; doc/html ; vo_doc_html.vm
Title File Folder Template
–3) use it in the tool …
53
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys www.telosys.org
( http://www.telosys.org )
54. Demo (cont’d)
• Using wizards
New …
www.telosys.org
Devoxx 2011 – Laurent Guérin – JAVA scaffolding with Telosys ( http://www.telosys.org ) 54