Développement JEE 5 avec Eclipse Europa (2008)

download Développement JEE 5 avec Eclipse Europa (2008)

of 396

Transcript of Développement JEE 5 avec Eclipse Europa (2008)

Dveloppement JEE 5 avec

Eclipse Europa

Karim

Djaafar

Dveloppement JEE 5 avec

Eclipse Europa

CHEZ LE MME DITEUR Ouvrages sur Java et JEE A. Patricio. JPA et Hibernate. N12259, 2008, 390 pages. J. Dubois, J.-P. retaill, t. temPlier. Spring par la pratique. Mieux dvelopper ses applications Java/J2EE avec Spring, Hibernate, Struts, Ajax... N11710, 2006, 518 pages. a. Goncalves. Cahier du programmeur Java EE 5. EJB 3.0, JPA, JSP, JSF, Web Services, JMS, GlassFish, Ant. N12038, 2007, 340 pages. C. Delannoy. Programmer en Java. Java 5 et 6. N12232, 5e dition, 2007, 800 pages + CD-Rom. e. Puybaret. Cahier du programmeur Swing. N12019, 2007, 500 pages. e. Puybaret. Cahier du programmeur Java 1.4 et 5.0. N11916, 3e dition, 2006, 380 pages. J.-P. retaill. Refactoring des applications Java/J2EE. N11577, 2005, 390 pages. R. Pawlak, J.-P. retaill, L. seinturier. Programmation oriente aspect pour Java/J2EE. N11408, 2004, 462 pages. R. Fleury. Cahier du programmeur Java/XML. Mthodes et frameworks : Ant, Junit, Eclipse, Struts-Stxx, Cocoon, Axis, Xerces, Xalan, JDom, XIndice N11316, 2004, 228 pages. J. weaver, k. mukhar, J. crume. J2EE 1.4. N11484, 2004, 662 pages. Autres ouvrages sur le dveloppement Web C. Porteneuve Bien dvelopper pour le Web 2.0 Bonnes pratiques Ajax. N12028, 2007, 580 pages. r. Goetter. CSS 2 : pratique du design web. N11976, 2e dition, 2007, 350 pages. T. temPlier, a. GouGeon. JavaScript pour le Web 2.0. N12009, 2007, 492 pages. M. Plasse. Dveloppez en Ajax. N11965, 2006, 314 pages. D. thomas et al. Ruby on Rails. N12079, 2e dition, 2007, 750 pages. E. DasPet et C. Pierre de Geyer. PHP 5 avanc. N12167, 4e dition 2007, 792 pages.

Dveloppement JEE 5 avec

Eclipse EuropaKarim Djaafar

Avec la contribution de Olivier Salvatori

DITIONS EYROLLES 61, bd Saint-Germain 75240 Paris Cedex 05 www.editions-eyrolles.com

Le code de la proprit intellectuelle du 1er juillet 1992 interdit en effet expressment la photocopie usage collectif sans autorisation des ayants droit. Or, cette pratique sest gnralise notamment dans les tablissements denseignement, provoquant une baisse brutale des achats de livres, au point que la possibilit mme pour les auteurs de crer des uvres nouvelles et de les faire diter correctement est aujourdhui menace. En application de la loi du 11 mars 1957, il est interdit de reproduire intgralement ou partiellement le prsent ouvrage, sur quelque support que ce soit, sans autorisation de lditeur ou du Centre Franais dExploitation du Droit de Copie, 20, rue des Grands-Augustins, 75006 Paris. Groupe Eyrolles, 2008, ISBN : 978-2-212-12061-5

Mise en page : TyPAO Dpt lgal : dcembre 2007 N dditeur : 7755 Imprim en France

Avant-ProposDepuis la sortie de mon premier ouvrage sur Eclipse, il y a quatre ans, couvrant la version 2.0, la plate-forme a normment chang. Eclipse tait lpoque encore peu utilis par la communaut Java, qui recourait dans sa grande majorit des IDE tels que JBuilder ou NetBeans. Avec la release Europa, sortie dbut juillet 2007, Eclipse est devenu une plate-forme de rfrence pour des projets complexes. En ce sens, la fondation Eclipse a atteint son but, qui tait de fournir la communaut Open Source et aux dveloppeurs professionnels une plate-forme able btie autour dun ensemble de produits, doutils et de services. Laboutissement de ce long travail a t la mise au point du projet Web Tools, conu et support par les grands diteurs du moment : IBM, bien sr, avec sa suite IRAD (IBM Rational Application Developer), mais aussi BEA, avec sa suite WebLogic Workshop, et bien dautres. Dans le sillage de la sortie dEuropa sont venus se greffer plus dune vingtaine de sousprojets aussi ambitieux que ceux des releases prcdentes. Citons notamment loutil de reporting volu BIRT (Business Intelligence and Reporting Tool), le support du clbre langage interprt et objet Ruby, avec le projet Eclipse Dynamic Language Tool Kit, les fonctionnalits avances de collaboration en ligne, avec le sous-projet Mylyn, ou encore le mapping O/R, avec Dali. Cet ouvrage a pour principal objectif de montrer la maturit de tous ces projets et leur couverture du cycle de dveloppement complet dune application J2EE/JEE. Au cours de notre parcours, nous nous appuyons sur une dmarche centre sur le modle, ou MDA (Model Driven Architecture), et loutil EclipseUML de lditeur Omondo. Louvrage couvre galement en profondeur la spcication EJB 3.0 et en dtaille tous les avantages en comparaison de lancienne spcication EJB 2.x, en particulier grce lAPI JPA (Java Persistence API).

qui sadresse louvrage ?Cet ouvrage est avant tout destin aux dveloppeurs Java/J2EE souhaitant faire leurs armes avec cette nouvelle spcication et disposant dun bagage sufsant leur permettant dintgrer des frameworks tels que JBoss Seam dans leurs projets. Il sera galement utile aux dcideurs et aux architectes dapplications J2EE/JEE et dentreprise dsireux de faire le point sur les apports de la spcication EJB3 et des outils et sous-projets offerts par la nouvelle plate-forme Eclipse Europa, qui couvrent lintgralit du cycle de dveloppement JEE.

VI

JEE5

Organisation de louvrageLouvrage est structur en trois grandes parties, plus une annexe. Partie 1 : La plate-forme de dveloppement Europa Le chapitre 1 dtaille les nouveauts de la plate-forme Europa. Le chapitre 2 introduit le projet Eclipse RCP et prsente les nombreux assistants proposs. Le chapitre 3 est consacr aux aspects lis la gestion de conguration et du dveloppement en quipe grce CVS et Subversion. Le chapitre 4 clt cette partie par une prsentation du proling de code avec le projet Eclipse Test and Performance Tools Platform (TPTP). Partie 2 : Dveloppement Web avec le projet Eclipse Web Tools Le chapitre 5 est consacr WTP (Web Tools Platform), un projet phare de la communaut Eclipse pour le dveloppement J2EE/JEE, et ses deux sous-projets : JST (J2EE Standard Tools) et WST (Web Standard Tools). Le chapitre 6 prsente loutillage du projet DTP (Data Tools Platfom), ax sur la manipulation des donnes. Le chapitre 7 introduit au dveloppement Web avec loutillage Web Tools et les patterns de conception. Le chapitre 8 clt cette partie par une prsentation dtaille du puissant framework Seam, la nouvelle plate-forme de dveloppement fonde sur les annotations. Partie 3 : Dveloppement EJB3 avec Eclipse et Web Tools Le chapitre 9 dcrit les principaux apports de la norme EJB 3.0 pour les projets JEE et dtaille les volutions de la notion de beans session ainsi que les annotions associes. Le chapitre 10 se penche sur lvolution des beans entit avec lAPI JPA et en montre toute la puissance pour la gestion de la persistance et du mapping objet-relationnel. Le chapitre 11 complte cette introduction lAPI de persistance avec le projet Dali, destine en faciliter la mise en uvre. Le chapitre 12 prsente latelier EclipseUML pour JEE, dont le but est de simplier le dveloppement JEE, et met en uvre la dmarche MDA au travers dune tude de cas. Le chapitre 13 conclut louvrage en revenant sur certaines fonctionnalits avances du framework Seam, notamment la gestion du contexte et la notion dintercepteurs permettant dintgrer harmonieusement des EJB 3.0 avec la technologie JSF. Partie 4 : Annexes

Page Web ddieUne page Web ddie louvrage est accessible depuis le site des ditions Eyrolles, ladresse http://www.editions-eyrolles.com. Lieu daccueil et de rassemblement des lecteurs, cette page est traite avec le plus grand soin an de leur fournir tout le relais ncessaire grce aux exemples de code complets et aux nombreux articles proposs sur les sujets traits dans louvrage. Vous pouvez aussi contacter lauteur directement son adresse professionnelle (kdjaafar@ jasmineconseil.com) pour toute demande dclaircissement ou avis susceptibles daider lamlioration de louvrage. Les avis pertinents seront relays sur la page Web ddie au livre.

Table des matiresAvant-Propos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .V

PARTIE I- LA PLATE-FORME DECHAPITRE 1

DVELOPPEMENT

EUROPA

Nouveauts dEuropa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Le projet Europa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonctionnalits Europa dEclipse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les sous-projets Europa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Le projet WTP (Web Tools Platform) . . . . . . . . . . . . . . . . . . . . . . . . . . . . TPTP (Test & Performance Tools Platform) . . . . . . . . . . . . . . . . . . . . . . . BIRT (Business Intelligence and Reporting Tools) . . . . . . . . . . . . . . . . . . DTP (Data Tools Platform) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . EMF (Eclipse Modeling Framework) . . . . . . . . . . . . . . . . . . . . . . . . . . . . GEF (Graphical Editor Framework). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . GMF (Graphical Modeling Framework) . . . . . . . . . . . . . . . . . . . . . . . . . . Visual Editor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CDT (C/C++ Development Tools) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .CHAPITRE 2

3 3 4 9 10 11 13 14 14 16 16 18 19 19

