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) @[email protected]
Benoit Wilcox (Commiter)@WilcoxBenoit
Ludovic Chaboud (Commiter) @ludovic_chaboud
Telosys Tools @telosys http://tools.telosys.org 2
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 »
MODELService
name
Port
name
0..n+port 0..nPort Type
nameBinding
name1
+binding
1
1
+type
1
Param
name
Output
Input
StartWithExtensions
BindingOperation
name
0..n+operation 0..n0..1 +input0..10..1+output 0..1
Operation
name0..1
+input
0..10..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
BindingFaultFault
name1
+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 simple Keep it simple Keep it simple Keep 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
downloadtemplates
installplugin
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 entitieswith 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 codegé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émo1
Telosys Tools @telosys http://tools.telosys.org 15
AngularJSSpring 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éesrelationnelle
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 WebService 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 WebService DAO
Points de vigilance sur JPA (Java Persistence API)
• Concepts mal maîtrisés voir inconnus des développeu rs– 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 WebService DAO
Persistance
Telosys Tools @telosys http://tools.telosys.org 24
Pages Web
Objets
d’affichageMapping 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 MVCfront-springmvc
Service
Présentation
Servicesservice-springdatajpa
Telosys Tools @telosys http://tools.telosys.org 27
Spring Data JPApersistence-springdatajpa
Database
Persistance
Database
Spring MVC + Spring Data JPA
Démo2
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 MVCfront-springmvc
Service
Présentation
AngularJSfront-angularjs
MVC Javascript
Service layer
Telosys Tools @telosys http://tools.telosys.org 35
Spring Data JPApersistence-springdatajpa
Database
Service
Persistance
Database
Service layerservice-springdatajpa
AngularJS + Spring MVC REST
Démo2
Telosys Tools @telosys http://tools.telosys.org 36
RestfullSpring DataHATEOAS
3
Telosys Tools @telosys http://tools.telosys.org 37
Spring Data REST dans l'écosystème Spring
Spring Data REST
Spring MVCSpring 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 MVCSpring 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 MVCSpring 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 MVCSpring 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 MVCSpring 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
BookRepositoryCrudRepository
Telosys Tools @telosys http://tools.telosys.org 44
Spring Data REST
Book@Entity
BookRepositoryCrudRepository
Spring Data REST@Controller, Dispatcher
Servlet…
Telosys Tools @telosys http://tools.telosys.org 45
Spring Data REST
Book@Entity
BookRepositoryCrudRepository
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
BookRepositoryCrudRepository
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
BookRepositoryCrudRepository
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
BookRepositoryCrudRepository
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 – theword, there's nopronounciation for. "
Telosys Tools @telosys http://tools.telosys.org 50
pronounciation for. "(Ben Hale, SpringOne2GX 2012)
HATEOAS ?
" HATEOAS – theword, there's nopronounciation 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émo3
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
Top Related