SlideShare une entreprise Scribd logo
1  sur  67
Télécharger pour lire hors ligne
Development
accelerator
... ou comment faire
un « départ lancé »un « départ lancé »
JUG Nantes
14 avril 2014
Ver 1.2
Qui sommes nous ?
Laurent Guérin (Project Leader)
@ltguerin
laurent.guerin@sogeti.com
Benoit Wilcox (Commiter)
@WilcoxBenoit
Ludovic Chaboud (Commiter)
@ludovic_chaboud
Telosys Tools @telosys http://tools.telosys.org 2
@WilcoxBenoit
benoit.wilcox@sogeti.com
@ludovic_chaboud
ludovic.chaboud@sogeti.com
Telosys Team
http://labs.sogeti.com/
Un parcours en 3 étapes
Telosys Tools @telosys http://tools.telosys.org 3
Principes
Généraux
1
Telosys Tools @telosys http://tools.telosys.org 4
La juste part du développeur
Application
Framework 1 Framework 2
Code stéréotypé
& répétitif
Développeur Générateur
Telosys Tools @telosys http://tools.telosys.org 5
Plate-forme ( ie Java EE )
Comment réduire le volume de code à réaliser ?
Frameworks & « boilerplate » réduction du code technique
(code générique, « factorisable »)
Mais il reste toujours une partie du code qui est spécifique et
répétitive (et sans valeur ajoutée)
La génération de code permet d’automatiser cette partie
• Model Driven Architecture (cf OMG)
• Approche « Model First »
=> concevoir et maintenir un modèle
(UML, DSL, …)
Génération de code - Approche « MDA »
MODEL
Service
name
Port
name
0..n+port 0..n
Port Type
name
Binding
name
1
+binding
1
1
+type
1
Param
name
Output
Input
StartWithExtensions
BindingOperation
name
0..n+operation 0..n
0..1 +input0..1
0..1+output 0..1
Operation
name
0..1
+input
0..1
0..10..1
0..n+operation 0..n
11
X M I
( XML )
Telosys Tools @telosys http://tools.telosys.org 6
Code
Part
name
Message
name
0..n+part 0..n
1+message 1
Output
BindingFault
Fault
name
1
+message
11
name
0..n
name
0..1
+output
0..1
0..n+fault 0..n
11
1
+fault 0..n
Template TOOL
Processus lourd, ne permet pas un démarrage rapide
• Littéralement « échafaudage »
• Définition Wikipedia : (incomplète)
• Largement utilisé dans certains écosystèmes
Génération de code - Approche « Scaffolding »
Scaffolding is a meta-programming
method of building database-backed
software applications.
Telosys Tools @telosys http://tools.telosys.org 7
• Largement utilisé dans certains écosystèmes
– Ruby ( RoR - Ruby On Rails )
– Groovy ( Grails – Groovy on Rails )
• Et pour Java?
– Spring ROO (Boite noire, lié à Spring, AspectJ )
– DALI / Eclipse (JPA mapping only)
– AppFuse (command line + web)
• Approche « Database First »
• Efficace (permet un démarrage rapide)
• Outil de type « boite noire », généralement non adaptable
Génération de code - Approche « Scaffolding »
Database
TOOL
Code
Metadata
Telosys Tools @telosys http://tools.telosys.org 8
Pas de templates :
- Comment personnaliser la génération de code ?
Pas de modèle :
- Comment ajouter des informations (en + des méta-data) ?
- Comment modifier (durablement) les méta-data ?
noms/types des attributs Java,
règles de validation (min, max, regexp, …),
représentation des Booléens (1/0, "T"/"F", … ), etc
Telosys Tools: une nouvelle approche
« Database first » scaffolding avec un modèle léger et des templates
ADAPTABLE
Telosys Tools @telosys http://tools.telosys.org 9
Philosophie
Keep it simpleKeep it simpleKeep it simpleKeep it simple
and pragmaticand pragmaticand pragmaticand pragmatic
Telosys Tools @telosys http://tools.telosys.org 10
Plugin
Code Generator
Environnement de travail : Eclipse + plugin + templates
Model Editor
Workspace
Community templates
GitHub
download
templates
install
plugin
Telosys Tools @telosys http://tools.telosys.org 11
Code GeneratorModel Editor
Template Editor
Database Editor
Model Generator
Que peut-on générer ?
Tout fichier de type « texte » :
Java, XML, JSP, PHP, Scala, JavaScript, HTML, etc…
Principe :
1 entity N templates N targets
1 bean
Telosys Tools @telosys http://tools.telosys.org 12
N entities 1 template 1 target
model
(all entities
with links)
1 controller
1 web page
1 list
Ça ressemble à quoi un template ?
http://velocity.apache.org/
Objets du model
« entities »
Velocity Template Language (VTL)
• Références aux objets : $, ${…}
• Directives : #set, #if, #foreach, …
• Commentaire : ## #* .. *#
Telosys Tools @telosys http://tools.telosys.org 13
Objets de
l’environnement
Ce n’est pas magique
Ne pas chercher
à tout générer
(il faut savoir s’arrêter)
code code
généré non généré
Application
Code stéréotypé
& répétitif
Telosys Tools @telosys http://tools.telosys.org 14
Estimer le gain
de productivité
Démo
1
Telosys Tools @telosys http://tools.telosys.org 15
AngularJS
Spring MVC – JPA
2
Telosys Tools @telosys http://tools.telosys.org 16
• Fonctionnalités de CRUD :
– Création, Recherche, Modification, Suppression d’entités
• Internationalisation (i18n) :
– Libellés français / anglais
– Gestion des dates
Fonctionnalités
Telosys Tools @telosys http://tools.telosys.org 17
Architecture générale
Tomcat Server
Webapp
Spring MVC + JPA
bookstore-
spring
2 Projets
Telosys Tools @telosys http://tools.telosys.org 18
Base
de données
relationnelle
Spring MVC + JPA
Webapp
AngularJS
spring
bookstore-
angularjs
Application 1 :
Spring MVC
+
Spring MVC + AngularJS
Telosys Tools @telosys http://tools.telosys.org 19
+
Spring Data JPA
Application 1
Spring MVC + Spring Data JPA
Base de données
relationnelle
JPA
Spring
Data JPA
Spring
MVC
Web REST
Telosys Tools @telosys http://tools.telosys.org 20
Utilisateur
Spring MVC + Spring Data JPA
Présentation
Spring MVC
Service
JPA
Persistance
Spring
3 couches
Telosys Tools @telosys http://tools.telosys.org 21
Contrôleurs
Pages Web
Service DAO
Points de vigilance sur JPA (Java Persistence API)
Spring MVC + Spring Data JPA
Présentation
Spring MVC
Service
JPA
Persistance
Spring
Telosys Tools @telosys http://tools.telosys.org 22
Contrôleurs
Pages Web
Service DAO
Points de vigilance sur JPA (Java Persistence API)
• Concepts mal maîtrisés voir inconnus des développeurs
– Session Hibernate / Entity Manager :
• Objets « attachés » et « détachés »
• Mise à jour différée de la base de données
– Règles de persistance des liens entre les objets
• Notion « owning side » et « inverse side »
Spring MVC + Spring Data JPA
Telosys Tools @telosys http://tools.telosys.org 23
• Notion « owning side » et « inverse side »
• Problème de performances
– Chargement à la volée :
• problème du « N+1 requêtes »
• Erreurs techniques si l’objet est « détaché »
• Comportements masqués et objets « pollués »
– Chargement à la volée :
• Utilisation d’objets « proxy » et de collections « proxy »
Notre solution :
Isoler JPA dans la couche de persistance
Spring MVC + Spring Data JPA
Présentation Service
JPA
Contrôleurs
Pages Web
Service DAO
Persistance
Telosys Tools @telosys http://tools.telosys.org 24
Pages Web
Objets
d’affichage
Mapping Entités JPA
Transactions
Spring MVC + Spring Data JPA
Partie générée par Telosys :
« Controller »
BookController
« Service »
BookService
« DAO »
BookJpaRepository
Base de
données
relationnelle« Controller »
BookRestController
Telosys Tools @telosys http://tools.telosys.org 25
BookController
Utilisateur
REST
Pages
GET, POST,
PUT, DELETE
BookRestController
Web
Aspects techniques
• Web : Twitter bootstrap 3, Tiles
• RESTful : GET, POST, PUT, DELETE
• Tests unitaires : Couverture de 90%
• Analyse SONAR : Rules compliance : 91%
Telosys Tools @telosys http://tools.telosys.org 26
Organisation et dépendances des bundles
Spring MVC
front-springmvc
Service
Présentation
Services
service-springdatajpa
Telosys Tools @telosys http://tools.telosys.org 27
Spring Data JPA
persistence-springdatajpa
Database
Persistance
Database
Spring MVC + Spring Data JPA
Démo
2
Telosys Tools @telosys http://tools.telosys.org 28
Application 2 :
AngularJS
AngularJS + Spring MVC REST
Telosys Tools @telosys http://tools.telosys.org 29
AngularJS
• Fonctionnalités de CRUD :
– Création, Recherche, Modification, Suppression d’entités
• Internationalisation (i18n) :
– Libellés français / anglais
– Gestion des dates
Fonctionnalités
Telosys Tools @telosys http://tools.telosys.org 30
AngularJS + Spring MVC REST
Application 1
Base de
données
relationnelle
JPA
Spring
Data JPA
Spring
MVC
REST
Telosys Tools @telosys http://tools.telosys.org 31
Application 2
relationnelle
AngularJS
Utilisateur
Web
AngularJS + Spring MVC REST
URLs des services REST
• Récupérer la liste des entités :
– GET : /rest/[entity]
• Récupérer une entité :
– GET : /rest/[entity]/[id]
• Créer une entité :
– POST : /rest/[entity]
Telosys Tools @telosys http://tools.telosys.org 32
– POST : /rest/[entity]
• Modifier une entité :
– PUT : /rest/[entity]/[id]
• Supprimer une entité :
– DELETE : /rest/[entity]/[id]
AngularJS + Spring MVC REST
Partie générée par Telosys :
« Controller »
BookCtrl
_____________________________________________
load
loadAll
save
delete
_____________________________________________
$scope.book
REST
« Service »
Book
______________________________________
get
getAll
create
update
delete GET,
Telosys Tools @telosys http://tools.telosys.org 33
$scope.book
$scope.books
delete
Page de modification
book_form.html
Page de recherche
book_list.html
GET,
POST,
PUT,
DELETE
Utilisateur
Web
Aspects techniques
• Basé sur le projet de démarrage « Seed »
de Angular :
– https://github.com/angular/angular-seed
• Gestion de l’internationalisation (i18n) :
Telosys Tools @telosys http://tools.telosys.org 34
• Gestion de l’internationalisation (i18n) :
– https://github.com/angular-translate/angular-translate
• Intégration de Twitter bootstrap 3 avec AngularStrap :
– http://mgcrea.github.io/angular-strap
Organisation et dépendances des bundles
Spring MVC
front-springmvc
Service
Présentation
AngularJS
front-angularjs
MVC Javascript
Service layer
Telosys Tools @telosys http://tools.telosys.org 35
Spring Data JPA
persistence-springdatajpa
Database
Service
Persistance
Database
Service layer
service-springdatajpa
AngularJS + Spring MVC REST
Démo
2
Telosys Tools @telosys http://tools.telosys.org 36
Restfull
Spring Data
HATEOAS
3
Telosys Tools @telosys http://tools.telosys.org 37
Spring Data REST dans l'écosystème Spring
Spring Data REST
Spring MVC
Spring Data
JPA
Spring Data
Neo4J
Spring Data
MongoDB
Spring Data Commons
Spring Data
Gemfire
Telosys Tools @telosys http://tools.telosys.org 38
Spring Data, un socle commun
Spring Data REST
Spring MVC
Spring Data
JPA
Spring Data
Neo4J
Spring Data
MongoDB
Spring Data Commons
Spring Data
Gemfire
Telosys Tools @telosys http://tools.telosys.org 39
Spring Data Commons
• Couche d'abstraction partagée par les différents projets
•Ex : Repository, Génération dynamique des requêtes à
partir des nom de méthodes, audit …
Spring Data : Différents fournisseurs de données
• API de manipulation d'une source de données spécifiques
Spring Data REST
Spring MVC
Spring Data
JPA
Spring Data
Neo4J
Spring Data
MongoDB
Spring Data Commons
Spring Data
Gemfire
Telosys Tools @telosys http://tools.telosys.org 40
• API de manipulation d'une source de données spécifiques
• Implémentation implicite des opérations les plus courantes (CRUD)
• Plusieurs fournisseurs de données :
• JPA, MongoDB, Neo4J, Gemfire, Redis, Hadoop, SolR, Couchbase, elasticsearch,
cassandra et dynamoDB
• Supportés par Spring Data REST :
• JPA, MongoDB, Neo4J et Gemfire (cache distribué, VMWare)
Spring Data REST
Spring Data REST
Spring MVC
Spring Data
JPA
Spring Data
Neo4J
Spring Data
MongoDB
Spring Data Commons
Spring Data
Gemfire
Telosys Tools @telosys http://tools.telosys.org 41
Spring Data REST
• S'appui sur Spring MVC pour l'exposition de services.
• Les services exposés sont RESTful, approche HATEAOS
• S'appui sur les interfaces Repository pour la génération des services
CRUD et de l'API /search
Spring Data REST
Spring Data REST
Spring MVC
Spring Data
JPA
Spring Data
Neo4J
Spring Data
MongoDB
Spring Data Commons
Spring Data
Gemfire
Telosys Tools @telosys http://tools.telosys.org 42
Stack de l'application générée
• Spring Data REST 2.0.1.RELEASE
• Spring Data JPA 1.5.1.RELEASE
• Hibernate 4.2
Spring Data REST
Book
@Entity
Telosys Tools @telosys http://tools.telosys.org 43
Spring Data REST
Book
@Entity
BookRepository
CrudRepository
Telosys Tools @telosys http://tools.telosys.org 44
Spring Data REST
Book
@Entity
BookRepository
CrudRepository
Spring Data REST
@Controller, Dispatcher
Servlet…
Telosys Tools @telosys http://tools.telosys.org 45
Spring Data REST
Book
@Entity
BookRepository
CrudRepository
Spring Data REST
@Controller, Dispatcher
Servlet…
Telosys Tools @telosys http://tools.telosys.org 46
API CRUD
• GET
• POST
• PUT
• DELETE
Spring Data REST
Book
@Entity
BookRepository
CrudRepository
Spring Data REST
@Controller,
ServletDispatcher …
Telosys Tools @telosys http://tools.telosys.org 47
API CRUD
• GET
• POST
• PUT
• DELETE
API Search
/search
Toutes les méthodes
définies dans l'interface
BookRepository.
Spring Data REST
Book
@Entity
BookRepository
CrudRepository
Spring Data REST
@Controller,
ServletDispatcher …
Telosys Tools @telosys http://tools.telosys.org 48
API CRUD
• GET
• POST
• PUT
• DELETE
API Search
/search
Toutes les méthodes
définies dans l'interface
BookRepository.
Json Schema
/schema
Description des
propriétés de l'entité.
Spring Data REST
Book
@Entity
BookRepository
CrudRepository
Spring Data REST
@Controller,
ServletDispatcher …
Partie générée par
Telosys Tools
• Entités
• Repositories
• "FindBy" pour Many-To-One
• Validators
• Configuration de l'application
Telosys Tools @telosys http://tools.telosys.org 49
API CRUD
• GET
• POST
• PUT
• PATCH
• DELETE
API Search
/search
Toutes les méthodes
définies dans l'interface
BookRepository.
Json Schema
/schema
Description des
propriétés de l'entité.
HATEOAS ?
" HATEOAS – the
word, there's no
pronounciation for. "
Telosys Tools @telosys http://tools.telosys.org 50
pronounciation for. "
(Ben Hale, SpringOne2GX 2012)
HATEOAS ?
" HATEOAS – the
word, there's no
pronounciation for. "
(Ben Hale, SpringOne2GX 2012)
Telosys Tools @telosys http://tools.telosys.org 51
Hypermedia As The Engine Of Application State
HATEOAS ?
Telosys Tools @telosys http://tools.telosys.org 52
Model of RESTful maturity by L.Richardson
HATEOAS ?
Un format ? Un standard ?
Telosys Tools @telosys http://tools.telosys.org 53
HATEOAS ?
Collection+JSON – Hypermedia Type
HAL – Hypertext Application Language
Un format ? Un standard ?
Telosys Tools @telosys http://tools.telosys.org 54
Json-LD : JSON for Linking Data
W3C depuis 16/01/2014
SIREN
JSON Schema & JSON Hyper-Schema
HATEOAS ?
Un format ?
Collection+JSON – Hypermedia Type
HAL – Hypertext Application Language
Un standard ?
Telosys Tools @telosys http://tools.telosys.org 55
Json-LD : JSON for Linking Data
W3C depuis 16/01/2014
SIREN
JSON Schema & JSON Hyper-Schema
HATEOAS ?
Collection+JSON – Hypermedia Type
HAL – Hypertext Application Language
Un format ? Un standard ?
Telosys Tools @telosys http://tools.telosys.org 56
Json-LD : JSON for Linking Data
W3C depuis 16/01/2014
SIREN
JSON Schema & JSON Hyper-Schema
HAL : Hypertext Application Language
Telosys Tools @telosys http://tools.telosys.org 57
HAL : Hypertext Application Language : Example
{
"isbn": "2-212-12232-2",
"title": "Programmer en Java",
"price": 35,
"quantity": 23,
"discount": false,
"availability": true,
"bestSeller": true,
"_links": {
Telosys Tools @telosys http://tools.telosys.org 58
"_links": {
"self": {"href": "http://localhost:8080/bookstore-rest/books/1" },
"author": {"href": "http://localhost:8080/bookstore-rest/books/1/author"},
"page_extract": {
"href": "http://localhost:8080/bookstore-rest/books/1/author/extract{?page}",
"templated" : true
}
}
}
HAL : Hypertext Application Language : Example
{
"isbn": "2-212-12232-2",
"title": "Programmer en Java",
"price": 35,
"quantity": 23,
"discount": false,
"availability": true,
"bestSeller": true,
"_links": {
Telosys Tools @telosys http://tools.telosys.org 59
"_links": {
"self": {"href": "http://localhost:8080/bookstore-rest/books/1" },
"author": {"href": "http://localhost:8080/bookstore-rest/books/1/author"},
"page_extract": {
"href": "http://localhost:8080/bookstore-rest/books/1/author/extract{?page}",
"templated" : true
}
}
}
Liens,
actions
HAL : Hypertext Application Language
• Pour implémenter ou consommer des services "HAL" …
Telosys Tools @telosys http://tools.telosys.org 60
Démo
3
Telosys Tools @telosys http://tools.telosys.org 61
Arrivée
4
Telosys Tools @telosys http://tools.telosys.org 62
Et maintenant
à vous de jouer !
Vous pouvez…
Telosys Tools @telosys http://tools.telosys.org 63
Vous pouvez…
- Tester
- Créer vos templates
- Contribuer
- Supporter
Ressources en ligne
Tutorials : https://sites.google.com/site/telosystutorial/
Templates : https://github.com/telosys-tools
Telosys Tools @telosys http://tools.telosys.org 64
Templates : https://github.com/telosys-tools
Code généré : https://github.com/telosys-tools-demo
Applications déployées :
- http://bookstore-spring.telosys-tools-demo.cloudbees.net/
- http://bookstore-angularjs.telosys-tools-demo.cloudbees.net/
Roadmap
2014
Plugin :
- Modèle sans base de données ( DSL )
- Amélioration de l’IHM du plugin ( links, customization )
Nouveaux templates bundles :
- Spring JDBC
- Struts 2 (?)
- PHP / CodeIgniter (?)
Telosys Tools @telosys http://tools.telosys.org 65
- PHP / CodeIgniter (?)
2015
Telosys Tools Studio
(outil autonome / socle Eclipse )
Sondage / roadmap
Quels templates voudriez-vous ?
( pour quelles cibles de génération ) :
• Struts
• JSF
• Wicket
• Scala
• PHP
• autre…
Telosys Tools @telosys http://tools.telosys.org 66
• autre…
Gradle est-il une priorité ?
Un outil 100% en ligne de commande ?
Un outil 100% web (SaaS / cloud) ?
Vous pouvez répondre avec Twitter @telosys
Vous avez des questions ?
Telosys Tools @telosys http://tools.telosys.org 67

Contenu connexe

Tendances

Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...
Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...
Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...Saâd Zerhouni
 
Application Spring MVC/IOC & Hibernate
Application Spring MVC/IOC & HibernateApplication Spring MVC/IOC & Hibernate
Application Spring MVC/IOC & HibernateInes Ouaz
 
Prototype rapport
Prototype rapportPrototype rapport
Prototype rapportInes Ouaz
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiENSET, Université Hassan II Casablanca
 
Aspect avec AspectJ
Aspect avec AspectJAspect avec AspectJ
Aspect avec AspectJsimeon
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesENSET, Université Hassan II Casablanca
 
Cv Ouaz Ines
Cv Ouaz InesCv Ouaz Ines
Cv Ouaz InesInes Ouaz
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...ENSET, Université Hassan II Casablanca
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyENSET, Université Hassan II Casablanca
 
Java & Etat de l'art
Java & Etat de l'artJava & Etat de l'art
Java & Etat de l'artInes Ouaz
 

Tendances (19)

Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
J2 ee
J2 eeJ2 ee
J2 ee
 
Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...
Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...
Application de gestion des projets en J2EE (Spring-Hibernate) avec architectu...
 
Application Spring MVC/IOC & Hibernate
Application Spring MVC/IOC & HibernateApplication Spring MVC/IOC & Hibernate
Application Spring MVC/IOC & Hibernate
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
 
Spring & SpringBatch FR
Spring & SpringBatch FRSpring & SpringBatch FR
Spring & SpringBatch FR
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
Prototype rapport
Prototype rapportPrototype rapport
Prototype rapport
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
 
Esiea - 5A - Archi 1/3
Esiea - 5A - Archi 1/3Esiea - 5A - Archi 1/3
Esiea - 5A - Archi 1/3
 
Aspect avec AspectJ
Aspect avec AspectJAspect avec AspectJ
Aspect avec AspectJ
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Cv Ouaz Ines
Cv Ouaz InesCv Ouaz Ines
Cv Ouaz Ines
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
J2 ee
J2 eeJ2 ee
J2 ee
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
Java & Etat de l'art
Java & Etat de l'artJava & Etat de l'art
Java & Etat de l'art
 

En vedette

Fundamentals and Implementations of Angular JS with renowned Technology Platf...
Fundamentals and Implementations of Angular JS with renowned Technology Platf...Fundamentals and Implementations of Angular JS with renowned Technology Platf...
Fundamentals and Implementations of Angular JS with renowned Technology Platf...OptiSol Business Solutions
 
San Enrique De Osso3 Eso
San Enrique De Osso3 EsoSan Enrique De Osso3 Eso
San Enrique De Osso3 Esoguestf7e5448
 
Presentation Diapo T A2006 Tcm93 84207
Presentation Diapo  T A2006 Tcm93 84207Presentation Diapo  T A2006 Tcm93 84207
Presentation Diapo T A2006 Tcm93 84207malice
 
La Clonacion
La ClonacionLa Clonacion
La ClonacionJavier
 
COREII 2010
COREII 2010COREII 2010
COREII 2010aceiicr
 
Categorías estética
Categorías estéticaCategorías estética
Categorías estéticaLiza Escudero
 
Palancas de la innovacion hotelera ..
Palancas de la innovacion hotelera ..Palancas de la innovacion hotelera ..
Palancas de la innovacion hotelera ..Hotel innovador
 
Le web en 2009, rétrospective
Le web en 2009, rétrospectiveLe web en 2009, rétrospective
Le web en 2009, rétrospectiveMickael Guillois
 
Perfil Del Supervisor De Auditoria
Perfil Del Supervisor De AuditoriaPerfil Del Supervisor De Auditoria
Perfil Del Supervisor De Auditoriaguestf4c748
 
L'adjectif TOUT
L'adjectif TOUTL'adjectif TOUT
L'adjectif TOUTMme Kinsel
 
Les TIC et l'art : métadonnées des images numériques
Les TIC et l'art : métadonnées des images numériquesLes TIC et l'art : métadonnées des images numériques
Les TIC et l'art : métadonnées des images numériquesLesticetlart Invisu
 

En vedette (20)

Fundamentals and Implementations of Angular JS with renowned Technology Platf...
Fundamentals and Implementations of Angular JS with renowned Technology Platf...Fundamentals and Implementations of Angular JS with renowned Technology Platf...
Fundamentals and Implementations of Angular JS with renowned Technology Platf...
 
San Enrique De Osso3 Eso
San Enrique De Osso3 EsoSan Enrique De Osso3 Eso
San Enrique De Osso3 Eso
 
Presentation Diapo T A2006 Tcm93 84207
Presentation Diapo  T A2006 Tcm93 84207Presentation Diapo  T A2006 Tcm93 84207
Presentation Diapo T A2006 Tcm93 84207
 
1 Heure Au Cdi
1 Heure Au Cdi1 Heure Au Cdi
1 Heure Au Cdi
 
Anniversaire Chachou2
Anniversaire Chachou2Anniversaire Chachou2
Anniversaire Chachou2
 
03. vigilia de oración
03. vigilia de oración03. vigilia de oración
03. vigilia de oración
 
La Clonacion
La ClonacionLa Clonacion
La Clonacion
 
COREII 2010
COREII 2010COREII 2010
COREII 2010
 
La vie
La vieLa vie
La vie
 
Herramientas
HerramientasHerramientas
Herramientas
 
Categorías estética
Categorías estéticaCategorías estética
Categorías estética
 
Palancas de la innovacion hotelera ..
Palancas de la innovacion hotelera ..Palancas de la innovacion hotelera ..
Palancas de la innovacion hotelera ..
 
Le web en 2009, rétrospective
Le web en 2009, rétrospectiveLe web en 2009, rétrospective
Le web en 2009, rétrospective
 
Le miroir de_sel
Le miroir de_selLe miroir de_sel
Le miroir de_sel
 
Perfil Del Supervisor De Auditoria
Perfil Del Supervisor De AuditoriaPerfil Del Supervisor De Auditoria
Perfil Del Supervisor De Auditoria
 
Presentación Semana Ingenio y Diseño UD
Presentación Semana Ingenio y Diseño UDPresentación Semana Ingenio y Diseño UD
Presentación Semana Ingenio y Diseño UD
 
L'adjectif TOUT
L'adjectif TOUTL'adjectif TOUT
L'adjectif TOUT
 
Migrantes
MigrantesMigrantes
Migrantes
 
Les TIC et l'art : métadonnées des images numériques
Les TIC et l'art : métadonnées des images numériquesLes TIC et l'art : métadonnées des images numériques
Les TIC et l'art : métadonnées des images numériques
 
Leonardo da vinci
Leonardo da vinciLeonardo da vinci
Leonardo da vinci
 

Similaire à Telosys tools jug-nantes-2014-v1.2

Meetup python-bottle-telosys-2018-lgu-v1.0
Meetup python-bottle-telosys-2018-lgu-v1.0Meetup python-bottle-telosys-2018-lgu-v1.0
Meetup python-bottle-telosys-2018-lgu-v1.0Laurent Guérin
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Laurent Guérin
 
Rex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimRex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimLaurent Broudoux
 
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...PimpMySharePoint
 
Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !Cédric Leblond
 
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...PimpMySharePoint
 
Introduction aux web components
Introduction aux web componentsIntroduction aux web components
Introduction aux web componentsFrancois ANDRE
 
Petit déjeuner Octo - L'infra au service de ses projets
Petit déjeuner Octo - L'infra au service de ses projetsPetit déjeuner Octo - L'infra au service de ses projets
Petit déjeuner Octo - L'infra au service de ses projetsAdrien Blind
 
Petit-déjeuner OCTO - L'Infra au service de ses projets
Petit-déjeuner OCTO - L'Infra au service de ses projetsPetit-déjeuner OCTO - L'Infra au service de ses projets
Petit-déjeuner OCTO - L'Infra au service de ses projetsOCTO Technology
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...ENSIBS
 
BreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureBreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureNicolas Georgeault
 
GraphTour - Workday: Tracking activity with Neo4j (French version)
GraphTour - Workday: Tracking activity with Neo4j (French version)GraphTour - Workday: Tracking activity with Neo4j (French version)
GraphTour - Workday: Tracking activity with Neo4j (French version)Neo4j
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptMichael Akbaraly
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicEmmanuel Hugonnet
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileIppon
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéJulien Dubois
 
Production logicielle, outils et pratiques
Production logicielle, outils et pratiquesProduction logicielle, outils et pratiques
Production logicielle, outils et pratiquesJohan Moreau
 
Les méthodes agiles dans TFS
Les méthodes agiles dans TFSLes méthodes agiles dans TFS
Les méthodes agiles dans TFSDenis Voituron
 
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...Djamel Zouaoui
 

Similaire à Telosys tools jug-nantes-2014-v1.2 (20)

Meetup python-bottle-telosys-2018-lgu-v1.0
Meetup python-bottle-telosys-2018-lgu-v1.0Meetup python-bottle-telosys-2018-lgu-v1.0
Meetup python-bottle-telosys-2018-lgu-v1.0
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022
 
Rex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimRex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - Ensim
 
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
 
Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !
 
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
La gouvernance, ou comment rapprocher les équipes de développement et d'infra...
 
Introduction aux web components
Introduction aux web componentsIntroduction aux web components
Introduction aux web components
 
Petit déjeuner Octo - L'infra au service de ses projets
Petit déjeuner Octo - L'infra au service de ses projetsPetit déjeuner Octo - L'infra au service de ses projets
Petit déjeuner Octo - L'infra au service de ses projets
 
Petit-déjeuner OCTO - L'Infra au service de ses projets
Petit-déjeuner OCTO - L'Infra au service de ses projetsPetit-déjeuner OCTO - L'Infra au service de ses projets
Petit-déjeuner OCTO - L'Infra au service de ses projets
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
 
BreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureBreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec Azure
 
GraphTour - Workday: Tracking activity with Neo4j (French version)
GraphTour - Workday: Tracking activity with Neo4j (French version)GraphTour - Workday: Tracking activity with Neo4j (French version)
GraphTour - Workday: Tracking activity with Neo4j (French version)
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et MobileNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
 
Production logicielle, outils et pratiques
Production logicielle, outils et pratiquesProduction logicielle, outils et pratiques
Production logicielle, outils et pratiques
 
Les méthodes agiles dans TFS
Les méthodes agiles dans TFSLes méthodes agiles dans TFS
Les méthodes agiles dans TFS
 
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
 

Plus de Laurent Guérin

My web application in 20 minutes with Telosys
My web application in 20 minutes with Telosys My web application in 20 minutes with Telosys
My web application in 20 minutes with Telosys Laurent Guérin
 
Telosys project booster Paris Open Source Summit 2019
Telosys project booster Paris Open Source Summit 2019Telosys project booster Paris Open Source Summit 2019
Telosys project booster Paris Open Source Summit 2019Laurent Guérin
 
Telosys tutorial - Code generation for a Python web application based on Bott...
Telosys tutorial - Code generation for a Python web application based on Bott...Telosys tutorial - Code generation for a Python web application based on Bott...
Telosys tutorial - Code generation for a Python web application based on Bott...Laurent Guérin
 
MQTT avec Mosquitto et Paho - DevFest Brest 2019
MQTT avec Mosquitto et Paho - DevFest Brest 2019MQTT avec Mosquitto et Paho - DevFest Brest 2019
MQTT avec Mosquitto et Paho - DevFest Brest 2019Laurent Guérin
 
MQTT avec Mosquitto et Paho - Laurent Guerin - JUG Nantes Nov 2018
MQTT avec Mosquitto et Paho - Laurent Guerin - JUG Nantes Nov 2018MQTT avec Mosquitto et Paho - Laurent Guerin - JUG Nantes Nov 2018
MQTT avec Mosquitto et Paho - Laurent Guerin - JUG Nantes Nov 2018Laurent Guérin
 
Sogeti labs developer-today-v1.1
Sogeti labs developer-today-v1.1Sogeti labs developer-today-v1.1
Sogeti labs developer-today-v1.1Laurent Guérin
 
DevOps MeetUp NL - Docker (Oct 2014)
DevOps MeetUp NL - Docker (Oct 2014)DevOps MeetUp NL - Docker (Oct 2014)
DevOps MeetUp NL - Docker (Oct 2014)Laurent Guérin
 
Bean Validation - Cours v 1.1
Bean Validation - Cours v 1.1Bean Validation - Cours v 1.1
Bean Validation - Cours v 1.1Laurent Guérin
 
Genie logiciel eseo-v1.1-1spp
Genie logiciel eseo-v1.1-1sppGenie logiciel eseo-v1.1-1spp
Genie logiciel eseo-v1.1-1sppLaurent Guérin
 
Devoxx 2011 - Scaffolding with Telosys
Devoxx 2011 - Scaffolding with TelosysDevoxx 2011 - Scaffolding with Telosys
Devoxx 2011 - Scaffolding with TelosysLaurent Guérin
 
Open World Forum 2009 Migration With Telosys
Open World Forum 2009 Migration With TelosysOpen World Forum 2009 Migration With Telosys
Open World Forum 2009 Migration With TelosysLaurent Guérin
 
Solutions Linux Développement Rapide Java
Solutions Linux Développement Rapide JavaSolutions Linux Développement Rapide Java
Solutions Linux Développement Rapide JavaLaurent Guérin
 

Plus de Laurent Guérin (12)

My web application in 20 minutes with Telosys
My web application in 20 minutes with Telosys My web application in 20 minutes with Telosys
My web application in 20 minutes with Telosys
 
Telosys project booster Paris Open Source Summit 2019
Telosys project booster Paris Open Source Summit 2019Telosys project booster Paris Open Source Summit 2019
Telosys project booster Paris Open Source Summit 2019
 
Telosys tutorial - Code generation for a Python web application based on Bott...
Telosys tutorial - Code generation for a Python web application based on Bott...Telosys tutorial - Code generation for a Python web application based on Bott...
Telosys tutorial - Code generation for a Python web application based on Bott...
 
MQTT avec Mosquitto et Paho - DevFest Brest 2019
MQTT avec Mosquitto et Paho - DevFest Brest 2019MQTT avec Mosquitto et Paho - DevFest Brest 2019
MQTT avec Mosquitto et Paho - DevFest Brest 2019
 
MQTT avec Mosquitto et Paho - Laurent Guerin - JUG Nantes Nov 2018
MQTT avec Mosquitto et Paho - Laurent Guerin - JUG Nantes Nov 2018MQTT avec Mosquitto et Paho - Laurent Guerin - JUG Nantes Nov 2018
MQTT avec Mosquitto et Paho - Laurent Guerin - JUG Nantes Nov 2018
 
Sogeti labs developer-today-v1.1
Sogeti labs developer-today-v1.1Sogeti labs developer-today-v1.1
Sogeti labs developer-today-v1.1
 
DevOps MeetUp NL - Docker (Oct 2014)
DevOps MeetUp NL - Docker (Oct 2014)DevOps MeetUp NL - Docker (Oct 2014)
DevOps MeetUp NL - Docker (Oct 2014)
 
Bean Validation - Cours v 1.1
Bean Validation - Cours v 1.1Bean Validation - Cours v 1.1
Bean Validation - Cours v 1.1
 
Genie logiciel eseo-v1.1-1spp
Genie logiciel eseo-v1.1-1sppGenie logiciel eseo-v1.1-1spp
Genie logiciel eseo-v1.1-1spp
 
Devoxx 2011 - Scaffolding with Telosys
Devoxx 2011 - Scaffolding with TelosysDevoxx 2011 - Scaffolding with Telosys
Devoxx 2011 - Scaffolding with Telosys
 
Open World Forum 2009 Migration With Telosys
Open World Forum 2009 Migration With TelosysOpen World Forum 2009 Migration With Telosys
Open World Forum 2009 Migration With Telosys
 
Solutions Linux Développement Rapide Java
Solutions Linux Développement Rapide JavaSolutions Linux Développement Rapide Java
Solutions Linux Développement Rapide Java
 

Telosys tools jug-nantes-2014-v1.2

  • 1. Development accelerator ... ou comment faire un « départ lancé »un « départ lancé » JUG Nantes 14 avril 2014 Ver 1.2
  • 2. Qui sommes nous ? Laurent Guérin (Project Leader) @ltguerin laurent.guerin@sogeti.com Benoit Wilcox (Commiter) @WilcoxBenoit Ludovic Chaboud (Commiter) @ludovic_chaboud Telosys Tools @telosys http://tools.telosys.org 2 @WilcoxBenoit benoit.wilcox@sogeti.com @ludovic_chaboud ludovic.chaboud@sogeti.com Telosys Team http://labs.sogeti.com/
  • 3. Un parcours en 3 étapes Telosys Tools @telosys http://tools.telosys.org 3
  • 5. La juste part du développeur Application Framework 1 Framework 2 Code stéréotypé & répétitif Développeur Générateur Telosys Tools @telosys http://tools.telosys.org 5 Plate-forme ( ie Java EE ) Comment réduire le volume de code à réaliser ? Frameworks & « boilerplate » réduction du code technique (code générique, « factorisable ») Mais il reste toujours une partie du code qui est spécifique et répétitive (et sans valeur ajoutée) La génération de code permet d’automatiser cette partie
  • 6. • Model Driven Architecture (cf OMG) • Approche « Model First » => concevoir et maintenir un modèle (UML, DSL, …) Génération de code - Approche « MDA » MODEL Service name Port name 0..n+port 0..n Port Type name Binding name 1 +binding 1 1 +type 1 Param name Output Input StartWithExtensions BindingOperation name 0..n+operation 0..n 0..1 +input0..1 0..1+output 0..1 Operation name 0..1 +input 0..1 0..10..1 0..n+operation 0..n 11 X M I ( XML ) Telosys Tools @telosys http://tools.telosys.org 6 Code Part name Message name 0..n+part 0..n 1+message 1 Output BindingFault Fault name 1 +message 11 name 0..n name 0..1 +output 0..1 0..n+fault 0..n 11 1 +fault 0..n Template TOOL Processus lourd, ne permet pas un démarrage rapide
  • 7. • Littéralement « échafaudage » • Définition Wikipedia : (incomplète) • Largement utilisé dans certains écosystèmes Génération de code - Approche « Scaffolding » Scaffolding is a meta-programming method of building database-backed software applications. Telosys Tools @telosys http://tools.telosys.org 7 • Largement utilisé dans certains écosystèmes – Ruby ( RoR - Ruby On Rails ) – Groovy ( Grails – Groovy on Rails ) • Et pour Java? – Spring ROO (Boite noire, lié à Spring, AspectJ ) – DALI / Eclipse (JPA mapping only) – AppFuse (command line + web)
  • 8. • Approche « Database First » • Efficace (permet un démarrage rapide) • Outil de type « boite noire », généralement non adaptable Génération de code - Approche « Scaffolding » Database TOOL Code Metadata Telosys Tools @telosys http://tools.telosys.org 8 Pas de templates : - Comment personnaliser la génération de code ? Pas de modèle : - Comment ajouter des informations (en + des méta-data) ? - Comment modifier (durablement) les méta-data ? noms/types des attributs Java, règles de validation (min, max, regexp, …), représentation des Booléens (1/0, "T"/"F", … ), etc
  • 9. Telosys Tools: une nouvelle approche « Database first » scaffolding avec un modèle léger et des templates ADAPTABLE Telosys Tools @telosys http://tools.telosys.org 9
  • 10. Philosophie Keep it simpleKeep it simpleKeep it simpleKeep it simple and pragmaticand pragmaticand pragmaticand pragmatic Telosys Tools @telosys http://tools.telosys.org 10
  • 11. Plugin Code Generator Environnement de travail : Eclipse + plugin + templates Model Editor Workspace Community templates GitHub download templates install plugin Telosys Tools @telosys http://tools.telosys.org 11 Code GeneratorModel Editor Template Editor Database Editor Model Generator
  • 12. Que peut-on générer ? Tout fichier de type « texte » : Java, XML, JSP, PHP, Scala, JavaScript, HTML, etc… Principe : 1 entity N templates N targets 1 bean Telosys Tools @telosys http://tools.telosys.org 12 N entities 1 template 1 target model (all entities with links) 1 controller 1 web page 1 list
  • 13. Ça ressemble à quoi un template ? http://velocity.apache.org/ Objets du model « entities » Velocity Template Language (VTL) • Références aux objets : $, ${…} • Directives : #set, #if, #foreach, … • Commentaire : ## #* .. *# Telosys Tools @telosys http://tools.telosys.org 13 Objets de l’environnement
  • 14. Ce n’est pas magique Ne pas chercher à tout générer (il faut savoir s’arrêter) code code généré non généré Application Code stéréotypé & répétitif Telosys Tools @telosys http://tools.telosys.org 14 Estimer le gain de productivité
  • 15. Démo 1 Telosys Tools @telosys http://tools.telosys.org 15
  • 16. AngularJS Spring MVC – JPA 2 Telosys Tools @telosys http://tools.telosys.org 16
  • 17. • Fonctionnalités de CRUD : – Création, Recherche, Modification, Suppression d’entités • Internationalisation (i18n) : – Libellés français / anglais – Gestion des dates Fonctionnalités Telosys Tools @telosys http://tools.telosys.org 17
  • 18. Architecture générale Tomcat Server Webapp Spring MVC + JPA bookstore- spring 2 Projets Telosys Tools @telosys http://tools.telosys.org 18 Base de données relationnelle Spring MVC + JPA Webapp AngularJS spring bookstore- angularjs
  • 19. Application 1 : Spring MVC + Spring MVC + AngularJS Telosys Tools @telosys http://tools.telosys.org 19 + Spring Data JPA
  • 20. Application 1 Spring MVC + Spring Data JPA Base de données relationnelle JPA Spring Data JPA Spring MVC Web REST Telosys Tools @telosys http://tools.telosys.org 20 Utilisateur
  • 21. Spring MVC + Spring Data JPA Présentation Spring MVC Service JPA Persistance Spring 3 couches Telosys Tools @telosys http://tools.telosys.org 21 Contrôleurs Pages Web Service DAO
  • 22. Points de vigilance sur JPA (Java Persistence API) Spring MVC + Spring Data JPA Présentation Spring MVC Service JPA Persistance Spring Telosys Tools @telosys http://tools.telosys.org 22 Contrôleurs Pages Web Service DAO
  • 23. Points de vigilance sur JPA (Java Persistence API) • Concepts mal maîtrisés voir inconnus des développeurs – Session Hibernate / Entity Manager : • Objets « attachés » et « détachés » • Mise à jour différée de la base de données – Règles de persistance des liens entre les objets • Notion « owning side » et « inverse side » Spring MVC + Spring Data JPA Telosys Tools @telosys http://tools.telosys.org 23 • Notion « owning side » et « inverse side » • Problème de performances – Chargement à la volée : • problème du « N+1 requêtes » • Erreurs techniques si l’objet est « détaché » • Comportements masqués et objets « pollués » – Chargement à la volée : • Utilisation d’objets « proxy » et de collections « proxy »
  • 24. Notre solution : Isoler JPA dans la couche de persistance Spring MVC + Spring Data JPA Présentation Service JPA Contrôleurs Pages Web Service DAO Persistance Telosys Tools @telosys http://tools.telosys.org 24 Pages Web Objets d’affichage Mapping Entités JPA Transactions
  • 25. Spring MVC + Spring Data JPA Partie générée par Telosys : « Controller » BookController « Service » BookService « DAO » BookJpaRepository Base de données relationnelle« Controller » BookRestController Telosys Tools @telosys http://tools.telosys.org 25 BookController Utilisateur REST Pages GET, POST, PUT, DELETE BookRestController Web
  • 26. Aspects techniques • Web : Twitter bootstrap 3, Tiles • RESTful : GET, POST, PUT, DELETE • Tests unitaires : Couverture de 90% • Analyse SONAR : Rules compliance : 91% Telosys Tools @telosys http://tools.telosys.org 26
  • 27. Organisation et dépendances des bundles Spring MVC front-springmvc Service Présentation Services service-springdatajpa Telosys Tools @telosys http://tools.telosys.org 27 Spring Data JPA persistence-springdatajpa Database Persistance Database
  • 28. Spring MVC + Spring Data JPA Démo 2 Telosys Tools @telosys http://tools.telosys.org 28
  • 29. Application 2 : AngularJS AngularJS + Spring MVC REST Telosys Tools @telosys http://tools.telosys.org 29 AngularJS
  • 30. • Fonctionnalités de CRUD : – Création, Recherche, Modification, Suppression d’entités • Internationalisation (i18n) : – Libellés français / anglais – Gestion des dates Fonctionnalités Telosys Tools @telosys http://tools.telosys.org 30
  • 31. AngularJS + Spring MVC REST Application 1 Base de données relationnelle JPA Spring Data JPA Spring MVC REST Telosys Tools @telosys http://tools.telosys.org 31 Application 2 relationnelle AngularJS Utilisateur Web
  • 32. AngularJS + Spring MVC REST URLs des services REST • Récupérer la liste des entités : – GET : /rest/[entity] • Récupérer une entité : – GET : /rest/[entity]/[id] • Créer une entité : – POST : /rest/[entity] Telosys Tools @telosys http://tools.telosys.org 32 – POST : /rest/[entity] • Modifier une entité : – PUT : /rest/[entity]/[id] • Supprimer une entité : – DELETE : /rest/[entity]/[id]
  • 33. AngularJS + Spring MVC REST Partie générée par Telosys : « Controller » BookCtrl _____________________________________________ load loadAll save delete _____________________________________________ $scope.book REST « Service » Book ______________________________________ get getAll create update delete GET, Telosys Tools @telosys http://tools.telosys.org 33 $scope.book $scope.books delete Page de modification book_form.html Page de recherche book_list.html GET, POST, PUT, DELETE Utilisateur Web
  • 34. Aspects techniques • Basé sur le projet de démarrage « Seed » de Angular : – https://github.com/angular/angular-seed • Gestion de l’internationalisation (i18n) : Telosys Tools @telosys http://tools.telosys.org 34 • Gestion de l’internationalisation (i18n) : – https://github.com/angular-translate/angular-translate • Intégration de Twitter bootstrap 3 avec AngularStrap : – http://mgcrea.github.io/angular-strap
  • 35. Organisation et dépendances des bundles Spring MVC front-springmvc Service Présentation AngularJS front-angularjs MVC Javascript Service layer Telosys Tools @telosys http://tools.telosys.org 35 Spring Data JPA persistence-springdatajpa Database Service Persistance Database Service layer service-springdatajpa
  • 36. AngularJS + Spring MVC REST Démo 2 Telosys Tools @telosys http://tools.telosys.org 36
  • 37. Restfull Spring Data HATEOAS 3 Telosys Tools @telosys http://tools.telosys.org 37
  • 38. Spring Data REST dans l'écosystème Spring Spring Data REST Spring MVC Spring Data JPA Spring Data Neo4J Spring Data MongoDB Spring Data Commons Spring Data Gemfire Telosys Tools @telosys http://tools.telosys.org 38
  • 39. Spring Data, un socle commun Spring Data REST Spring MVC Spring Data JPA Spring Data Neo4J Spring Data MongoDB Spring Data Commons Spring Data Gemfire Telosys Tools @telosys http://tools.telosys.org 39 Spring Data Commons • Couche d'abstraction partagée par les différents projets •Ex : Repository, Génération dynamique des requêtes à partir des nom de méthodes, audit …
  • 40. Spring Data : Différents fournisseurs de données • API de manipulation d'une source de données spécifiques Spring Data REST Spring MVC Spring Data JPA Spring Data Neo4J Spring Data MongoDB Spring Data Commons Spring Data Gemfire Telosys Tools @telosys http://tools.telosys.org 40 • API de manipulation d'une source de données spécifiques • Implémentation implicite des opérations les plus courantes (CRUD) • Plusieurs fournisseurs de données : • JPA, MongoDB, Neo4J, Gemfire, Redis, Hadoop, SolR, Couchbase, elasticsearch, cassandra et dynamoDB • Supportés par Spring Data REST : • JPA, MongoDB, Neo4J et Gemfire (cache distribué, VMWare)
  • 41. Spring Data REST Spring Data REST Spring MVC Spring Data JPA Spring Data Neo4J Spring Data MongoDB Spring Data Commons Spring Data Gemfire Telosys Tools @telosys http://tools.telosys.org 41 Spring Data REST • S'appui sur Spring MVC pour l'exposition de services. • Les services exposés sont RESTful, approche HATEAOS • S'appui sur les interfaces Repository pour la génération des services CRUD et de l'API /search
  • 42. Spring Data REST Spring Data REST Spring MVC Spring Data JPA Spring Data Neo4J Spring Data MongoDB Spring Data Commons Spring Data Gemfire Telosys Tools @telosys http://tools.telosys.org 42 Stack de l'application générée • Spring Data REST 2.0.1.RELEASE • Spring Data JPA 1.5.1.RELEASE • Hibernate 4.2
  • 43. Spring Data REST Book @Entity Telosys Tools @telosys http://tools.telosys.org 43
  • 44. Spring Data REST Book @Entity BookRepository CrudRepository Telosys Tools @telosys http://tools.telosys.org 44
  • 45. Spring Data REST Book @Entity BookRepository CrudRepository Spring Data REST @Controller, Dispatcher Servlet… Telosys Tools @telosys http://tools.telosys.org 45
  • 46. Spring Data REST Book @Entity BookRepository CrudRepository Spring Data REST @Controller, Dispatcher Servlet… Telosys Tools @telosys http://tools.telosys.org 46 API CRUD • GET • POST • PUT • DELETE
  • 47. Spring Data REST Book @Entity BookRepository CrudRepository Spring Data REST @Controller, ServletDispatcher … Telosys Tools @telosys http://tools.telosys.org 47 API CRUD • GET • POST • PUT • DELETE API Search /search Toutes les méthodes définies dans l'interface BookRepository.
  • 48. Spring Data REST Book @Entity BookRepository CrudRepository Spring Data REST @Controller, ServletDispatcher … Telosys Tools @telosys http://tools.telosys.org 48 API CRUD • GET • POST • PUT • DELETE API Search /search Toutes les méthodes définies dans l'interface BookRepository. Json Schema /schema Description des propriétés de l'entité.
  • 49. Spring Data REST Book @Entity BookRepository CrudRepository Spring Data REST @Controller, ServletDispatcher … Partie générée par Telosys Tools • Entités • Repositories • "FindBy" pour Many-To-One • Validators • Configuration de l'application Telosys Tools @telosys http://tools.telosys.org 49 API CRUD • GET • POST • PUT • PATCH • DELETE API Search /search Toutes les méthodes définies dans l'interface BookRepository. Json Schema /schema Description des propriétés de l'entité.
  • 50. HATEOAS ? " HATEOAS – the word, there's no pronounciation for. " Telosys Tools @telosys http://tools.telosys.org 50 pronounciation for. " (Ben Hale, SpringOne2GX 2012)
  • 51. HATEOAS ? " HATEOAS – the word, there's no pronounciation for. " (Ben Hale, SpringOne2GX 2012) Telosys Tools @telosys http://tools.telosys.org 51 Hypermedia As The Engine Of Application State
  • 52. HATEOAS ? Telosys Tools @telosys http://tools.telosys.org 52 Model of RESTful maturity by L.Richardson
  • 53. HATEOAS ? Un format ? Un standard ? Telosys Tools @telosys http://tools.telosys.org 53
  • 54. HATEOAS ? Collection+JSON – Hypermedia Type HAL – Hypertext Application Language Un format ? Un standard ? Telosys Tools @telosys http://tools.telosys.org 54 Json-LD : JSON for Linking Data W3C depuis 16/01/2014 SIREN JSON Schema & JSON Hyper-Schema
  • 55. HATEOAS ? Un format ? Collection+JSON – Hypermedia Type HAL – Hypertext Application Language Un standard ? Telosys Tools @telosys http://tools.telosys.org 55 Json-LD : JSON for Linking Data W3C depuis 16/01/2014 SIREN JSON Schema & JSON Hyper-Schema
  • 56. HATEOAS ? Collection+JSON – Hypermedia Type HAL – Hypertext Application Language Un format ? Un standard ? Telosys Tools @telosys http://tools.telosys.org 56 Json-LD : JSON for Linking Data W3C depuis 16/01/2014 SIREN JSON Schema & JSON Hyper-Schema
  • 57. HAL : Hypertext Application Language Telosys Tools @telosys http://tools.telosys.org 57
  • 58. HAL : Hypertext Application Language : Example { "isbn": "2-212-12232-2", "title": "Programmer en Java", "price": 35, "quantity": 23, "discount": false, "availability": true, "bestSeller": true, "_links": { Telosys Tools @telosys http://tools.telosys.org 58 "_links": { "self": {"href": "http://localhost:8080/bookstore-rest/books/1" }, "author": {"href": "http://localhost:8080/bookstore-rest/books/1/author"}, "page_extract": { "href": "http://localhost:8080/bookstore-rest/books/1/author/extract{?page}", "templated" : true } } }
  • 59. HAL : Hypertext Application Language : Example { "isbn": "2-212-12232-2", "title": "Programmer en Java", "price": 35, "quantity": 23, "discount": false, "availability": true, "bestSeller": true, "_links": { Telosys Tools @telosys http://tools.telosys.org 59 "_links": { "self": {"href": "http://localhost:8080/bookstore-rest/books/1" }, "author": {"href": "http://localhost:8080/bookstore-rest/books/1/author"}, "page_extract": { "href": "http://localhost:8080/bookstore-rest/books/1/author/extract{?page}", "templated" : true } } } Liens, actions
  • 60. HAL : Hypertext Application Language • Pour implémenter ou consommer des services "HAL" … Telosys Tools @telosys http://tools.telosys.org 60
  • 61. Démo 3 Telosys Tools @telosys http://tools.telosys.org 61
  • 62. Arrivée 4 Telosys Tools @telosys http://tools.telosys.org 62
  • 63. Et maintenant à vous de jouer ! Vous pouvez… Telosys Tools @telosys http://tools.telosys.org 63 Vous pouvez… - Tester - Créer vos templates - Contribuer - Supporter
  • 64. Ressources en ligne Tutorials : https://sites.google.com/site/telosystutorial/ Templates : https://github.com/telosys-tools Telosys Tools @telosys http://tools.telosys.org 64 Templates : https://github.com/telosys-tools Code généré : https://github.com/telosys-tools-demo Applications déployées : - http://bookstore-spring.telosys-tools-demo.cloudbees.net/ - http://bookstore-angularjs.telosys-tools-demo.cloudbees.net/
  • 65. Roadmap 2014 Plugin : - Modèle sans base de données ( DSL ) - Amélioration de l’IHM du plugin ( links, customization ) Nouveaux templates bundles : - Spring JDBC - Struts 2 (?) - PHP / CodeIgniter (?) Telosys Tools @telosys http://tools.telosys.org 65 - PHP / CodeIgniter (?) 2015 Telosys Tools Studio (outil autonome / socle Eclipse )
  • 66. Sondage / roadmap Quels templates voudriez-vous ? ( pour quelles cibles de génération ) : • Struts • JSF • Wicket • Scala • PHP • autre… Telosys Tools @telosys http://tools.telosys.org 66 • autre… Gradle est-il une priorité ? Un outil 100% en ligne de commande ? Un outil 100% web (SaaS / cloud) ? Vous pouvez répondre avec Twitter @telosys
  • 67. Vous avez des questions ? Telosys Tools @telosys http://tools.telosys.org 67