Support du client riche avec Eclipse RCP . . . . . . . . . . . . . . . . . .La notion de client riche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Architecture dEclipse RCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemples dapplications RCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21 21 22 24

VIII

JEE5

Mise en uvre de RCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dveloppement dune application RCP . . . . . . . . . . . . . . . . . . . . . . . . . . . Classes principales dune application RCP . . . . . . . . . . . . . . . . . . . . . . . . Ajout de fonctionnalits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .CHAPITRE 3 55

25 25 29 32 53

Support du dveloppement en quipe sous Eclipse avec CVSDveloppement collaboratif avec CVS . . . . . . . . . . . . . . . . . . . . . . . . . . Lhistorique local dEclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Le travail en quipe avec Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Larchitecture de gestion de conguration intgre . . . . . . . . . . . . . . . . . . Principes de gestion des ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Scnarios de dveloppement en quipe dans Eclipse . . . . . . . . . . . . . . . . . Mise en uvre de CVS dans Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installation et conguration de CVSNT . . . . . . . . . . . . . . . . . . . . . . . . . . . Ajout dutilisateurs avec pserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conguration du rfrentiel CVS dans Eclipse . . . . . . . . . . . . . . . . . . . . . Mise jour des ressources partir du menu Mettre jour. . . . . . . . . . . . . Le gestionnaire de versions Subversion . . . . . . . . . . . . . . . . . . . . . . . . . Prsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Concepts cls et nouvelles fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mise en uvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cration du rfrentiel Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dmarrage du dmon svn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Accder au serveur svn dans Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mise en uvre dun projet Eclipse avec Subclipse . . . . . . . . . . . . . . . . . . En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .CHAPITRE 4 87

55 55 56 57 57 58 59 61 62 65 65 72 75 75 76 77 78 78 83 85 86

Proling de code avec le projet TPTP . . . . . . . . . . . . . . . . . . . . . . .Architecture de TPTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Composants de TPTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mise en uvre de TPTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vues de proling disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

87 88 89 90 91

Table des matires

IX94 98 100

Ouverture de la vue de proling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Analyse des informations de proling collectes. . . . . . . . . . . . . . . . . . . .

En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

PARTIE II - DVELOPPEMENT WEB AVEC LE PROJET ECLIPSE WEB TOOLSCHAPITRE 5

Le projet WTP (Web Tools Platform) . . . . . . . . . . . . . . . . . . . . . . . .Le sous-projet JST (J2EE Standard Tools) . . . . . . . . . . . . . . . . . . . . . . Primtre de JST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Architecture du sous-projet JST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Loutillage J2EE standard de JST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Outils de support la cration de projets J2EE . . . . . . . . . . . . . . . . . . . . . Outils de support aux serveurs J2EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Le sous-projet WST (Web Standard Tools) . . . . . . . . . . . . . . . . . . . . . . Support des facets projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Support loutillage HTML, CSS et JavaScript . . . . . . . . . . . . . . . . . . . . Support des Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mise en uvre de WTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conguration de lenvironnement dexcution . . . . . . . . . . . . . . . . . . . . . Conguration des bibliothques additionnelles spciques. . . . . . . . . . . . Conguration dun projet de dveloppement Web. . . . . . . . . . . . . . . . . . . Proprits du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Structure et contenu du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Artefacts du projet et vues JEE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .CHAPITRE 6 127

103 104 104 105 106 107 109 111 111 112 113 114 115 117 118 123 124 125 125

Conception du modle de donnes avec le projet DTP (Data Tools Platform) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Architecture de DTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sous-projets de la plate-forme DTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mise en uvre de DTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Connexion la base Apache Derby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

127 128 128 130 130

X

JEE5

Cration dun prol de connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Script SQL de cration du schma de base de donnes . . . . . . . . . . . . . . . Gnration du DDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

133 135 137 137

En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .CHAPITRE 7

Dveloppement Web avec loutillage Web Tools et les patternsPrincipes de base de lexcution dune requte JDBC partir dun programme Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Design de lapplication Web avec Web Tools . . . . . . . . . . . . . . . . . . . . . Cration de la page daccueil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cration des pages Login.jsp et LoginSuccess.jsp . . . . . . . . . . . . . . . . . . . Cration de la servlet LoginServletTask. . . . . . . . . . . . . . . . . . . . . . . . . . . Gestion des commandes avec Web Tools et les patterns . . . . . . . . . . . . Design de la partie mtier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cration des classes daccs aux donnes selon les design patterns Commande et Singleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cration des composants servlets et JSP avec les assistants Web Tools. . . Conguration de la source de donnes du serveur JBoss . . . . . . . . . . . . . . Dploiement de lapplication sur le serveur JBoss . . . . . . . . . . . . . . . . En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .CHAPITRE 8

139 139 141 142 145 148 152 153 154 157 162 163 163

Dveloppement Web avec le framework JBoss Seam . . . . . .Les frameworks J2EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Limitations de Struts et JSF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . JSF (JavaServer Faces) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mise en uvre de JSF avec Eclipse Web Tools . . . . . . . . . . . . . . . . . . . . . Conguration de la cinmatique des pages JSF avec lditeur de conguration Web Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dploiement de la mini-application helloword sur JBoss . . . . . . . . . . . . . JBoss Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Caractristiques du framework Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mise en uvre de Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

165 165 167 167 168 174 177 178 178 181 194

Table des matires

XI

PARTIE III- DVELOPPEMENT EJB3 AVEC ECLIPSE ET WEB TOOLSCHAPITRE 9

Les fondamentaux EJB3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .La spcication EJB3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DEJB1 EJB3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Principales nouveauts dEJB3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction aux beans session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Quand utiliser des beans session ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Beans session sans tat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Beans session avec tat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vnements de callback des beans session . . . . . . . . . . . . . . . . . . . . . . . . Beans session EJB2 vs EJB3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les beans message (Message Driven Beans) . . . . . . . . . . . . . . . . . . . . . . . Mise en uvre du dveloppement EJB3 avec Web Tools et JBoss . . . Prrequis et conguration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cration et conguration du projet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Test de lEJB session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .CHAPITRE 10

197 197 197 199 202 202 203 209 211 212 213 215 215 216 222 224

LAPI JPA et la gestion des entits . . . . . . . . . . . . . . . . . . . . . . . . . .JPA (Java Persistence API) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Caractristiques de JPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les beans entit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Annotations de persistance des beans entit. . . . . . . . . . . . . . . . . . . . . . . . Relations entre beans entit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mapping des relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Proprits des relations et jointures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Utilisation des tables de jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linterface Entity Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Types de gestionnaire dentits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mthodes de cycle de vie dune entit EJB3 . . . . . . . . . . . . . . . . . . . . . . . Obtention dune fabrique EntityManagerFactory . . . . . . . . . . . . . . . . . . . Cration dun EntityManager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

225 225 227 228 228 234 235 235 241 242 243 243 245 246

XII

JEE5

Principales oprations disponibles sur les entits . . . . . . . . . . . . . . . . .Persistance dune entit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Recherche dentits et requtes JPQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . Suppression dune entit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mise jour dune entit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gestion des transactions JTA et non-JTA . . . . . . . . . . . . . . . . . . . . . . . . . . Mthodes de callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

246 246 247 249 249 250 251 252 252 254 255 258

Invocation partir dun client Java et dun client Web . . . . . . . . . . . .Gestionnaire dentits gr par lapplication (client Java) . . . . . . . . . . . . . Gestionnaire dentits gr par le conteneur (client Web) . . . . . . . . . . . . . Intgration de la couche de prsentation . . . . . . . . . . . . . . . . . . . . . . . . . .

En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .CHAPITRE 11

Mapping JPA avec Dali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Le projet Dali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Scnarios de dveloppement et conguration . . . . . . . . . . . . . . . . . . . . . .

259 259 260 262 263 267 273 279 283 284 285 285 288 290

Mise en uvre de lAPI JPA avec Dali . . . . . . . . . . . . . . . . . . . . . . . . . .Cration du projet JPA et connexion une source de donnes . . . . . . . . . Cration des entits persistantes du modle et mapping vers la base. . . . . Cration des mappings de base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mapping des relations interentits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mise en uvre du mapping de version . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dnition des requtes nommes de linterface Query . . . . . . . . . . . . . . .

Intgration des entits du modle logique et mise en uvre dun bean client faade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Entits Client et Commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Le bean session CommandeManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .CHAPITRE 12

Mise en uvre de lapplication webstock . . . . . . . . . . . . . . . . . . .Larchitecture MDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Mthodologie de mise en uvre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

291 291 292

Table des matires

XIII293 295 295 295 305 306 308 328

EclipseUML for JEE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lapplication webstock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Environnement de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modlisation avec EclipseUML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Export XMI du modle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nouveau projet JEE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gnration de code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .CHAPITRE 13

Conguration EJB3 avance avec Seam . . . . . . . . . . . . . . . . . . .Les contextes Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Contexte conversationnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mise en uvre de ltude de cas avec Seam . . . . . . . . . . . . . . . . . . . . . . Intgration de Seam dans larchitecture MVC . . . . . . . . . . . . . . . . . . . . . . Conguration de Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cas dutilisation Ajout dun nouveau client . . . . . . . . . . . . . . . . . . . . . Conversation Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

329 329 332 332 333 334 335 340 343 345 347

Annexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Remerciementscrire un ouvrage nest jamais une entreprise solitaire, mais le fruit dun travail de partage dides, dexpriences et de patience. Je remercie lquipe dOmondo, en particulier Vlad Varnica pour ses encouragements et Amira Talbi pour sa contribution la partie touchant la modlisation EJB3 et lutilisation de loutil de modlisation EclipseUML. Je remercie aussi lquipe dEyrolles, en premier lieu ric Sulpice, qui a accept lide de ce livre, et Olivier Salvatori pour ses prcieux conseils et sa patience innie lors des diffrentes relectures. Enn, un grand merci mes proches, qui mont donn la force de conclure cette entreprise.

Partie I

