1
Développement rapideAJAX / JEEavec un outillage libre
Laurent Guérin. SOGETI : National Practice Leader "Open Solutions" . OW2 : Telosys project leader [email protected]
Laurent Guérin - 31 mars 2009 2
Contexte et Industrialisation
Laurent Guérin - 31 mars 2009
La problématique de la productivité
3
Pro
du
ctiv
ité
Années
1970 1980 1990 2000
Client -
serveur
L4G
Web
COBOLC/C++
n-tiers
L3G
Complexitétechniqueencore tropimportante !
Laurent Guérin - 31 mars 2009
La complexité des environnements
4
persis-tence
services métier
objets métier
façade appli-cation
navi-gation
navigateur
HTML, CSS JavaScript,DOM, DHTML,XML/XSL, …
Java
Design Patterns
UML
SQL
L3G !
Rése
au
Nombreux frameworks (hétérogènes)Compétences multiples
AJAX
jar hell !dépendances !
IHM riche !
Laurent Guérin - 31 mars 2009
Problèmes & objectifs
5
. Assemblage de solutions hétérogènes. Multiplication des ".jar". Objets non transverses ( => mapping inter-couches ). Multiplication des objets( pb d'empreinte mémoire ). Code technique ( sans valeur ajoutée ). Perte de contrôle sur la couche de persistance. Couche AJAX non intégrée. etc …
. Simplifier l'environnement de développement. Assister le développeur . Alléger le processus de développement. Réduire de "code technique". Homogénéiser. Standardiser . Cadrer
La complexitéappelle la complexité !
Simplicité& Agilité
Laurent Guérin - 31 mars 2009
L'industrialisation
6
Méthode Méthode Outils Outils Framework Framework
( agile ) ( efficaces ) ( global )
Laurent Guérin - 31 mars 2009
Projets Java EE Open Source
7
• Infrastructure et middlewares :� Linux
� Apache
� Tomcat
� MySQL ( ou PostgreSQL )
• Frameworks� Telosys
� Spring
• IDE� Eclipse ( ou NetBeans )
� Outils de génération de code
100 %libre
100 %simple
Laurent Guérin - 31 mars 2009 8
Les frameworks
Laurent Guérin - 31 mars 2009
Le "cadre"
9
• Framework = "cadre"( doit guider le développeur )
• Qualités recherchées :� Souplesse, adaptabilité
� Non intrusif
� Isolation des composants ( SoC : Separation Of Concerns )
� Conventions d'utilisation ( CoC : Convention Over Configuration )
� Facile à outiller � à terme outillé
• Frameworks utilisés :
. Normes
. Conventions
. Best pratices
Outils
+
Laurent Guérin - 31 mars 2009
Framework "global"
10
• Telosys = framework "multi-aspects"= framework "global"
Un seul ".jar" ( telosys.jar )
Laurent Guérin - 31 mars 2009
Persistance
Architecture : Telosys seul
11
Présentation Application
ScreenMaps
Services
ScreenManagers
Métier
DAO
Java Beans( POJO )
XML conv
Authenti-fication
Commons, logging, I18N, …
AJAXJSP + taglib
FrameworkJavascript
SQL
"Pure POJO" : . aucune adhérence . aucune altération du byte code
Services
Suffisant pour réaliser une application web complète
PerformanceSimplicité
WebAppclassique( .war )
Laurent Guérin - 31 mars 2009
Persistance
Architecture : Telosys + Spring
12
Présentation Application
ScreenMaps
Services
ScreenManagers
Métier
DAO
Java Beans( POJO )
XML conv
Authenti-fication
Commons, logging, I18N, …
AJAXJSP + taglib
FrameworkJavascript
SQL
Composants / Services
coreIoC + AOP
Laurent Guérin - 31 mars 2009
Modularité : assemblage progressif
13
• Les composants sont indépendants
• Assemblés progressivement (avancement visible en temps réel par le chef de projet)
. Injection de dépendance
. Couplage faible
. AOP
Fichiers :. "application context" (XML)
. Couplage faible
. Triggers
. Conventions � Assemblage dynamique
Fichiers :. "Screens repository" (XML). "ScreenRegistry" (Java). "ServiceRegistry" (Java)
Laurent Guérin - 31 mars 2009
ScreenData
Mapping : écran – objets – base de données
14
<%@ taglib uri="/telosys/widgets" prefix="t" %><t: screenbody data= "employe" >
<t: label x="40" y="60" txt="Code : " cl="PK_field_label" / > <t: label x="40" y="100" txt="Name : " />
<t: field x="200" y="60" id= "code" data=" #" size="6" maxlength="6" /> <t: field x="200" y="100" id= "name" data=" #" size="30" maxlength="30" />
<t: button x="460" y="100" id="b1" txt=“My button" onclick="…" />
</t: screenbody >
. code
. name"employe"
"societe"
"xxxx"
DAO
mappingEMPLOYE. Code. Name
ScreenManager
XML
<employecode="" name="" />
JSP + taglib
ScreenMap
JavaBean( POJO )
Laurent Guérin - 31 mars 2009 15
Les outils
Laurent Guérin - 31 mars 2009
Orientation Software Factory
16
Software Factory
+
Contrôle Qualité
���� CheckStyle���� JDepend���� JUnit���� etc …
Laurent Guérin - 31 mars 2009
Génération de code : principe
17
Fichier"template"
Fichiergénéré
Moteur
Contexte
• Moteur de template :application d'un "template" sur un "contexte"
TemplatinglanguageObjets
Java
VelocityFreeMarkeretc …
.java, .html, .txt, etc…
Laurent Guérin - 31 mars 2009
Génération de code : différentes approches
18
• A partir d'un modèle UML� MDA (exemple "Acceleo")
• A partir d'un modèle non UML ���� notion de "modèle léger" (référentiel)
• Sans autre modèle que les classes Java � pour les cas simples, récupération dynamique des informations utiles (exemple "Java Model" d'Eclipse)
Laurent Guérin - 31 mars 2009
Génération de code : MDA
19
Code
UML
Part
name
Message
name
0..n+part 0..n
Service
name
Port
name
0..n+port 0..nPort Type
nameBinding
name1
+binding
1
1
+type
1
Param
name
1+message 1
Output
Input
StartWithExtensions
BindingFaultFault
name1
+message
11
BindingOperation
name
0..n+operation 0..n0..1 +input0..10..1+output 0..1
0..n
Operation
name0..1
+input
0..10..1
+output
0..1
0..n+fault 0..n
0..n+operation 0..n
11
1
+fault 0..n
Outil MDA
X M I( XML )
Template
Le modèle doit être . à jour. fiable. détaillé
Acceleo (OW2)AndroMDAetc …
Modélisation UML :. Objets Métiers. Services Métiers
Génération de la"couche métier"
Laurent Guérin - 31 mars 2009
Génération de code : "référentiel léger"
20
Fichiers.vm
Classes.java
Référentiel.dbrep
( XML )
Velocity
Contexte
Génération
du référentiel
Générationde code
Générationde squelettesde classes
Wizards
Telosys Tools
( plugin )
fiable(toujoursà jour)
ModèlePhysique
Base dedonnées
Laurent Guérin - 31 mars 2009
Développement de plugins Eclipse
2006-2007 : DAO Generator. 1er plugin pour Telosys. Fenêtres modales
2008 : Wizards. Assistants pour faciliter la création des classes Telosys
2007 : Screen Builder( prototype ). 1er plugin avec GEF. Editeur d'écrans WYSIWYG
2009 : Telosys Tools. Générateurs basés sur
des "editors". Assistants ( "wizards" )
Plugins Telosys
Eclipse = plateforme . assemblage de plugins. socle OSGi
Regroupementdes outils nongraphiques(génération decode & assistants)
Le développementde plugins est coûteux
Référentiel � Préserver l'indépendance => EMF
Laurent Guérin - 31 mars 2009 22
Démo avec Eclipse …
Laurent Guérin - 31 mars 2009
Intégration dans NetBeans
23
• Prototype en cours de développement
• Pour NetBeans un plugin est un "Module" ( fichier ".nbm" )
• Principe proche d'Eclipse
• Quelques différences :� Plus simple
� Swing ( et non SWT )
� FreeMarker est intégrédans NetBeans
Laurent Guérin - 31 mars 2009
Bilan
24
• Pour développer "avec agilité"� Réduire le nombre de frameworks
� Simplifier l'architecture
� Favoriser l'assemblage de composants indépendants
� Frameworks et outils
� Outils "légers" exemple : génération de code "sans contrainte"
• Surveiller le temps passer à …� gérer les dépendances ( jar hell )
� réaliser/tester du "code technique"
� administrer les outils
Laurent Guérin - 31 mars 2009 25
Questions ?
Laurent Guérin - 31 mars 2009
Quelques liens
26
• Telosys : http://telosys.ow2.org
• Spring : http://www.springsource.org/
• OW2 : http://www.ow2.org
• Eclipse : http://www.eclipse.org/
• NetBeans : http://www.netbeans.org/
Top Related