Projet Telosys : Framework global et outil de génération de code Laurent Guérin laurent.guerin@sogeti.com @ltguerin Telosys Project Leader Sogeti & OW2 Consortium Solutions Linux / Session OW2-20 juin 2012 - Paris
Introduction Sogeti : Company Capgemini : Company belongs to be o st g lon : Plateform Laurent Guérin : Person Telosys : Project leads provi de s laurent.guerin@sogeti.com located in be lon gs based on de li to hosts tools for : IDE ve re d as OW2 : Consortium : License France : Country 2
Le projet Telosys Method Différentes cibles : Telosys, Struts, Flex, Tools Framework ( code generation ) Designed together, in order to work together ( 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 3
1) Le framework
Le framework Framework global ( "all in one" / "fullstack" ) Keep it simple and pragmatic! Un seul jar (+ JDBC) => pas de "jar hell"! Basé sur des concepts simples Léger (servlet container + base de données) 5
«Global effect» Un seul framework qui couvre toutes les couches de l application Authentication Presentation Application Persistence Services Screen Maps Java Beans ( POJO ) XML JSP + taglib Business AJAX Framework Javascript Natively AJAX conv DAO "VO" SQL Screen Managers Thin persistence layer Services Commons, logging, I18N, Very simple objects ( "Pure POJO" ) Global => moins de glue, moins d objets (empreinte mémoire réduite), moins de configuration, => plus homogène Modulaire (utilisation partielle) 6
Framework : évolutions 2012 Telosys Framework version 2.0 Refactoring des packages Telosys Web Telosys Persistenc e Database Telosys Commons Telosys Framework Plus de généricité => Encore moins de code Packaging modulaire : 1 jar global ou 3 jar (web, persistence, commons) Principale nouveauté : Telosys Persistence 7
Telosys Persistence Telosys Lightweight Persistence API ( LPA ) Record-Oriented Persistence ( «ROP» ) Active Record 1 table = 1 record ( = 1 entity ) Pas de chargement implicite des liens ( lazy/eager loading ) «JPA like» : Entity ( Record ) = POJO + Annotations (compatibles JPA) Plus de DAO, tout est géré par le «PersistenceManager» Dialogue direct avec la base de données Pas de cache de niveau 1 ou niveau 2 Le développeur a un contrôle total sur la base de données A chaque méthode de l API correspond une requête SQL «load» «SQL select», «update» «SQL update», 8
Telosys Persistence vs JPA JPA Telosys LPA Application API Entity Manager Application Entity Manager Cache ( Level 1 ) Persistence Manager Persistence Manager Cache ( Level 1 ) Cache ( Level 2 ) Database Database The API talks directly to the database 9
Telosys Persistence : Record Annotations @Table @Id @Column @GeneratedValue @Temporal @TemporalType @Lob @BooleanStoredAsInteger * @BooleanStoredAsString * * Telosys only Packages : javax.persistence or org.telosys.persistence 10
Telosys Persistence : API PersistenceManager pm pm.load(bean) pm.loadbyprimarykey( ) pm.delete(bean) pm.save(bean) pm.update(bean) pm.insert(bean) pm.exists(bean) pm.createquery( ) pm.loadbyquery(query) pm.loadall(class) pm.count(query) etc SQL Puis NoSQL? GAE, etc 11
2) L outillage «Telosys Tools»
Telosys Tools Un plugin Eclipse Disponible sur Eclipse Marketplace http://marketplace.eclipse.org/content/telosys-tools Une approche de génération qui combine Scaffolding de type «Database - First» «Modèle léger» ( modèle intermédiaire pouvant être modifié et enrichi ) Génération de code de type MDD à partir du modèle léger et de templates adaptables 13
Telosys Tools : le processus Un processus en 3 étapes Template Database updates customizes Metadata Repository generator modify & add information Code generator generates Repository (Lightweight model) updates 1 Approche Database-first pour initialiser un modèle léger Code 2 Adapter / enrichir le modèle léger 3 Générer le code initial 14
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 15
Vue d ensemble Tout peut être fait dans Eclipse Utilisable en ligne de commande Editors Database Meta-data Repository generator Repository.dbrep ( XML ) Wizards Properties Template.vm Code generator Context.java.jsp /.jspx Velocity.js other 16
Editeur de modèle workspace Repository (model) Fichier.dbrep Database Java Classes modifiable Database Java Attributes O/R Mapping 17
Velocity ( templating engine ) Extrait d un template (génération d un bean) public class $class.name implements Serializable { private static final long serialversionuid = 1L; //--- ATTRIBUTES #foreach( $field in $class.attributes ) private $field.formatedtype(10) $field.formatedname(12) ; #end //--- CONSTRUCTOR(S) public ${class.name}() { super(); } //--- GETTERS & SETTERS #foreach( $field in $class.attributes ) #if ( $field.setter ) public void ${field.setter}( $field.type value ) { this.$field.name = value; } #end #if ( $field.getter ) public $field.type ${field.getter}() { return this.$field.name; } #end #end Repository (model) Velocity Context $class etc cf documentation sur le site Apache 18
3) Démo
Demo Connexion à la base de données Génération du «repository» Modification/adaptation du «repository» Génération des objets de base (Bean, List, DAO, Converters,...) 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 20
Demo Use the database meta-data to generate the initial repository Database Generation rules Repository Generator Repository.dbrep ( XML ) 21
Demo (cont d) The generated repository is editable with an Eclipse plugin editor Database Java Classes updatable Database Java Attributes O/R Mapping 22
Demo (cont d) Java fields : Each Java field can have additional information Useful for JSP/TagLib user input validation "Bean Validation " annotations ( JSR 303 ) or "Hibernate Validators" 23
Demo (cont d) Bulk generation 24
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 25
Demo (cont d) Entities links The foreign keys can be used to generate links between entities Useful for JPA beans generation 26
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 27
Demo (cont d) Adding a new specific template 1) create the new.vm file 2) add it in the templates.cfg file HTML documentation ; Title ${BEANNAME}.html ; File doc/html ; Folder vo_doc_html.vm vo_doc_html.vm Template 3) use it in the tool 28
Demo (cont d) Using wizards New 29
Conclusion
Conclusion Un outillage simple et léger Intégré dans Eclipse, immédiatement utilisable par des développeurs non initiés au MDD Peu sophistiqué, mais efficace - sophistication + La génération de code pour tous! 31
Conclusion Base de données Modèle léger Outils Code initial et le projet est sur les rails 32
Follow the project Web site : http:// LinkedIN group http://www.linkedin.com/groups?gid=1340197 Twitter http://twitter.com/telosys Viadeo group (in french) http://www.viadeo.com/hu03/0024uydjnnwew6j/telosys 33