La plate-forme de dveloppement EuropaCette premire partie est entirement consacre la plate-forme de dveloppement Europa, nom de code de la version 3.3 dEclipse, qui englobe une dizaine de sousprojets remarquables, dont une grande partie sont dtaills dans cet ouvrage. Le chapitre 1 passe en revue les nouveauts dEuropa. Le chapitre 2 se penche sur le concept de client riche, une solution de rechange celui de client lger et au Bureau Windows, que le projet Eclipse RCP (Rich Client Platform) met en exergue. Le chapitre 3 aborde le dveloppement coopratif la lumire du systme de contrle Subversion, digne successeur de CVS, qui offre un grand nombre dinnovations par rapport son an. Le chapitre 4 clt cette partie par une prsentation du projet TPTP (Test and Performance Tools Platform), un projet Eclipse visant fournir la plate-forme Europa des services de mesures de performance et dautomatisation des tests.

1Nouveauts dEuropaLa plate-forme Europa, nom de code dEclipse 3.3, reprsente une avance importante dans la maturit de la plate-forme Eclipse. Elle est constitue dune suite de sous-projets permettant dorganiser de manire cible et cohrente le dveloppement Java. Aprs un bref rappel des principales innovations de la plate-forme, nous prsenterons chacun des sous-projets qui la composent, dont un certain nombre nous serviront au dveloppement de ltude de cas faisant ofce de l conducteur louvrage.

Le projet EuropaLe projet Europa a t propos au public en juillet 2007. Disponible pour les principaux environnements dexploitation, comme Windows Vista ou Linux, cette nouvelle mouture dEclipse est la fois plus performante (elle fonctionne sous forme dexcutable et non plus laide dune JVM) et riche de nouveauts adressant les problmatiques de dveloppement suivantes : Dveloppement dapplications Java, de plug-in Eclipse et dapplications client riche fondes sur le cur du projet Eclipse initial, avec le JDT (Java Development Tools) et le PDE (Plug-In Development Environment). Dveloppement dapplications Web et J2EE, avec le sous-projet Web Tools (Web and J2EE Development). Dveloppement dapplications Web grce la cration de rapports avec BIRT (Business Intelligence and Reporting Tools). Dveloppement dapplications C/C++, avec le projet CDT pour Eclipse C/C++ Development Tooling (que nous ne traitons pas dans cet ouvrage). Dveloppement dapplications centres sur la gestion et laccs aux donnes quelles quelles soient (bases de donnes, connecteurs, etc.), avec DTP (Data Tools Platform). Dveloppement dapplications centres sur la modlisation, avec EMF (Eclipse Modelling Framework) et GEF (Graphical Editing Framework).

4

La plate-forme de dveloppement Europa PARTIE I

Proling et test dapplications Java, avec TPTP (Test & Performance Tools Platform). Gnration dIHM pour Eclipse de type RAD, bases sur une implmentation Swing/ JFC ou SWT avec le projet Eclipse Visual Editor (VE). Fourniture dune infrastructure de gnration fonde sur EMF et GEF, permettant de crer un diteur graphique avec le projet Eclipse Graphical Framework. Les fonctionnalits associes ces diffrents sous-projets sont illustres la gure 1.1.Figure 1.1

Sous-projets dEuropa

Chaque sous-projet ncessite linstallation pralable des fonctionnalits associes. Par exemple, dans le cas du projet Web Tools, il est ncessaire dinstaller pralablement les fonctionnalits GEF et EMF (voir en annexe les procdures dinstallation).

Fonctionnalits Europa dEclipseLa nouvelle release dEclipse apporte clairement de nombreuses nouveauts, qui justient elles seules la migration des versions 3.1 et 3.2. Parmi les nombreuses fonctionnalits qui ont fait leur apparition dans la release 3.3, nous retiendrons celles qui nous semblent les plus utiles la productivit des dveloppeurs. Nous conseillons cependant aux lecteurs de les explorer toutes au fur et mesure de leur immersion dans le produit.Explorateur de projets

Leffort important apport linterface graphique saute aux yeux des habitus dEclipse 3.2. Une nouvelle vue, lexplorateur de projets, permet de mieux organiser les projets en fonction de leur particularit.

Nouveauts dEuropa CHAPITRE 1

5

Par exemple, les projets Java apparaissent sous la forme dune hirarchie de rpertoires source et de packages plutt que comme de simples rpertoires, tandis dans les projets de type Web apparaissent selon une arborescence respectant la spcication J2EE et maintenant JEE. La gure 1.2 illustre une vue de lexplorateurs de projets applique la gestion de ressources JEE.Figure 1.2

La vue explorateur de projets

Vue historique

Eclipse 3.2 apporte de puissantes fonctionnalits dhistorique, permettant de combiner les modications locales avec celles prsentes dans le rfrentiel projet. La gure 1.3 illustre cette possibilit. Il est possible de revenir la rvision dun source et de comparer la version courante avec la version historise.Figure 1.3

Vue historique (History)

6

La plate-forme de dveloppement Europa PARTIE I

Working Sets

Lorsque vous avez de nombreux projets dans un espace de travail, ou workspace, Eclipse, la vue Package Explorer devient vite surcharge. Il est dsormais possible de dnir ce quon appelle des Working Sets, ou jeux de documents, an de restreindre les ressources afches et de limiter ainsi le champ dexcution de certaines oprations, comme la recherche. Dans un projet multicouche, comportant des centaines de classes, il est de la sorte possible de nafcher un instant t quun sous-ensemble de chiers. Typiquement, lorsque vous travaillez sur un cas dutilisation, vous pouvez vouloir nafcher que sa DAO, ses services et son IHM. La gure 1.4 illustre un Working Set dni pour lafchage de ressources de type EJB.Figure 1.4

Slection dun Working Set

Vue Filtres

La vue Filtres permet de regrouper les erreurs par type (incidents Java, incidents relatifs la conguration du projet, incidents de type PDE, etc.) et par gravit. La gure 1.5 illustre la conguration du ltre dafchage des erreurs.Figure 1.5

Vue Filtres

Nouveauts dEuropa CHAPITRE 1

7

La vue Cheat Sheet

Puissante et conviviale, la vue Cheat Sheet permet de garder ouverte une fentre daide en ligne pendant que vous tes en train de travailler avec un assistant Eclipse. La gure 1.6 illustre laide la cration dune premire application Java sous Eclipse.Figure 1.6

Vue Cheat Sheet

Import de projets avec copie

Lors de limport dun projet existant, une case cocher vous permet de demander Eclipse de copier le rpertoire du projet import dans le rpertoire du workspace. La case nest pas coche par dfaut, car il nest pas obligatoire de stocker les projets dans le rpertoire du workspace.Liens vers des ressources chier

Il est possible dutiliser un lien vers une ressource projet sans avoir copier cette ressource dans son workspace, an de ne pas surcharger ce dernier.Lintgration des ux RSS

La section Dernires nouvelles de la fentre de bienvenue intgre des ux RSS (ncessitant une connexion Internet) permettant de proter au mieux des informations les plus rcentes en provenance de la fondation Eclipse.

8

La plate-forme de dveloppement Europa PARTIE I

La gure 1.7 illustre une vue de la section Latest News.Figure 1.7

Exemple de support des ux RSS

Nettoyage de code

Loption Nettoyage (menus Source/Nettoyage) est une fonctionnalit puissante de productivit du code, qui permet de demander Eclipse de nettoyer le code en appliquant des rgles congurables via la bote de dialogue illustre la gure 1.8.

Figure 1.8

Vue Nettoyage

Restructuration de scripts

Europa renforce les fonctionnalits de refactoring de code dj trs avances de la version 3.1 dEclipse. Il est dsormais possible de crer des scripts avec un meilleur contrle et un historique des modications et de la rorganisation du code. La gure 1.9 illustre la vue Restructuration disponible dans Europa.

Nouveauts dEuropa CHAPITRE 1Figure 1.9

9

Vue Restructuration

Les sous-projets EuropaLes sous-projets qui constituent Europa sont le fruit de la collaboration de quelque trois cents dveloppeurs travers plus dune vingtaine de pays. Europa ne consiste pas en une intgration totale de ces sous-projets. Chacun deux reste un projet Open Source autonome, avec un chef de projet, des dveloppeurs et un planning propres.Figure 1.10

Sous-projets Eclipse Europa

Parmi ces sous-projets, dont plus dune vingtaine sont illustrs la gure 1.10, certains sont historiques la plate forme Eclipse, comme EMF, JDT et Equinoxe, et couvrent des domaines du dveloppement trs varis, en particulier les suivants : Business intelligence et reporting avanc avec le projet BIRT.

10

La plate-forme de dveloppement Europa PARTIE I

Frameworks favorisant lextensibilit de la plate-forme autour de SOA avec le projet SOA Tool Platform (http://www.eclipse.org/stp/) et de nombreux sous-projets associs. Fonctionnalits avances de collaboration en ligne fondes sur les tches avec le projet Mylyn (anciennement Mylar). Nouvel IDE pour le dveloppement avec le langage Ruby dans le projet DLTK (Dynamic Languages Toolkit). Projets de support au dveloppement JEE, comme WTP (Web Tools Platform) et Dali.

Le projet WTP (Web Tools Platform)Apparu le 23 dcembre 2005, le projet Web Tools (http://www.eclipse.org/Web Tools) visait principalement rpondre la demande de nombreux dveloppeurs de disposer en standard doutils avancs pour le support dapplications J2EE avances. Ni la plate-forme Eclipse, ni loutillage Java propos par dfaut (le JDT) ne comportaient dditeurs JSP ou XML, dassistants EJB ou de mcanismes de dploiement sur les principaux serveurs dapplications J2EE compatibles. Cette lacune a t comble par diffrents plug-ins commerciaux, tel MyEclipse, ou Open Source, tel Lomboz. Ces solutions imposaient cependant des choix denvironnement particuliers, qui constituaient autant de freins ladoption dun standard commun. Les principaux objectifs de WTP (Web Tools Platform) sont les suivants : tendre la plate-forme Eclipse laide doutils ddis an de couvrir les dveloppements Web et J2EE, et bientt JEE 5 avec WTP 2.0 ; proposer des outils de support des ressources de type HTML et XML, des services Web, des donnes, etc. ; inclure des outils de support au dploiement dapplications sur les principaux serveurs dapplications du march (Tomcat, JBoss, Geronimo, WebSphere CE, etc.). Largement couvert dans cet ouvrage, ce projet, dont une grande part du code est issue de la contribution dIBM et dObjectWeb, est constitu de deux sous projets, WST et JST, et dun projet en incubation , JSF : WST (Web Standard Tools). Ce sous-projet touche plusieurs primtres, notamment le support ldition de langages Web (diteur de code source HTML, XML, XMLSchema, DTD, etc.), le support de serveurs J2EE/JEE et le support des Web Services (diteur de chiers WSDL et explorateur de services en particulier). Il fournit des fonctionnalits spciques, appeles Project Facets, selon le type de projet support. Par exemple une facet Dynamic Web Project est propose dans lexplorateur de projets de WST. JST (J2EE Standard Tools). Ce sous-projet correspond lenvironnement J2EE/JEE. Son objectif est de fournir des outils et des API standards spciquement ddis la modlisation et au support des spcications mises par le JCA (Java Community Process) pour les serveurs dapplications et Web utilisant J2SE et J2EE/JEE. La release courante de WTP supporte cette date les versions J2EE 1.2, 1.3 et 1.4 (le support JEE5, en particulier des assistants de cration de ressources EJB3, nest pas encore natif). Ce projet permet la prise en compte des formats war et ear des projets et un support au dveloppement de servlets, JSP et EJB. Une vue Servers permet notamment de piloter et de congurer les principaux serveurs dapplications du march.

Nouveauts dEuropa CHAPITRE 1

11

JSF Tools (JavaServer Faces Tools). Ce projet propose un outillage complmentaire pour le dveloppement dapplications utilisant les JavaServer Faces et une partie des spcications de la norme JEE5 (JSF 1.2). Lanc n 2005 par Oracle, ce projet apporte des assistants de conguration de projet pour le support des JSF et des tags JSF dans des pages JSP et lajout dditeurs spciques pour les chiers descripteurs facescong.xml permettant une dnition graphique de la cinmatique de navigation ( limage des diteurs dans le framework Struts). Ce sous-projet a t intgr en juin 2006 a la release Callisto et WTP 1.5, la version WTP 2.0 ayant t quand a elle bundle la release ofcielle Europa partir de juin 2007. Nous reviendrons en dtail sur ce projet important, abondamment mis contribution dans ltude de cas de louvrage. La gure 1.11 illustre la cible et les technologies sous-jacentes de ces diffrents sous projets.Figure 1.11

Cibles couvertes par le projet Web Tools

En plus du projet JSF Tools, deux nouveaux sous-projets ont fait leur apparition courant 2006 : Dali JPA (Java Persistence API) Tools. Ce projet propose des outils facilitant le mapping objet-relationnel, la persistance et le dveloppement EJB3. Ce projet sera amplement discut et mis en uvre au chapitre 10. La version actuelle, Dali JPA Tools 1.0, intgre la release Europa propose des fonctionnalits intressantes pour la gnration du chier descripteur de persistance (persistence.xml), la conguration volue dun projet Java et laide aux annotations prvues par la spcication JPA. Dali propose en outre de puissants outils dORM, la possibilit de visualiser les champs persistants et les relations ainsi que le mapping de llment slectionn dans lditeur de code source. ATF (Ajax Toolkit Framework). Cr dbut 2006, ce projet rattach WST a pour objectif la livraison de frameworks et doutils de support aux diffrentes versions de runtime Ajax existantes. Comme nous le verrons tout au long de louvrage, ce projet trs dynamique risque fort de devenir loutil de rfrence des dveloppements J2EE/JEE 5.

TPTP (Test & Performance Tools Platform)La mise en uvre de tests et lanalyse des performances des applications sont des phases essentielles dans le cycle de vie des projets, qui ncessitent des outils appropris.

12

La plate-forme de dveloppement Europa PARTIE I

Cest dans ce but que le projet TPTP a vu le jour en 2002, dabord sous le nom de Hyades avant de devenir en 2004 un des projets principaux de Callisto puis dEuropa. TPTP est organis en quatre sous-projets : TPTP Platform Project, qui forme lossature de la solution utilise par les diffrents outils de test et de mesure de performances. Il fournit les mcanismes permettant de collecter les mtriques et de les agrger. TPTP Tracing and Proling Tools Project, qui intgre les outils permettant la collecte des informations sur le fonctionnement dapplications Java sexcutant ou non sur un serveur J2EE compatible et lanalyse de ces informations (localisation des zones mmoire alloues, dtermination des temps dexcution, etc.). Ces outils sappuient sur une analyse dynamique de lapplication. Cette dernire est excute dans un mode particulier, appel Proling, qui permet la collecte dinformations sur les temps dexcution et loccupation mmoire. Pendant lexcution ou une fois celle-ci termine, plusieurs vues permettent danalyser les rsultats. TPTP Test Tools Project, qui propose des outils permettant la cration de scnarios de tests. Diffrents types de projets de test sont proposs, tels que les tests automatiss avec JUnit, les tests Web (capture et enregistrement des requtes HTTP) et les tests ncessitant lintervention de lutilisateur. TPTP Monitoring Tools Project, qui fournit des outils de collecte et dafchage des performances de lapplication ainsi que du systme. La page ofcielle du projet TPTP est disponible ladresse http://www.eclipse.org/tptp/. La version utilise au chapitre 4 de louvrage est la 4.2. La gure 1.12 illustre une vue des diffrentes mtriques disponibles dans loutil TPTP.Figure 1.12

Mtriques disponibles dans TPTP

Nouveauts dEuropa CHAPITRE 1

13

BIRT (Business Intelligence and Reporting Tools)Lambition de ce projet est dapporter des outils de gnration dtats, une solution puissante Open Source pour la cration de rapports pour les applications Web en environnement Eclipse. Les deux composantes de BIRT sont un outil de conception de rapports et un moteur dexcution installable dans un serveur dapplications J2EE. BIRT fournit des outils pour la prise en compte des quatre grandes tapes de la cration dun rapport : 1. Rcupration des donnes. Des assistants permettent de dnir la faon de rcuprer les donnes utiliser dans le rapport. Les donnes peuvent provenir de bases de donnes relationnelles, de chiers XML, de services Web ou directement dobjets Java. 2. Transformation des donnes. Il est courant quun rapport nafche pas directement les donnes rcupres mais que des transformations soient ncessaires, telles que tri, regroupement, calcul de sous-totaux, de pourcentages, etc. 3. Ajout de rgles mtier. La structuration du rapport et les valeurs de certains champs peuvent dpendre de rgles plus ou moins complexes. BIRT permet soit dappeler la logique Java, soit, pour les cas les plus simples, dembarquer directement dans le rapport du code JavaScript. 4. Mise en forme. Une fois les donnes rcupres et transformes, reste grer la prsentation du rapport. BIRT propose un constructeur graphique de rapport, qui permet de prsenter les donnes de diverses faons : tableaux, graphiques, texte format, etc. Comme lillustre la gure 1.13, BIRT 2.0 permet de gnrer des rapports aux formats HTML et PDF. Lexport des donnes au format CSV est aussi support. Pour en savoir plus sur ce projet trs actif, reportez-vous la page ofcielle du site (http://www.eclipse.org/birt/).

Figure 1.13

Vue des possibilits de loutil de reporting BIRT (total des chiffres de vente par trimestre et par produit)

14

La plate-forme de dveloppement Europa PARTIE I

DTP (Data Tools Platform)Le projet DTP regroupe un ensemble doutils permettant de se connecter aux bases de donnes relationnelles. Les principales fonctionnalits quil propose sont les suivantes : assistants pour dnir les informations de connexion JDBC une base de donnes relationnelle ; explorateur de bases de donnes (liste des tables, structure des tables, etc.) ; diteurs SQL de deux types : diteur de code source et diteur visuel offrant une reprsentation graphique dune requte ; testeur de requtes SQL avec visualisation du rsultat. La gure 1.14 illustre la vue associe la conguration dune connexion la base de donne Derby.Figure 1.14

Vue de lassistant de conguration de connexion DTP

EMF (Eclipse Modeling Framework)Apparu en 2002, le projet EMF (www.eclipse.org/emf) permet de dcrire un modle objet puis dcrire ou de gnrer le code permettant de le manipuler. Ce projet trs utilis sert de base dautres projets, tels que GEF et GMF (voir plus loin). Relativement riche et complexe, il se prsente comme un ensemble doutils de dveloppement intgrs lenvironnement Eclipse sous forme de plug-in an douvrir Eclipse au dveloppement pilot par les modles. Son objectif est de permettre dappliquer cette approche aussi bien au dveloppement dapplications mtier qu la construction et lintgration de nouveaux plug-ins.

Nouveauts dEuropa CHAPITRE 1

15

EMF apporte les deux fonctionnalits principales suivantes : Dnition de modles objet et de diagrammes UML constitus de packages de classes et de liens entre ces classes. Ces modle peuvent tre labors partir de code Java annot, de documents XMI issus dautres modeleurs (par exemple, Omondo est en grande partie nativement intgr EMF), dun diteur arborescent intgr EMF ou par programmation. Transformation dun modle EMF en code Java et gnration dun diteur arborescent spcique pour construire des entits conformes ce modle. La structure des modles EMF est dnie par le mtamodle Ecore. Ce dernier est conceptuellement proche de MOF (MetaModel Facility), un standard de lOMG adressant la reprsentation des mtamodles et leur manipulation. Lune des caractristiques parmi les plus puissantes de ce projet est doffrir un cadre et un support la mtamodlisation, qui consiste spcier un mtamodle sous forme de modle EMF et en produire une implmentation Java an de reprsenter les instances de ce mtamodle et de les manipuler. Eclipse/Europa propose des assistants intgrs permettant la cration de modles EMF ainsi que la gnration du code associ au modle et, bien entendu, des diteurs adapts leur manipulation. La gure 1.15 illustre un aperu des outils intgrs de support la transformation de modles MOF Eclipse (appels eCore, qui est limplmentation Eclipse de la spcication MOF).Figure 1.15

Outils intgrs de support au projet EMF

EMF est un projet trs important Callisto et dEuropa, qui mrite un examen attentif tant ses possibilits sont nombreuses et puissantes.

16

La plate-forme de dveloppement Europa PARTIE I

GEF (Graphical Editor Framework)Le projet GEF est un environnement pour le dveloppement dditeurs graphiques fonds sur lAPI Draw2D, une surcouche de la bibliothque graphique SWT intgre Eclipse, qui propose des fonctions avances de dessin et de calques (Layout). Pour la petite histoire, GEF (comme Eclipse) a t lgu par IBM la fondation Eclipse. Il tait auparavant support par les outils de modlisation de Rational. GEF se fonde sur une architecture de type MVC (modle, vue, contrleur). Il propose une bote outils permettant de visualiser les graphes mis la disposition du dveloppeur, ainsi quun certain nombre de fonctions de base quil est possible dtendre. Il reste toutefois la charge de ce dernier de dnir une smantique graphique permettant de faire le lien entre la visualisation et le modle EMF correspondant et crire une partie du code Java permettant dimplmenter linterface graphique partir des classes produites par EMF et GEF. La gure 1.16 illustre un afcheur de diagrammes UML conu avec le framework GEF.Figure 1.16

Afcheur de diagrammes UML de GEF

Pour plus de dtails sur ce projet, reportez-vous la documentation disponible sur le site du projet, ladresse http://www.eclipse.org/gef/.

GMF (Graphical Modeling Framework)Apparu historiquement aprs GEF et EMF (toujours en legs dIBM la fondation Eclipse), GMF permet de relier les deux frameworks, raison pour laquelle il est souvent

Nouveauts dEuropa CHAPITRE 1

17

assimil un environnement RAD pour la construction et le dveloppement dditeurs fonds sur EMF/GEF. Lutilisation du framework GEF est assez ardue. Elle ncessite une phase dapprentissage et de matrise de ses API relativement fastidieuse, en partie parce que GEF nest pas coupl au modle UML sous-jacent, ce qui peut engendrer un certain nombre de problmes. GMF est fond sur un framework pilot par les modles (MDA). La cinmatique dutilisation du framework et de ses principaux composants telle quillustre la gure 1.17 est propose lors de la cration dun projet GMF via lassistant de cration de nouveau projet dEclipse.Figure 1.17

Cinmatique dutilisation du framework GMF sous Eclipse

Comme vous pouvez le voir, le cur du framework GMF sappuie sur une dnition graphique du modle que lon souhaite gnrer. En option, il est possible dutiliser des outils et des lments de la palette graphique (menus, barre doutils, etc.). Une fois le mapping entre le modle slectionn et linformation graphique associe effectu, GMF fournit un gnrateur de modles (tape Create Generator Model). Ce dernier permet dimplmenter les dtails du modle permettant daboutir la gnration nale sous la forme dun plug-in directement utilisable dans Eclipse via les menus Fichier, Nouveau, Exemples et Model Diagram. La gure 1.18 illustre un exemple dditeur UML conu avec le framework GMF.Figure 1.18

diteur UML conu avec le framework GMF

18

La plate-forme de dveloppement Europa PARTIE I

Prcisons que ce framework, tout comme les frameworks EMF/GEF, constitue un prrequis linstallation de Web Tools. Il est dailleurs disponible en version bundle sur le site dIBM alphaworks, ladresse http://www-128.ibm.com/developerworks/eclipse/downloads/.

Visual EditorVisual Editor est un plug-in de type RAD pour le dveloppement dinterfaces SWING ou AWT sous Eclipse. Il sagit dun environnement complet, comportant une riche palette permettant le dveloppement assist dinterfaces graphiques volues. La gure 1.19 illustre une vue de latelier VE avec un aperu de la bote outils disponible.Figure 1.19

Exemple dditeur UML conu avec le plug-in Visual Editor du framework GMF

Le plug-in Visual Editor permet de crer un nouveau type de Visual Class, ainsi que dutiliser une palette graphique. Visual Editor nest pas seulement utile pour modliser rapidement une interface. Il est aussi trs performant pour grer les vnements sur divers lments graphiques. La gure 1.20 illustre une liste dvnements supports par le composant de type bouton de latelierVisual Editor.Figure 1.20

vnements supports par Visual Editor

Nouveauts dEuropa CHAPITRE 1

19

CDT (C/C++ Development Tools)Le projet Eclipse CDT (C/C++ Development Tools) sinstalle sur la plate-forme Eclipse et ltend en fournissant des fonctionnalits avances pour les dveloppeurs C/C++. CDT inclut les fonctionnalits suivantes : diteur C/C++ fournissant des fonctionnalits lmentaires, comme une syntaxe colorie, la compltion de code, etc. ; debogueur C/C++ ; lanceur dapplications C/C++ ; compilateur ; moteur de recherche ; gnrateur de makele. La gure 1.21 illustre une vue de latelier de dveloppement CDT sous Eclipse.Figure 1.21

Vue de latelier de dveloppement CDT sous Eclipse

En rsumEuropa reprsente une tape importante dans lhistoire dEclipse et dans la fourniture doutils pour le support au dveloppement dapplications de type client riche, Internet riche et serveur.

2Support du client riche avec Eclipse RCPLe fort engouement pour les architectures Web 2.0 remet sur le devant de la scne la notion de client riche, que lon retrouve dans une profusion de solutions destines donner plus dinteractivit aux applications Web. Le framework Eclipse RCP (Rich Client Platform) se veut une solution de rechange crdible au bureau Windows. Vous mesurerez dans ce chapitre toute la richesse des outils fournis au dveloppeur pour simplier son travail. Aprs une prsentation des bases de la cration dune application RCP et une prise de contact avec les principales classes et interfaces associes, nous dtaillerons la cration de menus, barres doutils, vues, diteurs et botes de dialogue, ainsi que lutilisation des pages de prfrences. Nous terminerons le chapitre par le packaging du produit et lintgration des diffrents jar. Le terme workbench, ou Bureau Eclipse, sera utilis tout au long de ce chapitre.

La notion de client richeBien que les applications intranet de type client lger soient largement rpandues dans les entreprises, elles ne peuvent couvrir lensemble des besoins. Certaines applications prsentent des contraintes dergonomie, de rapidit, de complexit ou encore dintgration aux outils bureautiques, que le client lger ne peut satisfaire. Le concept dapplication riche est apparu au cours des annes 1990 pour les deux grandes familles dapplications suivantes : Applications Internet riches, ou RIA (Rich Internet Applications), qui sappuient sur lutilisation dun navigateur ct client et exploitent soit les fonctionnalits volues des navigateurs, soit des extensions. Les applications AJAX telles que Google Maps, Yahoo! Mail, etc., entrent dans cette catgorie. Leur gnralisation en entreprise parat toutefois dlicate, du fait de problmes de productivit et maintenabilit du JavaScript

22

La plate-forme de dveloppement Europa PARTIE I

et du DHTML ainsi que de portabilit entre navigateurs, de limitations imposes par ces derniers en termes dintgration avec les autres applications et de manque de performances des interfaces graphiques complexes. Applications riches fondes sur un socle applicatif installer sur le poste utilisateur. Eclipse RCP appartient cette catgorie, qui reprsente une volution des architectures client/serveur de premire et deuxime gnrations des annes 1990. Eclipse RCP apporte des solutions aux deux problmes principaux de ces architectures, qui sont la distribution de lapplication sur les postes utilisateur et leur forte dpendance vis--vis des technologies propritaires. Si ces applications natteignent pas la facilit de distribution du client lger, elles attnuent les problmatiques dinstallation initiale et de gestion des mises jours et offrent des avantages vidents en matire de ractiv, de qualit des interfaces graphiques, de souplesse (avec le mode dconnect) et dintgration pousse aux autres applications installes sur le poste. Pour satisfaire les applications daujourdhui, un client riche doit possder les mcanismes et caractristiques suivantes : interface graphique volue ; appel des services mtier sexcutant sur un serveur dapplications ; plate-forme indpendante du systme dexploitation hte ; framework de composants standards rutilisables ; mcanisme intgr et volu de mise jour des composants ; extensibilit. La gure 2.1 illustre un exemple darchitecture riche .Figure 2.1

Exemple darchitecture riche

Architecture dEclipse RCPEclipse RCP est apparu en 2004 an dapporter un support du client riche aux applications fondes sur Eclipse. Une petite portion du noyau dEclipse (moins de 5 Mo) est utilise pour assurer ce support en expurgeant la partie propre au support dun environnement de dveloppement. Il comprend une technologie de dploiement et dinstallation de clients riches sous forme de plug-ins, ainsi quune panoplie de plug-ins gnriques. Principal contributeur du projet, IBM la plac au cur de son Workplace Client Technology Rich Edition. Il y a ajout des composants graphiques (le standard Widgets Toolkit) et une fonction de synchronisation avec une base locale.

Support du client riche avec Eclipse RCP CHAPITRE 2Figure 2.2

23

Composants dEclipse RCP

Comme lillustre la gure 2.2, Eclipse RCP est constitu des cinq composants principaux suivants : Environnement standard dexcution OSGI (Open Services Gateway Initiative). Runtime Eclipse, qui forme le socle de chargement et dexcution des services Eclipse. Workbench gnrique Eclipse (UI), qui constitue le composant de base de la plateforme. API de bas niveau SWT pour le support des objets graphiques. JFace, surcouche graphique fonde sur SWT, permettant de grer des composants graphiques complexes, tel le workbench gnrique (UI) constitu de lensemble des vues, diteurs et perspectives formant lossature dEclipse. Lutilisation dEclipse RCP pour le dveloppement dapplications riches offre les avantages suivants : Support natif du systme dexploitation hte. Permet de proter du look and feel de lenvironnement graphique utilis (Windows, MacOS, UNIX), puisque Eclipse RCP sappuie sur les composants de la bibliothque SWT, qui utilise de manire native les fonctionnalits du systme dexploitation. Concept de bureau mtier . Permet de sintgrer facilement aux applications bureautiques les plus courantes (Word, Excel, etc.) tout en combinant les dveloppements au sein dun seul bureau mtier . Le socle technique mutualise les services dauthentication et SSO ainsi que de communication avec les serveurs dapplications. Mise jour automatique des plug-ins. Permet une mise jour des plug-ins travers Internet par le biais du gestionnaire de mise jour. Dploiement multi-OS. Facilite le packaging et le dploiement des applications par simple glisser-dplacer des rpertoires de la distribution RCP dans les rpertoires de plug-ins concerns. Meilleures extensibilit et rutilisabilit. Le partitionnement des applications en plusieurs modules ou plug-ins encourage la cration de points dextension favorisant lextensibilit de lensemble ainsi que sa rutilisation pour dautres applications.

24

La plate-forme de dveloppement Europa PARTIE I

Exemples dapplications RCPVoici quelques exemples dapplications professionnelles bties sur le framework RCP. La gure 2.3 illustre linterface dEclipse Trader (http://eclipsetrader.sourceforge.net/), une application RCP Open Source de gestion de portefeuille donnant en temps rel lvolution des cours de la Bourse.Figure 2.3

Application de gestion de portefeuilles boursiers fonde sur RCP

La gure 2.4 illustre la clbre suite Notes de lditeur IBM relooke et rebaptise IBM Lotus Symphony pour tirer partie des avantages de la pile RCP.Figure 2.4

Nouvelle suite IBM Lotus Symphony

Support du client riche avec Eclipse RCP CHAPITRE 2

25

Mise en uvre de RCPLobjectif de lenvironnement Eclipse RCP est de permettre de construire des applications volues aussi bien en termes dIHM que dintgration aux composants annexes (outils bureautiques, services protant de lcosystme Eclipse. Une application RCP requiert : Un programme principal. Une perspective. Un composant Workbench Advisor, qui permet le contrle les composants de lapplication (menus, barres doutils, perspectives). Pour construire une application RCP avec une interface graphique minimale, il est ncessaire dembarquer les plug-ins org.eclipse.ui et org.eclipse.core.runtime. En comptant lexcutable Eclipse et le chier statup.jar ncessaire son excution, environ 6,6 Mo despace disque sont ncessaires au bon dploiement et fonctionnement dune application RCP. Le package org.eclipse.core.resources, qui permet de grer lespace de travail Eclipse et les ressources correspondantes, ne fait pas partie de la distribution Eclipse RCP, bien quil soit trs utile pour laccs aux ressources Eclipse. Le plug-in org.eclipse.ui.ide se situe au niveau du workbench, ou espace de travail Eclipse (org.eclipse.ui). Il constitue un ensemble dAPI pour linterface visuelle de lIDE Eclipse, au sommet de laquelle gravitent dautres composants, tels le JDT, le PDE, le dbogueur et le gestionnaire de versions. LIDE instancie le workbench ainsi que les menus spciques et la barre doutils Eclipse en ajoutant des vues spciques, des pages de prfrences et dautres extensions.Installation Eclipse et support de la langue franaise lheure o nous crivons ces lignes, le package de support de la langue franaise pour Europa nest pas encore disponible (seul le package pour Callisto NLpack1-eclipse-SDK-3.2-win32.zip est disponible). Tous les messages relatifs lutilisation des assistants se font donc en langue anglaise.

Dveloppement dune application RCPLes tapes de dveloppement dune application RCP sont les suivantes : 1. Cration du squelette de lapplication RCP. 2. Ajout de fonctionnalits Eclipse lapplication en utilisant les plug-ins suivants : org.eclipse.ui.actionSets org.eclipse.help.toc org.eclipse.ui.preferencePages org.eclipse.ui.views 3. Packaging du produit. 4. Dploiement et excution du produit en dehors dEclipse.

26

La plate-forme de dveloppement Europa PARTIE I

Prrequis

Vous pouvez tlcharger la version Eclipse for RCP/Plug-in Developers partir du site dEclipse (http://www.eclipse.org/downloads). Cest la version la plus complte pour le dveloppement dapplications fondes sur le framework RCP. Il ne faut pas utiliser les autres versions, comme Eclipse IDE for JEE, car elles ne comprennent pas lintgralit des bibliothques et outils pour le dveloppement dans cet environnement.Cration du squelette de lapplication

Pour crer lapplication RCP, procdez de la faon suivante : 1. Lancez la cration dun nouveau projet de plug-in, via les menus File, New et Plug-in Development. 2. Dans la liste Plug-in Development de lassistant de cration de projet Eclipse, slectionnez Plug-in Project, puis cliquez sur Next. 3. Entrez le nom du projet, ici HelloRCP, en laissant les options par dfaut (option Create a Java Project coche avec les options de rpertoire source et de sortie src et bin respectifs ainsi que Version Eclipse 3.3). Cliquez sur Next. 4. Dans la page suivante, cochez yes pour loption Would you like to create a rich client application ? , et saisissez vos initiales pour le champ associ Plug-in Provider. 5. Laissez les autres options du plug-in coches par dfaut, et cliquez sur Next. 6. Vous obtenez diffrents templates sur lesquels vous pouvez vous appuyer pour crer lapplication (voir gure 2.5). Pour cet exemple, slectionnez RCP Hello, puis cliquez sur Next.Figure 2.5

Templates Eclipse RCP disponibles

7. Lassistant vous rappelle un certain nombre dinformations sur le projet RCP que vous avez conu, dont le titre de la fentre de lapplication (Hello RCP), lID de lapplication (application), le nom du package (hellorcp), la classe de lapplication (Application). Cliquez sur Finish.

Support du client riche avec Eclipse RCP CHAPITRE 2

27

Vous devez obtenir lcran illustr la gure 2.6.

Figure 2.6

Conguration dune application Eclipse RCP

La structure projet illustre la gure 2.7 doit tre cre.Figure 2.7

Structure du projet RCP aprs cration

Noms de projets Il est dusage dans la communaut des dveloppeurs Eclipse de nommer les projets sous la forme despaces de noms, la manire des noms de packages Java. Puisque chaque plug-in est dvelopp dans un projet, cette convention pratique permet de faire correspondre le nom du projet avec les identiants des plug-ins quil contient.

28

La plate-forme de dveloppement Europa PARTIE I

Dmarrage de lapplication RCP

Si vous excutez lapplication en cliquant sur loption Launch an Eclipse Application, aprs avoir bascul dans la perspective Resource et slectionn le projet HelloRCP, vous obtenez la fentre dpouille illustre la gure 2.8.Figure 2.8

Premire application Eclipse RCP

Examinons prsent les lments ncessaires la production de cette application. Le template RCP Hello a ajout les extensions org.eclipse.core.runtime.applications et org.eclipse.ui.perspectives, qui permettent de lier le plug-in linfrastructure Eclipse (que vous pouvez voir en cliquant sur longlet Extensions du plug-in illustr la gure 2.9), ainsi que les six classes Java suivantes : Activator Application ApplicationActionBarAdvisor ApplicationWorkbenchAdvisor ApplicationWorkbenchWindowAdvisor Perspective

Figure 2.9

Onglet Extension du plug-in HelloRCP dcrivant les principaux points dextension

Support du client riche avec Eclipse RCP CHAPITRE 2

29

Classes principales dune application RCPLa classe Application implmente linterface IApplication. Elle lance le workbench Eclipse, ouvre une fentre, boucle en attente des vnements utilisateur (clic, saisie, etc.) et se termine la fermeture de la fentre :/** * This class controls all aspects of the application's execution */ public class Application implements IApplication { /* (non-Javadoc) * @see org.eclipse.equinox.app.IApplication#start (org.eclipse.equinox.app.IApplicationContext) */ public Object start (IApplicationContext context) throws Exception { Display display = PlatformUI.createDisplay(); try { int returnCode = PlatformUI.createAndRunWorkbench (display, new ApplicationWorkbenchAdvisor()); if (returnCode == PlatformUI.RETURN_RESTART) return IApplication.EXIT_RESTART; else return IApplication.EXIT_OK; } finally { display.dispose(); } }

La classe Activator contrle le cycle de vie du plug-in :/** * The activator class controls the plug-in life cycle */ public class Activator extends AbstractUIPlugin { // The plug-in ID public static final String PLUGIN_ID = "HelloRCP"; // The shared instance private static Activator plugin; /** * The constructor */ public Activator() { } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start (org.osgi.framework.BundleContext) */ public void start(BundleContext context) throws Exception { super.start(context); plugin = this; }

30

La plate-forme de dveloppement Europa PARTIE I

/* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop (org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); } /** * Returns the shared instance * * @return the shared instance */ public static Activator getDefault() { return plugin; } /** * Returns an image descriptor for the image file at the given * plug-in relative path * * @param path the path * @return the image descriptor */ public static ImageDescriptor getImageDescriptor(String path) { return imageDescriptorFromPlugin(PLUGIN_ID, path); } }

La classe ApplicationActionBarAdvisor gre les diffrentes actions pour les barres de menus et dtat ainsi que les coolbars, variantes particulires de plusieurs contrles ToolBar :public class ApplicationActionBarAdvisor extends ActionBarAdvisor { public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) { super(configurer); } protected void makeActions(IWorkbenchWindow window) { } protected void fillMenuBar(IMenuManager menuBar) { } }

Les diffrentes mthodes de cette classe sont les suivantes : makeActions, qui permet de dnir des actions pour chaque menu et barre de menus. Une action est un simple objet qui possde un composant GUI. La liste des actions supportes par le Workbench Eclipse peut tre trouve en lisant la javadoc associe la classe abstraite ActionFactory, accessible sur le site de laide en ligne Eclipse (http://help.eclipse.org/help32/index.jsp).

Support du client riche avec Eclipse RCP CHAPITRE 2

31

llMenuBar, qui permet de remplir la barre de menus avec nimporte quelle action que vous souhaitiez voir apparatre ici. llCoolBar, qui permet de remplir la coolbar. Une coolbar est une collection de toolbars, et une toolbar une collection dactions. llStatusLine, qui permet de remplir la barre dtat. La classe ApplicationWorkbenchAdvisor congure le Workbench et dnit la perspective par dfaut de lapplication afcher :import org.eclipse.ui.application.IWorkbenchWindowConfigurer; public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { private static final String PERSPECTIVE_ID = "HelloRCP.perspective"; public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor (IWorkbenchWindowConfigurer configurer) { return new ApplicationWorkbenchWindowAdvisor(configurer); } public String getInitialWindowPerspectiveId() { return PERSPECTIVE_ID; } }

Comme vous pouvez le voir dans lextrait de code prcdent, il faut obligatoirement dclarer une chane reprsentant lid de la perspective principale (celui dclar dans le fichier de conguration plug-in.xml et auquel il est fait rfrence par le biais de la variable PERSPECTIVE_ID) et rednir la mthode getInitialWindowPerspectiveId. La classe ApplicationWorkbenchWindowAdvisor permet de contrler le comportement de la fentre (taille, titre) et les composants qui sont prsents par dfaut (barre dtat, barres doutils) :public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { super(configurer); } public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) { return new ApplicationActionBarAdvisor(configurer); } public void preWindowOpen() { IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); configurer.setInitialSize(new Point(400, 300)); configurer.setShowCoolBar(false); configurer.setShowStatusLine(false); configurer.setTitle("Hello RCP"); } }

32

La plate-forme de dveloppement Europa PARTIE I

La classe Perspective reprsente un ensemble de vues, dditeurs et de menus de lapplication. Il est obligatoire de dnir au moins une perspective (ce sera la perspective par dfaut). Une perspective implmente linterface IPerspectiveFactory et la mthode createInitialLayout(), qui permet de dnir la position de chaque vue ou diteur :public class Perspective implements IPerspectiveFactory { public void createInitialLayout(IPageLayout layout) { } }

Les diffrentes mthodes de cette classe sont les suivantes : createActionBarAdvisor(): cre un nouvel Action Bar Advisor pour congurer la barre dactions de la fentre via le congurateur de barre daction. preWindowOpen(): effectue diffrentes actions dinitialisation avant louverture de la fentre (taille de la fentre, titre, afchage ou non de la barre doutils, etc.).

Ajout de fonctionnalitsVous allez tendre au fur et mesure les fonctionnalits de votre premire application RCP, en ajoutant du code spcique aux mthodes gnres par dfaut.Ajout dune barre dtat

1. Ouvrez la classe ApplicationWorkbenchWindowAdvisor, et modiez la mthode preWindowOpen() de la faon suivante :package hellorcp; import import import import import import org.eclipse.swt.graphics.Point; org.eclipse.ui.application.ActionBarAdvisor; org.eclipse.ui.application.IActionBarConfigurer; org.eclipse.ui.application.IWorkbenchWindowConfigurer; org.eclipse.ui.application.WorkbenchWindowAdvisor; org.eclipse.jface.action.IStatusLineManager;

public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { super(configurer); } public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) { return new ApplicationActionBarAdvisor(configurer); } public void preWindowOpen() { IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); configurer.setInitialSize(new Point(400, 300)); configurer.setShowStatusLine (true);

Support du client riche avec Eclipse RCP CHAPITRE 2

33

configurer.setShowCoolBar(false); configurer.setShowStatusLine(false); configurer.setTitle("Hello RCP"); } }

public void postWindowOpen() { IStatusLineManager statusline = getWindowConfigurer() getActionBarConfigurer().getStatusLineManager(); statusline.setMessage(null, "Test Status"); }

2. Relancez lapplication pour vrier la bonne prise en compte de ces modications (voir gure 2.10).Figure 2.10

Ajout dune barre dtat lapplication HelloRCP

Ajout des actions (menus et barres doutils) et fonctionnalits

Continuez votre parcours initiatique avec lajout de menus votre application HelloRCP. Les menus et actions associes une application RCP peuvent tre ajouts par programmation ou par le biais de points dextension. Vous allez procder dans un premier temps par programmation en modiant la mthode makeActions() de la classe ApplicationActionBarAdvisor et en lajoutant aux mthodes fillMenuBar() et fillCoolbar(). 1. Ouvrez la classe ApplicationActionBarAdvisor, et apportez les modications suivantes :import import import import import import import org.eclipse.jface.action.MenuManager; org.eclipse.jface.action.IMenuManager; org.eclipse.ui.IWorkbenchActionConstants; org.eclipse.ui.IWorkbenchWindow; org.eclipse.jface.action.Separator; org.eclipse.ui.application.ActionBarAdvisor; org.eclipse.ui.application.IActionBarConfigurer;

public class ApplicationActionBarAdvisor extends ActionBarAdvisor {

34

La plate-forme de dveloppement Europa PARTIE I

private IWorkbenchAction iExitAction;

protected void makeActions(IWorkbenchWindow window) { iExitAction = ActionFactory.QUIT.create(window); register(iExitAction); iAboutAction = ActionFactory.ABOUT.create(window); register(iAboutAction); iNewWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window); register(iNewWindowAction); } protected void fillMenuBar(IMenuManager menuBar) { MenuManager fileMenu = new MenuManager("&Fichier", IWorkbenchActionConstants.M_FILE); MenuManager helpMenu = new MenuManager("&Aide", IWorkbenchActionConstants.M_HELP); menuBar.add(fileMenu); menuBar.add(helpMenu); // Ajoute le menu Fichier fileMenu.add(iNewWindowAction); fileMenu.add(new Separator()); fileMenu.add(iExitAction); iExitAction.setText("Quitter"); // Ajoute le menu Aide helpMenu.add(iAboutAction); }

Aprs la dnition des vues, vous devez remplir la barre de menus puisque vous lavez dnie comme visible dans la classe ApplicationWorkbenchWindowAdvisor. Pour cela, vous devez diter la classe ApplicationActionBarAdvisor. Cette classe est compose de diffrentes mthodes qui permettent de remplir les Action Bars et de dnir des actions excuter pour chacun des menus (Fichier et Aide en particulier) en utilisant les MenuManager de la bibliothque JFace qui permet de grer les menus. 2. Relancez nouveau lapplication, qui doit ressembler celle illustre la gure 2.11.

Support du client riche avec Eclipse RCP CHAPITRE 2Figure 2.11

35

Ajout dune barre de menus lapplication HelloRCP

Ajout dune barre doutils (Toolbar)

Vous allez ajouter une barre de boutons par le biais des mthodes fillCoolbar() et ApplicationActionBarAdvisor().

1. Pour ce faire, allez dans la classe ApplicationActionBarAdvisor, et ajoutez les actions correspondantes dans la mthode makeActions :import org.eclipse.ui.actions.ActionFactory; import org.eclipse.swt.SWT; import import import import org.eclipse.jface.action.ICoolBarManager; org.eclipse.jface.action.IToolBarManager; org.eclipse.jface.action.ToolBarManager; org.eclipse.jface.action.ToolBarContributionItem;

private IWorkbenchAction iSaveAction;

protected void fillCoolBar(ICoolBarManager coolBar) { // Ajoute une nouvelle barre doutils a lapplication IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT); coolBar.add(new ToolBarContributionItem(toolbar, "main")); // Ajoute les entrees a la barre doutils toolbar.add(iSaveAction); toolbar.add(iExitAction); }

protected void makeActions(IWorkbenchWindow window) { iExitAction = ActionFactory.QUIT.create(window); register(iExitAction);

36

La plate-forme de dveloppement Europa PARTIE I

iAboutAction = ActionFactory.ABOUT.create(window); register(iAboutAction); iNewWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window); register(iNewWindowAction);

iSaveAction = ActionFactory.SAVE.create(window); register(iSaveAction);

}

Dans cet extrait, Eclipse RCP fournit des actions standards, comme celles utilises dans la mthode makeActions (par exemple dans la ligne iNewWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window), qui cre une deuxime instance de lapplication en cours dans une nouvelle fentre lorsque lutilisateur clique sur ce menu. 2. Dans la classe ApplicationWorkbenchWindowAdvisor, modiez la mthode preWindowOpen() pour quelle afche une barre de boutons sous la barre de menus avec configurer.setShowCoolBar(true). Vous devez obtenir le rsultat illustr la gure 2.12.Figure 2.12

Ajout dune barre de boutons

3. Ajoutez les autres options du menu de manire que votre application ressemble la vue illustre la gure 2.13.Figure 2.13

Ajout des nouvelles fonctionnalits lapplication Hello RCP

Support du client riche avec Eclipse RCP CHAPITRE 2

37

Cinq menus vont tre ajouts : Fichier (dj implment lors de ltape prcdente) Fentre ( implmenter) Aide (dj effectu ltape prcdente) Fentre/Ouvrir perspective ( implmenter) Fentre/Afcher vue ( implmenter) Ainsi que six actions : Fichier/Sortie (dj implmente ltape prcdente) Fentre/Ouvrir perspective/Autre ( implmenter) Fentre/Afcher vue/Autre ( implmenter) Fentre/Prfrences ( implmenter) Aide/Sommaire Aide ( implmenter) Aide/A Propos (dj implmente ltape prcdente) Il sagit dactions prdnies incluses par dfaut dans Eclipse mais que RCP fournit pour des raisons pratiques. Vous allez modier la classe ApplicationActionBar pour personnaliser la mthode llMenuBar, qui permet de personnaliser la barre de menus (vous pouvez en voir le dtail dans le code source tlchargeable sur la page Web ddie louvrage). 4. Enrichissez la classe ApplicationActionBarAdvisor visite prcdemment par le code suivant :public class ApplicationActionBarAdvisor extends ActionBarAdvisor { private private private private private private IWorkbenchAction IWorkbenchAction IWorkbenchAction IWorkbenchAction IWorkbenchAction IWorkbenchAction iExitAction; iAboutAction; iNewWindowAction; iSaveAction; helpAction; preferencesAction;

private MenuManager perspectiveMenu = new MenuManager("&Ouvrir Perspective"); private MenuManager viewMenu = new MenuManager("Afficher Vue");

public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) { super(configurer); } protected void makeActions(IWorkbenchWindow window) { iExitAction = ActionFactory.QUIT.create(window); register(iExitAction); iAboutAction = ActionFactory.ABOUT.create(window); register(iAboutAction);

38

La plate-forme de dveloppement Europa PARTIE I

iNewWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window); register(iNewWindowAction); iSaveAction = ActionFactory.SAVE.create(window); register(iSaveAction);

helpAction = ActionFactory.HELP_CONTENTS.create(window); register(helpAction); preferencesAction = ActionFactory.PREFERENCES.create(window); register(preferencesAction); perspectiveMenu.add(ContributionItemFactory.PERSPECTIVES_SHORTLIST.create(window)); viewMenu.add(ContributionItemFactory.VIEWS_SHORTLIST.create(window));

}

protected void fillMenuBar(IMenuManager menuBar) { MenuManager fileMenu = new MenuManager("&Fichier" ,IWorkbenchActionConstants.M_FILE); MenuManager windowMenu = new MenuManager("&Fentre", IWorkbenchActionConstants.M_WINDOW); MenuManager helpMenu = new MenuManager("&Aide", IWorkbenchActionConstants.M_HELP); menuBar.add(fileMenu); menuBar.add(windowMenu); // Add a group marker indicating where action set menus will appear. menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); menuBar.add(helpMenu);

// Fichier fileMenu.add(iNewWindowAction); fileMenu.add(new Separator()); fileMenu.add(iExitAction);

windowMenu.add(perspectiveMenu); windowMenu.add(viewMenu); windowMenu.add(new Separator()); windowMenu.add(preferencesAction); // Aide helpMenu.add(helpAction); helpMenu.add(new Separator()); helpMenu.add(iAboutAction); }

Support du client riche avec Eclipse RCP CHAPITRE 2

39

5. Ouvrez le chier plugin.xml si ce nest dj fait. 6. Slectionnez longlet Overview, et lancez nouveau lapplication RCP en cliquant sur Launch an Eclipse application. Les menus de votre application doivent ressembler ceux illustrs la gure 2.13. Il est possible ce stade dajouter quelques fonctionnalits. 7. Cliquez sur Fentre, Ouvrir perspective et Autre. La perspective cre par le template Hello RCP safche. 8. Cliquez sur Fentre, Afcher vue et Autre. Une vue vide safche, que vous remplirez un peu plus tard. 9. Cliquez sur Fentre et Prfrences. Vous devez voir safcher une bote de dialogue Prfrences vide. 10. Cliquez sur Aide et About. Une bote de dialogue safche ne comportant que trois boutons (Dtails des plug-in, Dtails de la conguration et OK). En cliquant sur Plug-in Details, vous voyez safcher votre plug-in dans la liste de ceux faisant partie de lapplication RCP (voir gure 2.14).Figure 2.14

Ajout du plug-in Hello RCP dans la liste des plug-ins Eclipse

Copyright Vous pouvez remarquez que les informations de Copyright sont grises (Legal Info). Pour activer cette fonctionnalit, arrtez votre application, et copiez la racine du rpertoire du workspace contenant votre projet RCP les chiers about.ini et about.html fournis dans lexemple. Relancez ensuite votre application pour valider cette fonctionnalit.

Ajout de fonctions Eclipse

ce stade, lapplication Hello RCP est encore rduite sa plus simple expression. Vous allez remplir la vue et complter loption Prfrences ainsi que la table des matires de laide : 1. Slectionnez File, New (ou Ctrl+N), puis Plug-in Project, et entrez comme nom de projet com.eclipsercp.HelloRCP.ui. Cliquez sur Next.

40

La plate-forme de dveloppement Europa PARTIE I

2. Choisissez lAssistant de plug-in personnalis an de crer une structure de rpertoire de plug-ins standard permettant de slectionner des lments supplmentaires dans une liste de modles. 3. Slectionnez no pour loption Would you like to create a rich client application , puis cliquez sur Next. 4. Slectionnez Custom plug-in wizard (voir gure 2.15).Figure 2.15

Conguration du plug-in (1/2)

5. Cliquez sur Next. 6. Choisissez Deselect All, puis slectionnez les options Hello World Action Set (jeu dactions), Help Table of Contents (table des matires daide), Preference Page et enn View (vue associe au plan de travail). Vous devez obtenir la vue illustre la gure 2.16. 7. Cliquez sur Finish ou sur Next si vous souhaitez personnaliser les diffrents templates choisis (texte associ la table des matires, nom des packages, message associ la bote de dialogue, nom de la vue et de la classe associe, type dafchage de la vue en tableau ou en tree view). Pour excuter lapplication, vous allez cette fois utiliser longlet Aperu, et non le lien Lancer une application Eclipse. Vous lancerez ensuite lapplication Hello RCP par le biais de loption Excuter de la barre doutils. 8. Slectionnez loption Run As, Open Run Dialog, puis, dans lassistant de cration, de gestion et dexcution des congurations qui souvre, slectionnez longlet Plug-in.

Support du client riche avec Eclipse RCP CHAPITRE 2Figure 2.16

41

Conguration du plug-in (2/2)

9. Cochez dans la liste le plug-in com.eclipsercp.HelloRCP.ui qui vient dtre cr et helloRCP, comme illustr la gure 2.17.Figure 2.17

Assistant de conguration de lancement

42

La plate-forme de dveloppement Europa PARTIE I

10. Cliquez sur Add required Plug-ins, et slectionnez les plug-ins suivants : org.apache.ant org.apache.lucene org.eclipse.help.appserver org.eclipse.help.base org.eclipse.help.ui org.eclipse.help.webapp org.eclipse.tomcat org.eclipse.ui.forms 11. Cliquez sur Run puis sur Excuter. Votre application doit prsent afcher le menu Sample Menu illustr la gure 2.18.Figure 2.18

Application Eclipse RCP aprs ajout de fonctionnalits

12. En cliquant sur Fentre, Afcher Vue puis Autre, vous devez voir safcher la vue plus riche illustre la gure 2.19, contenant une aide en ligne dynamique ainsi quune vue Exemple de vue.Figure 2.19

Application Eclipse RCP enrichie

Support du client riche avec Eclipse RCP CHAPITRE 2

43

13. En cliquant sur Exemple de vue, vous devez voir safcher sous forme de liste dicnes activables les options illustres la gure 2.20.Figure 2.20

Application Eclipse RCP nale

Comme lillustre la gure 2.21, le menu Prfrences sest enrichi dun exemple de prfrence, ajout automatiquement. La page daide a galement t ajoute au menu Prfrences du fait de lajout du plug-in daide lors de la conguration du plug-in personnalis.Figure 2.21

Menu Prfrences de lapplication RCP

Afchage des entres associes au menu et la barre doutils via les extensions

Vous allez prsent utiliser loutillage RCP pour afcher les points dextension provenant dditeurs tiers (vous en avez eu un aperu lorsque vous avez slectionn quelques plug-ins la section prcdente).

44

La plate-forme de dveloppement Europa PARTIE I

La dclaration dune extension se fait en XML. Chaque plug-in peut prvoir des points dextension sur lesquels dautres plug-ins viendront se brancher , comme lillustre la gure 2.22.

Figure 2.22

Points dextension

Un plug-in peut tendre ses propres points dextension (exemple actionSets), un point dextension tant dclar par un seul plug-in. La notion dextension est fondamentale pour la comprhension du framework RCP et plus gnralement du dveloppement de plug-ins sur cette plate forme. Vous pouvez approfondir ce sujet sur le portail ddi au projet RCP, ladresse http://www.eclipse.org/rcp. Pour avoir la liste des points dextension, ouvrez le chier plugin.xml, et slectionnez longlet Extensions. Vous pouvez voir la liste des points dextension dnis pour cette application, comme illustr la gure 2.23.

Figure 2.23

Assistant de dnition des points dextension Eclipse/RCP

Support du client riche avec Eclipse RCP CHAPITRE 2

45

Vous pouvez ainsi voir le code gnr pour les actions associes la vue qui a t dnie, SampleView.java (notez le code associ la mthode makeActions qui permet la gestion des actions associes lIHM) :public class SampleView extends ViewPart { private TableViewer viewer; private Action action1; private Action action2; private Action doubleClickAction; /* * The content provider class is responsible for * providing objects to the view. It can wrap * existing objects in adapters or simply return * objects as-is. These objects may be sensitive * to the current input of the view, or ignore * it and always show the same content * (like Task List, for example). */ class ViewContentProvider implements IStructuredContentProvider { public void inputChanged(Viewer v, Object oldInput, Object newInput) { } public void dispose() { } public Object[] getElements(Object parent) { return new String[] { "One", "Two", "Three" }; } } class ViewLabelProvider extends LabelProvider implements ITableLabelProvider { public String getColumnText(Object obj, int index) { return getText(obj); } public Image getColumnImage(Object obj, int index) { return getImage(obj); } public Image getImage(Object obj) { return PlatformUI.getWorkbench(). getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT); } } class NameSorter extends ViewerSorter { } /** * The constructor. */ public SampleView() { } /** * This is a callback that will allow us * to create the viewer and initialize it. */ public void createPartControl(Composite parent) { viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);

46

La plate-forme de dveloppement Europa PARTIE I

viewer.setContentProvider(new ViewContentProvider()); viewer.setLabelProvider(new ViewLabelProvider()); viewer.setSorter(new NameSorter()); viewer.setInput(getViewSite()); makeActions(); hookContextMenu(); hookDoubleClickAction(); contributeToActionBars(); } private void hookContextMenu() { MenuManager menuMgr = new MenuManager("#PopupMenu"); menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { SampleView.this.fillContextMenu(manager); } }); Menu menu = menuMgr.createCon