Top Banner

of 118

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript

JBoss Seam3 - Support de coursVersion 2.0

Smile 48 rue de Villiers 92300 Levallois-Perret www.smile.fr

Suivi des versionsVersion 1.0 2.0 Date 28/05/2011 27/06/2011 Auteur Patrick Guillerm Gwenael Bonhommeau Commentaires Initialisation du document Relecture et corrections

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

i

Sommaire

Sommaire

I

Introduction

12 2 3

1 Quest-ce que Seam 1.1 1.2 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pourquoi choisir Seam ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

II

Architecture et build process

56 6 7 8 9 10 11 11 14 14 16 16 17 17 20 21

2 Les technologies intgres ` Seam e e a 2.1 2.2 2.3 2.4 JEE 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . EJB 3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . JPA 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . JSF 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 2.4.2 2.4.3 2.4.4 2.5 Page Description Language : Projet Facelets JSF 2 cot java e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Les composant composite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Richfaces 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Le build process 3.1 3.2 3.3 3.4 3.5 EAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ANT + Maven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Get Start : Smile Seam Forge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Structure dun projet Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les modules maven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

ii

Sommaire

3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.5.6 3.5.7 3.5.8 3.6

smile-seam : le module parent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smile-seam-features : code sources de lapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smile-seam-commons : la base de lapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smile-seam-datamodel : Les entits JPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e smile-seam-core : Le coeur de lapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smile-seam-bootstrap : initialiser son application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smile-seam-war : le rendu de lapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smile-seam-ear : lEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22 22 28 29 30 32 33 36 42 42 43 43

Les scripts ant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.1 3.6.2 3.6.3 Build smile-seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Build bootstrap, commons, core et datamodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Build war . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

III

Seam : Le coeur

4445 45 46 46 48 49 53

4 EJB 3.1 4.1 Les composants Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 4.1.2 4.1.3 4.1.4 Rfrencer les composants Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ee Donner un nom ` ses composants Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a Les scopes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linjection de dpendance : JSR-299 CDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e

5 La persistance des donnes : JPA 2.0 e

IV

Templating JSF

5456 61 61 61 61

6 Mon premier Template JSF 7 Les principaux composants JSF 7.1 Les composants JSF core . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.1 7.1.2 f :actionListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f :attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

iii

Sommaire

7.1.3 7.1.4 7.1.5 7.1.6 7.1.7 7.1.8 7.1.9

f :convertDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f :converter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f :convertNumber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f :facet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f :loadBundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f :param . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f :selectItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

62 62 63 64 64 65 65 66 67 67 68 68 68 70 70 71 72 73 75 76 77 78 79 80 81 85 86 86 87 88 89

7.1.10 f :selectItems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.11 f :subview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.12 f :validator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.13 f :valueChangeListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.14 f :verbatim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.15 f :view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Les composants JSF html . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 7.2.6 7.2.7 7.2.8 7.2.9 h :column . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :commandButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :commandLink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :dataTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :graphicImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :inputHidden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :inputSecret . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :inputText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7.2.10 h :inputTextarea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.11 h :messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.12 h :message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7.2.13 h :outputFormat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.14 h :outputLabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.15 h :outputLink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.16 h :outputText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.17 h :panelGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

iv

Sommaire

7.2.18 h :panelGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.19 h :selectBooleanCheckbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.20 h :selectManyCheckbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.21 h :selectManyListbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.22 h :selectOneListbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.23 h :selectManyMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.24 h :selectOneMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

91 92 93 95 96 96 97 97 99 99 99

7.2.25 h :selectOneRadio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 Les composants JSF facelets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.1 7.3.2 7.3.3 7.3.4 7.3.5 7.3.6 7.3.7 7.3.8 7.3.9 ui :component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ui :composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ui :debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 ui :decorate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 ui :insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

ui :dene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 ui :fragment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 ui :include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 ui :param . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

7.3.10 ui :remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 7.3.11 ui :repeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 7.4 Biblioth`ques de composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 e 7.4.1 7.4.2 7.4.3 7.4.4 Richfaces & AjaxForJSF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Primefaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 ICEfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Myfaces & Tomahawk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

V

Les formulaires

109

VI

Composants JSF

110

VII

Optimisations

111

VIII

Tests UnitairesS.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

112

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

Web

www.smile.fr

v

Premi`re partie e

Introduction

1

Quest-ce que Seam

11.1

Quest-ce que SeamHistorique

Le framework JBoss Seam est un framework Open Source ` l initiative de Gavin King 1 . A l origine, le but de Seam tait a e de permettre l implmentation dapplications web stateful ` partir de JSF 1.2 2 et des EJB 3, tout en simpliant lintgration e a e du framework Hibernate 3 .JEE5 et surtout JSF 1.2, ne permettent pas de couvrir tous les besoins techniques dune application web. JSF 1.2 avait beaucoup de lacune pour un dveloppement simple et productif (probl`me avec le rafra e e chissement des EJB, intgration HTML complexe, etc. . .). A la mani`re de Spring, les backing bean de JSF 1.2 ncessitaient dtre dclar dans e e e e e e le faces-cong.xml 4 .Seam propose une extension de JEE5 avec des concepts novateurs et lintgration dautres frameworks e Open Source (JBPM, ITEXT, Richfaces, Ajax For JSF, et bien dautres). Quelques chires cls : e Juin 2006 : Sortie de la version 1.0 de Seam Fin 2007 : Version 2.0 de Seam Avril 2011 : Derni`re version de Seam 2.x (2.2.2.nal) e 31 mars 2011 : Sortie de la version 3.0.0.nal de Seam Apr`s 5 ans de dveloppement dvolution Seam est arriv ` la version 3. Cette version soriente davantage vers la simplicae e e ea tion et lunication des direntes couches applicatives. JBoss Seam a t lun des acteurs principaux dans la conception de e ee la norme JEE 6 (principalement sur la norme dinjection de dpendances CDI 5 et le projet JSF2/Facelets ). JEE 6 soriente e davantage vers la convention, en limitant la conguration XML.

Figure 1.1 Timeline reprsentant les sortis de Seam et ces principales concurrents. e

1. 2. 3. 4. 5.

Gavin King est le fondateur dHibernate Java Server Faces :framework de Hibernate est un framework permettant la persistance dobjets en base de donnes e le faces-cong.xml est le chier de conguration principal de JSF CDI : Contexts and Dependency Inject, consiste ` crer dynamiquement (injecter) les dpendances entre les direntes classes a e e e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

2/??

Quest-ce que Seam

1.2

Pourquoi choisir Seam ?

Beaucoup de dveloppeurs reprochent ` Seam dintgrer dirents frameworks ainsi que la complexit de JSF (balises e a e e e spciques). Cependant dans la majorit des cas on retrouve les mmes briques applicatives (hibernate, Spring, jsp ou du e e e velocity). Ce point est donc un faux probl`me, Seam suvre ` unier les dirents framework qui le compose pour avoir e a e une conguration simple. On entend souvent que JSF ncessite lapprentissage des tags libs spciques. Il est vrai quil faut se familiariser avec les e e dirents tags lib (JSF, Facelets, Richfaces, PrimeFaces, compatibilit avec la JSTL, etc. . .). Cette connaissance se fait au fur e e et ` mesure de lutilisation de JSF. Les dirents sites dcrivant les tags libs sont tr`s bien documents. Une fois les principes a e e e e de bases acquis, il est tr`s simple dutiliser de nouveaux composants. La norme HTML 5 ncessite galement lapprentissage e e e de nouveaux tags sans que cela ne choque. Les dbuts de JSF ont t un peu laborieux, beaucoup de dveloppeurs se sont tourns vers Spring, de mme avec les EJB e ee e e e qui dans leurs version 2 ont laiss de mauvais souvenirs. Tout le travail de JBoss a t de couper court ` toutes ces fausses e ee a ides. La norme JEE 6 est laboutissement du travail de simplication et de normalisation de Seam. e Le choix dune technologie en java est toujours compliqu et aucun framework nest parfait. Seam sadresse principalement e aux applications avec beaucoup de formulaires ( comme le backoce de lACFCI 6 grant les dclarations dentreprises). La e e cration et la validation des formulaires est un point fort de Seam, surtout grce ` la validation par annotations (JSR-303) et e a a la transparence entre la vue et le contrleur. Lajax y est galement considrablement simpli. Seam comporte un framework o e e e Ajax (Ajax for JSF) permettant de grer le rafra e chissement de certaines parties de la page web sans crire la moindre ligne e de javaScript. Seam permet galement une trs grandes souplesse dans les volutions du codes. Cela est principalement d aux EJB 3 et e e e u ` JPA 7 qui permettent un dveloppement en annotations avec un minimum de congurations XML. Le refactoring en est a e donc simpli. e Dans un abus de langage on parle de framework lgs pour Spring et Struts en opposition aux frameworks JEE telle que e e Seam. Cependant cette lgerte nest pas rellement lis ` loccupation mmoire de lapplication mais au fait de lutilisation e e e e a e dun conteneur de servlets (tomcat ou jetty) au lieu dun serveur dapplication (conteneur de servlet + conteneur EJB). Seam peut tr`s bien fonctionner sur un tomcat, ` condition dembarquer les lib javax grant les EJB. e a e Lappellation framework lg dsigne aussi le fait que les beans ne sont pas obligs davoir une interface pour fonctionner. e e e e Jusqu` Seam 3 cela ntait pas le cas, les EJB 3.0 avaient besoin dune interface. Bien souvent les contrleurs nont quune a e o seule implmentation. De ce constat ` fait voluer les EJB vers les EJB 3.1 . Les interfaces ne sont plus obligatoires, et e a e doivent tre utilises uniquement sil y a plusieurs implmentations direntes (Mock, Runtime, etc. . .). e e e e A noter que cela permet dviter la mauvaise pratique dajouter Impl ` la n du nom des implmentations. e a e6. LAssemble des Chambres Franaises de Commerce et dIndustrie, le backoce grant les dclarations dentreprises a t ralis avec Seam e c e e e e e e 2.x 7. Java Persistence API

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

3/??

Quest-ce que Seam

Beaucoup de dveloppeurs se demandent si un framework JEE tel que Seam avec un frontal en JSF est plus consommateur e en ressource quun framework lg comme Spring MVC avec du velocity. Cela dpend normment de la faon dont le e e e e e c code est implment. En thorie Spring MVC sera un peu moins consommateur dans les cas de rendu sans formulaire ni e e e dajax. Les formulaires et lajax sont deux points critiques souvent implments de faon hasardeuse et dont les performances e e c de lapplication sen ressentent (utilisation massive de JQuery, mauvaise connaissance du templeting, pas de mcanique de e layout performant). JSF a un fonctionnement tr`s dirent au niveau de son rendu que les frameworks tels que velocity ou free marker. JSF e e gn`re un arbre de composants. Velocity et free marker sont procdurales. Leurs rendu est donc plus rapide que JSF (hors e e e optimisation de sa conguration). JSF permet tout un tas de conguration an doptimiser ses performances. Comme pour toutes les briques quint`gre Seam, JBoss propose son lot de solution pour amliorer les performances, comme le Seam Cache e e qui permet de mettre des fragments HTML en cache avec une grande facilit. e Sur le projet de lintranet de Generali on a pu comparer JSF et free marker. La base de Nuxeo est conu avec Seam, c mme si Nuxeo nest pas le meilleur exemple dans lutilisation de ce framework. Le backoce est en JSF et le frontal en free e marker. Le poids dune session dun cot ou de lautre de lapplication sont ` peu pr`s identique. e a e La question est plutt est-ce que le re-calcul de lensemble des donnes contenu dans une page co te moins ch`re en temps o e u e de calcul quun arbre de composants JSF. On peut donc rsumer par : e + : Seam permet une unication entre toutes les briques applicatives. + : Une excellente gestion de formulaire + : De lAjax sans la contrainte dcrire du code JavaScript e + : Peut de conguration grce aux annotations a + : Mcanique de templating et layout tr`s perfectionnes 8 . e e e + : Evolution et refactoring plus simple. + : Une tr`s grande productivit e e + : Un framework orient composant, on peut donc plus facilement rutiliser du code dans dautres applications. e e - : Peu de dveloppeur connaissant ce framework en France. e - : Encore beaucoup trop de dveloppeurs attachs aux chiers XML. e e - : Seam est quand mme conu pour fonctionner sur un serveur dapplication. e c - : Le calcul dune page JSF prend un peu plus de temps. - : La conguration du build process est un peu plus dlicat, en obligeant de navoir aucun jar 9 dans le war 10 (tous les jar e doivent se trouver au niveau de lEAR 11 ). +/- : Il y a une forte liaison entre les pages JSF et les contrleurs. Les appels aux contrleurs se font via leur nom de o o ressources JNDI dans les pages JSF. Lorsque lon renomme une classe il faut penser ` vrier ses appels dans les a e templates. Ce point constitue un point fort lors du dveloppement, rendant transparente la liaison entre le template et e son contrleur, mais est problmatique lors des refactoring. o e8. Le templating facelets permet la cration dun layout principal, avec un mcanisme dhritage entre layout pour implmenter uniquement e e e e la partie ncessaire dans la page e 9. Java ARchive : chier zip contenant les sources Java 10. Web ARchive : chier zip contenant les source dune application web Java 11. Enterprise Application ARchive

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

4/??

Deuxi`me partie e

Architecture et build process

5

Les technologies intgres a Seam e e `

22.1

Les technologies intgres ` Seam e e aJEE 6

Java Entreprise Edition 6 est un ensemble de normes qui servent ` dnir une faon standard de dvelopper des a e c e application ` destination des entreprises. En r`gle gnrale les versions Entreprise dcoulent de la version JDK de java. On a e e e e retrouve donc les volutions du JDK avec des spcications et des Api supplmentaires (toutes les API commenants par e e e c javax.* ). Pour nen citer que quelques une, on retrouve : JSR 303 : Bean Validation, la validation par annotation, issus du projet Hibernate Validator. Ce projet tait e dj` intgr dans Seam 2.x, il se retrouve tout naturellement dans la version 3. Seam et Richfaces apportent des ea e e amliorations pour une plus grande facilit dintgration 1 . e e e JSR 224 : Java API for XML-Based Web Services, bas sur lAPI JAX-WS 2.2 permettant lutilisation des WEB e services. JAX-WS se base sur des annotations an de congurer les Web Services. De mme pour le mapping des e objets changs est ralis via JAXB, galement en annotations. JAX-WS et JAXB permettent galement la mise en e e e e e e place de testes unitaire plus simplement compars ` dancien framework comme XFire. e a JSR 311 : Java API for RESTful Web Services (JAX-RS), permettant le dveloppement dapplication RESTful. e Cest un point que beaucoup de dveloppeurs reprochaient au JEE, mme si il tait tout a fait possible dimplmenter e e e e des services RESTful en Seam 2.x 2 . JSR 314 : JSF2 est devenu limplmentation de rfrence de JEE 6. La norme a prit galement en compte les e ee e derni`res volutions (projet Facelets, intgr dans Seam 2.x). JSF 2 a beaucoup volu au niveau de limplmentation e e e e e e e des composants Composites, qui nont plus besoin dtre dnit dans un chier XML. Ils sont dnit directement par e e e convention de package. JSR 317 : Java Persistence 2.0, issus du projet JPA ` linitiative de Gavin King, la version 2 de JPA apporte son lot a dvolutions comme avec les criterias, ou lutilisation de script EL pour lier directement des requetes HQL avec des EJB. e JSR 299 : Contexts and Dependency Injection for Java (Web Beans 1.0). Cest la principale volution de JEE 6, e la normalisation de linjection de dpendance par annotations. Cest le point qui a fait le plus dbat entre JBoss et e e Spring Source. Cette norme reprend limplmentation de Seam avec les conventions de nommage de Spring. Seam 3 e tant conu pour prendre en charge les annotations de Seam 2. e c Pour plus de dtails sur la norme JEE6 et les JSR qui en sont lies, je vous invite ` visiter le site doracle : e e a http://www.oracle.com/technetwork/java/javaee/tech/index.html1. La JSR-303 ne ncessite plus de dcorateur JSF, un composant spcique de Richfaces est utilis pour cela e e e e 2. le chier pages.xml permet de lier les urls avec les contrleurs, les param`tres HTTP peuvent tre inject dans les attributs du contrleur o e e e o

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

6/??

Les technologies intgres a Seam e e `

2.2

EJB 3.1

Issus de la JSR 318, les EJB sont llments incontournable du monde JEE. Pour les dveloppeurs ayant subit les EJB ee e 2.x il faut oublier cette erreur du pass. Les EJB 3 sont de simple Pojo 3 avec des annotations. e Les EJB 3 sont des ressources JNDI 4 , ils poss`dent donc un nom unique qui est utilis pour linjection de dpendance et e e e dans les templates JSF. Si deux EJB ont le mme nom votre serveur dapplication vous le fera remarquer tr`s rapidement ` e e a son dmarrage par une violente exception. e La version 3.1 permet de rendre linterface optionnelle. Dans beaucoup de cas on a quune seule implmentation, par e exemple pour les contrleurs. De mme le nom des EJB na plus besoin dtre prcis, par convention il est le nom de la o e e e e classe dcapitalis. Il reste toutefois possible de prciser le nom des EJB au besoin. e e e Un EJB 3.1 ressemble donc ` : a1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19package org . jboss . seam . examples . actions import javax . inject . Named ; import javax . e n t e r p r i s e. context . C o n v e r s a t i o n S c o p e d; @ConversationScoped @Named public class H e l l o T h e W o r l d{ private String foobar = " hello foo bar ! " ;

public String g e t F o o b a r() { return foobar ; } public void s e t F o o b a r( final String foobar ) { this . foobar = foobar ; } }

Ce qui nous permet de rcuprer lattribut foobar directement en JSF via le nom de notre EJB e e1< h : o u t p u t T e x t value = " #{ h e l l o T h e W o r l d. foobar } " / >

On peut voir ici que les EJB ne sont plus aussi diabolique quils ont pu ltre par le pass. On verra dans la suite du e e document plus en dtail comment les utiliser. e Pour plus de dtails je vous invite ` visiter le site de Jean-Michel Doudoux e a http://www.jmdoudoux.fr/java/dej/chap-ejb31.htm.

3. Plain Old Java Object, littralement un bon vieil objet Java, est une classe sans interface ni dhritage autre que la classe Object. Cet e e hritage est implicite e 4. Java Naming and Directory Interface

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

7/??

Les technologies intgres a Seam e e `

2.3

JPA 2

JPA 2 apporte son lot de nouveauts, avec des annotations supplmentaires an de mieux grer les collections (@Elemente e e Collection ), les Map (@MapKeyColumn ) et la possibilit de supprimer les entres orphelines pour les liaisons OneToMany e e et OneToOne via le param`tre orphanRemoval. Les liaisions ManyToMany nen prote pas car JPA ne peut dterminer si e e lentre en base na pas encore une liaison. e Mais lune des principales volutions est les criterias qui existaient dj` sur hibernate. Il est tout naturel que Gavin King e ea lai pouss sur JPA 2. e1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29package org . jboss . seam . examples . actions import javax . inject . Named ; import javax . e n t e r p r i s e. context . C o n v e r s a t i o n S c o p e d; @ConversationScoped @Named public class U s e r F i n d e r { @PersistenceContext private E n t i t y M a n a g e r e n t i t y M a n a g e r;

public User f i n d B y T r i g r a m( String trigram ) { final User user ; C r i t e r i a B u i l d e r criteria = em . g e t C r i t e r i a B u i l d e r() ; CriteriaQuery < User > c r i t e r i a Q u e r y = criteria . c r e a t e Q u e r y( User . class ) ; Root < User > users = c r i t e r i a Q u e r y. from ( User . class ) ; c r i t e r i a Q u e r y. select ( User ) . where ( criteria . equal ( users . < String > get ( " trigram " ) , trigram ) ) ; user = em . c r e a t e Q u e r y( c r i t e r i a Q u e r y) . g e t S i n g l e R e s u l t() ;

return user ; }

Lavantage des criterias est la possibilit de refactorer le code. Cependant cela est au dtriment de la lisibilit du code. e e e Il est toujours possible comme en JPA 1 dutiliser les NamedQuery et le HQL.

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

8/??

Les technologies intgres a Seam e e `

Exemple de NamedQuery :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16package org . jboss . seam . examples . entity @Entity @ N a m e d Q u e r y( name = " f i n d A l l U s e r s" , query = " SELECT u FROM User u " ) public class User { @Id @GeneratedValue private Long id ; @NotNull private String @NotNull private String

name ;

f i r s t n a m e;

@NotNull @Column ( length = 3) private String trigram ;

// c o ns t r u c t o r s / g e t t e r s & s e t t e r s . . . .

package org . jboss . seam . examples . actions import javax . inject . Named ; import javax . e n t e r p r i s e. context . C o n v e r s a t i o n S c o p e d; @ConversationScoped @Named public class U s e r F i n d e r { @PersistenceContext private E n t i t y M a n a g e r e n t i t y M a n a g e r;

public List < User > f i n d A l l U s e r s() { return em . c r e a t e N a m e d Q u e r y( " f i n d A l l U s e r s" ) . g e t R e s u l t L i s t() ; } }

2.4

JSF 2

JSF 2 est la principale volution de Seam 3, beaucoup des concepts dj` intgrs ` Seam 2.x se retrouvent dans JSF 2. e ea e e a Le projet Faclets est nativement intgr ` JSF. e ea

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

9/??

Les technologies intgres a Seam e e `

2.4.1

Page Description Language : Projet Facelets

Pour rappel Facelets est un ensemble de composants JSF ainsi que la possibilit de crer des layouts pour faciliter e e lintgration de page JSF. e Exemple de layout Facelets :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 < f:view xmlns = " http: // www . w3 . org /1999/ xhtml " xmlns:ui = " http: // java . sun . com / jsf / facelets " xmlns:f = " http: // java . sun . com / jsf / core " xmlns:h = " http: // java . sun . com / jsf / html " xmlns:a = " http: // r i c h f a c e s. org / a4j " c o n t e n t T y p e= " text / html " id = " #{ messages [ project . id ]} " > < html > < u i : r e m o v e> = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = < head > < meta http - equiv = " Content - Type " content = " text / html ; charset = UTF -8 " / > < title > #{ messages [ project . name ]} < a : l o a d S t y l e src = " / s t y l e s h e e t/ theme . css " / > < u i : i n s e r t name = " head " / > < u i : r e m o v e> = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = < body > < div id = " body " class = " body " > < f : s u b v i e w id = " e r r o r M e s s a g e s" rendered = " #{ s h o w G l o b a l M e s s a g e s} " > < div id = " error " > < h : m e s s a g e s id = " messages " g l o b a l O n l y= " true " s t y l e C l a s s= " message " e r r o r C l a s s= " errormsg " i n f o C l a s s= " infomsg " w a r n C l a s s= " warnmsg " / > < div id = " b o d y C o n t e n t" > < u i : i n s e r t name = " body " / >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

10/??

Les technologies intgres a Seam e e `

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

< ui:composition xmlns:ui = " http: // java . sun . com / jsf / facelets " template = " layout / template . xhtml " > < u i : r e m o v e> < u i : d e f i n e name = " body " > < script type = " text / j a v a s c r i p t" src = " #{ f a c e s C o n t e x t. e x t e r n a l C o n t e x t. r e q u e s t C o n t e x t P a t h}/ js / tools . js " >

< u i : r e m o v e> < u i : d e f i n e name = " body " > < h1 > Hello the world < / h1 >

Ce que lon remarque sur cet exemple, cest que le premier chier template dnit la structure globale de la page, avec e les enttes, bloc de messages derreurs, etc.. Le composant ui :insert dnit les zones qui seront implmentes par les pages e e e e JSF hritants du template. e Le second chier ne dnit que les zones prvues par le template via le composant ui :dene. Toutes modications du e e layout principal seront impactes sur toutes les pages lutilisant. Un layout peut galement hriter dun autre layout, laissant e e e ` la page JSF uniquement la zone rellement ncessaire ` implmenter. a e e a e

2.4.2

JSF 2 cot java e

Du cot java JSF 2 apporte quelques modications, avec un lot dannotations an dviter la conguration XML qui e e tait inhrent en JSF 1.2. e e On retrouve donc : @ManagedBean : Permettant de dnir un backing bean. e @SessionScoped : Pour les beans de scope Session @RequestScoped : Pour les beans de scope Request @ViewScoped : Pour les beans de scope vue. Le scope vue correspond ` tous les appelles fait sur une mme page a e par un utilisateur. Ces dirent scopes taient dj` prsentes en Seam 2.x, JSF 2 reprend uniquement les bonnes ides dj` mises en pratique e e ea e e ea par le pass. e

2.4.3

Les composant composite

Lautre point important de JSF 2 est la possibilit de crer des composants composites 5 sans que lon ai besoin de les e e dnir en XML. Les structures de ces composants voluent galement. Leurs structures sont ` prsent dcoupes en deux e e e a e e e parties, la premi`re en dbut de template XHTML correspond ` linterface du composant, regroupant la documentation ainsi e e a que les spcications. La seconde correspond ` son implmentation. e a e5. Les composants composites sont des composants JSF construits ` base de fragment XHTML a

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

11/??

Les technologies intgres a Seam e e `

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

< ui:composition xmlns:ui = " http: // java . sun . com / jsf / facelets " xmlns:h = " http: // java . sun . com / jsf / html " xmlns:cc = " http: // java . sun . com / jsf / c o m p o s i t e" xmlns:f = " http: // java . sun . com / jsf / core " > < u i : r e m o v e> < c c : i n t e r f a c e> < c c : a t t r i b u t e name = " id " required = " true " / > < c c : a t t r i b u t e name = " title " required = " true " / >

< u i : r e m o v e> < c c : i m p l e m e n t a t i o n> < div id = " #{ cc . attrs . id } " class = " panel " > < div id = " #{ cc . attrs . id } _title " > < span id = " #{ cc . attrs . id } _ t i t l e _ l a b e l" > #{ cc . attrs . title } < span >

< div id = " #{ cc . attrs . id } _content " class = " p a n e l _ c o n t e n t" > < u i : i n s e r t/ >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

12/??

Les technologies intgres a Seam e e `

Ce qui nous fait quune fois notre composant enregistr dans le dossier /resources sous le nom panel.xhtml e (/resources/project/panel.xhtml) on pourra lutiliser de la sorte :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33< ui:composition xmlns:ui = " http: // java . sun . com / jsf / facelets " x m l n s : p r o j e c t= " http: // java . sun . com / jsf / c o m p o s i t e/ project " template = " layout / template . xhtml " > < u i : r e m o v e> < u i : d e f i n e name = " body " > < script type = " text / j a v a s c r i p t" src = " #{ f a c e s C o n t e x t. e x t e r n a l C o n t e x t. r e q u e s t C o n t e x t P a t h}/ js / tools . js " >

< u i : r e m o v e> < u i : d e f i n e name = " body " > < h1 > Hello the world < / h1 >

< p r o j e c t : p a n e l id = " myPanel " title = " Hello my JSF c o m p o n e n t" > This content will be include in my custom c o m p o n e n t.

A noter que notre composant commence sa dclaration par un ui :composition, cela permet dutiliser la balise e ui :insert qui servira ` dire ` JSF o` il doit ajouter les composants enfants. a a u On remarque galement que la dclaration de la taglib reprend le nom du dossier dans lequel on a enregistr notre chier e e e XHTML (xmlns :project=http ://java.sun.com/jsf/composite/project). JSF 2 se base sur de la convention an dviter la e conguration XML, il sait que lorsquil rencontre une taglib dbutant par http ://java.sun.com/jsf/composite/ il doit e rcuprer les composants se situant dans /resources . e e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

13/??

Les technologies intgres a Seam e e `

2.4.4

Les ressources

La gestion des ressources (images, fragment XHTML, script javascript, etc. . .) a considrablement volu. Il nest plus e e e ncessaire que les ressources soient places dans le WAR (/EAR/WAR/webapp/). Elle peuvent tre ajoutes directement e e e e dans un jar, soit dans /resources soit dans /META-INF/resources . Cela a lnorme avantage de versionner nos ressources, e et surtout davoir une conception plus modulaire. Avant il tait dicile davoir une approche par modules des direntes ressources, ` moins de faire du war overlay via e e a maven ou dutiliser des points dextension OSGI . Les points dextension OSGI taient une mthode bien plus able quune e e conguration complexe de maven. Cependant dans les deux cas, cela ncessitaient beaucoup de conguration XML. Les e ressources devant des ressources JNDI il est plus simple de laisser le class loader se charger de leurs rfrencements. ee La cration de briques composants rutilisables sen retrouve davantage simplie. e e e

2.5

Richfaces 4

Richfaces est une biblioth`que de composants JSF. On y trouve des composants tels que : e rich :tabPanel : permettant davoir des onglets ` lintrieur de sa page a e rich :tree : qui gn`re une arborescence, le genre de composant bien utile pour des GED, larborescence de Nuxeo est e e gre par ce composant. e e rich :calendar : pour avoir un calendrier (enn intgr dans Nuxeo ` la place du composant tomahawk) e e a rich :autocomplete : permettant davoir un champ avec de lauto-compltion. e

Pour plus dinformation sur les composants RichFaces le site de dmo est bien conu : e c http: // richfaces-showcase. appspot. com/ richfaces/ component-sample. jsf Richface4 a t enti`rement rcrit en JSF 2, cela a permit une amlioration de ses performances. Le framework JavaScript ee e ee e interne a t remplac par JQuery (dans les versions antrieure cest Prototype qui tait utilis). ee e e e e Le point le plus intressant dans la nouvelle version de RichFaces est le rich :validator qui simplie lintgration de la e e JSR-303 61 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 < u i : c o m p o s i t i o n xmlns = " http: // www . w3 . org /1999/ xhtml " xmlns:h = " http: // java . sun . com / jsf / html " xmlns:f = " http: // java . sun . com / jsf / core " xmlns:ui = " http: // java . sun . com / jsf / facelets " x m l n s : a 4 j= " http: // r i c h f a c e s. org / a4j " x m l n s : r i c h= " http: // r i c h f a c e s. org / rich " > < h:form > < r i c h : p a n e l> < f:facet name = " header " > < h : p a n e l G r o u p> < h : o u t p u t T e x t value = " User i n f o r m a t i o n" / > < h : p a n e l G r i d columns = " 3 " > < h : o u t p u t T e x t value = " Name: " / >

6. Pour rappel la JSR-303 est la norme dcrivant la validation par annotations. e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

14/??

Les technologies intgres a Seam e e `

18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

< h : i n p u t T e x t value = " #{ v a l i d a t i o n B e a n. name } " id = " name " > < rich:validator /> < r i c h : m e s s a g e for = " name " / > < h : o u t p u t T e x t value = " Email " / > < h : i n p u t T e x t value = " #{ v a l i d a t i o n B e a n. email } " id = " email " v a l i d a t o r M e s s a g e= " bad email " > < rich:validator /> < r i c h : m e s s a g e for = " email " / > < h : o u t p u t T e x t value = " Age " / > < h : i n p u t T e x t value = " #{ v a l i d a t i o n B e a n. age } " id = " age " > < rich:validator /> < r i c h : m e s s a g e for = " age " / > < h : o u t p u t T e x t value = " I agree the terms " / > < h : s e l e c t B o o l e a n C h e c k b o x value = " #{ v a l i d a t i o n B e a n. agreed } " id = " agreed " > < r i c h : v a l i d a t o r/ > < r i c h : m e s s a g e for = " agreed " / >

package org . r i c h f a c e s. demo . v a l i d a t i o n; import import import import import import import javax . faces . bean . M a n a g e d B e a n; javax . faces . bean . R e q u e s t S c o p e d; javax . v a l i d a t i o n. c o n s t r a i n t s. A s s e r t T r u e; javax . v a l i d a t i o n. c o n s t r a i n t s. Max ; javax . v a l i d a t i o n. c o n s t r a i n t s. Min ; javax . v a l i d a t i o n. c o n s t r a i n t s. Email ; javax . v a l i d a t i o n. c o n s t r a i n t s. Size ;

@ManagedBean @RequestScoped public class V a l i d a t i o n B e a n { @Size ( min =3 , max =12) private String name = null ; @Email private String email = null ; @Min ( value = 18) @Max ( value = 99) private Integer age ; private String country ; private String jobTitle ; @AssertTrue private boolean agreed = true ; // g e t t e r s & s e t t e r s . . . }

Comme on peut le remarquer les champs contiennent un rich :validator ainsi quun composant rich :message . Le rich :validator permet ` RichFaces deectuer la validation par annotations et le rich :message sert ` acher le message a a derreur. Etant donn que nos composants sont dans h :panelGrid le message derreur sera ach ` cot du champ. e ea e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

15/??

Le build process

33.1

Le build processEAR

les Enterprise Application ARchive sont les packaging conus pour les serveurs dapplications. Ces archives ne sont pas c plus complexes que des WAR classiques que lon retrouve dans tomcat. Une application Seam peut parfaitement tre packag e e en WAR. Cependant, larchitecture EAR permet une meilleur vision de direntes couches prsentes dans une application e e JEE.

Figure 3.1 Reprsentation du packaging EAR e

Comme on peut le voir sur cette illustration lEAR est dcoupe en 3 parties : e e Un dossier lib contenant toutes les JAR de lapplication. Un dossier war (qui peut tre compress dans un chier zip) qui est le war classique que lon retrouve dans des e e applications pour tomcat. Cependant le war dans le packaging EAR ne contient aucun JAR. Cela est extrmement e important lorsque lon dveloppe des composants JSF. e Les EJB sont ` la racine de lEAR. a Comme un WAR, lEAR se place directement dans le dossier deploy du serveur dapplication. Il peut tre compress e e ou non. Dans un environnement de dveloppement lEAR est non compress avec le WAR inclus galement dcompress, e e e e e permettant ainsi de dployer ` chaud les parties de lapplication sur lesquelles on travail. e a

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

16/??

Le build process

3.2

ANT + Maven

Lobjectif du build process est donc de produire cet EAR. Pour cela la solution la plus simple et dutiliser Maven pour la compilation et la construction de l EAR, et ANT pour le build process (dploiement, packaging de livraison, etc...) e On peut se demander pourquoi ne pas utiliser Maven pour raliser ces deux tches. La raison est assez simple, la e a compilation et la gestion du build process sont deux tches distinctes. Mlanger les deux am`ne souvent ` tordre Maven a e e a dans tous les sens an de russir ` obtenir le rsultat souhait. De plus, le fait de sparer les deux permet de remplacer plus e a e e e simplement lune des deux parties par une autre solution, par exemple de remplacer maven par Ivy. Il est ` noter que Seam 2.x tait livr avec un outil bas sur IVY an de rsoudre les dpendances. Seam-gen a e e e e e permettait de gnrer un squelette de projet facilement en aidant le dveloppement de nouvelles fonctionnalits. e e e e On trouve sur le net certains archetypes maven pour Seam 3. Cependant ils sont gnralement bien trop simples, et ne e e sont pas aussi aboutis au niveau de leurs congurations que ltait Seam-gen. e JBoss travail actuellement sur une forge an de proposer une solution quivalente ` Seam-gen. Pour plus dinformation e a sur Seam forge je vous invite ` aller sur leur site : http://seamframework.org/Documentation/SeamForge a

3.3

Get Start : Smile Seam Forge

An de permettre la gnration de squelette de projets rapidement, jai ralis un script ANT. Il sera par la suite e e e e converti en archetype Maven. An de bien comprendre comment est architectur Seam un exemple permet davoir une e meilleure vision. La forge se prsente par un dossier contenant un dossier pour les sources (src), ainsi que de chiers Ant (build.xml, e build.properties et ant-contrib).

Figure 3.2 Arborescence de la forge smile Lutilisation de la forge est tr`s simple, il faut tout dabord renseigner les direntes proprits du projet dans le e e ee build.properties

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

17/??

Le build process

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ######################################## # SEAM 3 FORGE PROJECT # = = = = = = = = = == = = = = = = = = = = == # ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ######################################## #= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ======================================== # GLOBAL PROJECT PROPERTIES #= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ======================================== forge . project . name = smile - seam forge . project . display . name = Smile Seam forge . project . d e s c r i p t i o n= F o r m a t i o n project on Seam 3 #= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ======================================== # MA E INFO VN #= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ======================================== forge . project . maven . groupId = fr . smile forge . project . maven . a r t i f a c t I d= seam3 forge . project . maven . version =0.1 - SNAPSHOT forge . project . root . package = fr . smile . seam

#= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ======================================== # DEPLOYEMENT INFO #= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ======================================== forge . project . w o r k s p a c e. dir =/ w o r k s p a c e/ projects forge . project . delivery . dir =/ w o r k s p a c e/ projects / delivery forge . project . server . deploy . dir =/ opt / serveurs / jboss -6.0.0. Final / server / default / deploy

forge.project.name : Cest le nom du projet qui sera utilis dans le web.xml pour le nom de lapplication ainsi que e dans les dirents dossiers du projet. e forge.project.display.name : Cest le nom du projet dans le chier messages.properties. Il sert pour lachage du titre des pages web. forge.project.root.package : Cest le package principale de lapplication. On le retrouve dans les direntes classes e dexemples. forge.project.workspace.dir : Cest lune des proprits principales. Cest le dossier dans le quel sera gnr le projet. ee e e e forge.project.server.deploy.dir : Cest lemplacement du serveur. Il sera utilis dans le chier build.xml du projet pour e le dploient. e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

18/??

Le build process

Il faut en suite lancer le script ant :1 2cd / path / to / smile / seam / forge ant -f build . xml

Une fois le projet gnr il faut lancer le build process du projet via le script ant se trouvant dans le dossier parent du e e e projet :1 2cd / w o r k s p a c e/ projects / smile - seam / ant -f build . xml

Ce script va tout dabord utiliser maven pour rsoudre les dpendances et construire lEAR. Une fois que cela est fait, e e ant rcup`re lEAR pour le copier dans le dossier deploy du serveur. e e Un fois le processus de compilation termin on peut lancer notre serveur dapplication : e1 2cd / opt / serveurs / jboss -6.0.0. Final / bin ./ run . sh

Notre application est donc accessible via lurl http://localhost:8080/smile-seam

Figure 3.3 Page daccueil du projet gnr par la forge smile e e e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

19/??

Le build process

3.4

Structure dun projet Seam

Notre forge nous a construit un projet type pour Seam, cela permet de comprendre comment il est architectur. e

Figure 3.4 Arborescence du projet gnr par la forge e e e

Le projet est donc divis en plusieurs sous parties : e code-format : Cest lensemble de chiers pour le formatage du code, ainsi que les r`gles PMD et check-style. e A documentations : Ce dossier contient un template L TEX pour la documentation du projet. distribution : Ce sont les chiers qui dpendent de lenvironnement. Typiquement, on y retrouve les chiers e env.properties. features : Cest le coeur du projet, cest dans ce dossier que se trouve le code source de lapplication. Le dossier features est galement dcompos en dirent module Maven : e e e e bootstrap : Le bootstrap est le module qui sera excut au dmarrage du serveur pour linitialisation de lapplication. e e e Par exemple cest lui qui aura en charge linitialisation de la base de donnes. e commons : Cest le projet qui regroupe un ensemble classe utiles pour tous les autres modules. Il ne dpend daucun e autre module du projet.

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr 20/??

Le build process

core : Cest le coeur de lapplication, cest ici que lon retrouvera les contrleurs. o datamodel : Le module datamodel contient lensemble de entits JPA. e ear : Ce module est un peu spcial, cest le module maven qui a en charge la compilation de lEAR. il ne contient e aucune source. exploded-ear : Ce dossier nest pas un module maven, mais une vue de lEAR dcompress. Il est parfois utile, e e surtout lorsque lon dbute davoir une vision de comment lEAR est dploy sur le serveur. e e e war : Ce module est la partie Web du projet, mais comme pour les WAR classique, on y retrouve les chiers de conguration principaux (web.xml, faces-cong.xml, pretty-cong.xml)

3.5

Les modules maven

Figure 3.5 Dpendances entre les modules e

Larchitecture du projet gnr par la forge est relativement classique. Le module core est le centre de lapplication, il e e e dpend de lensemble des sources java. Le War et le bootstrap utilisent le core. Le module EAR rcup`re le core, le war et e e e le bootstrap an de gnrer lEAR. Les modules smile-seam et feature sont l` pour mutualiser la conguration maven. e e a

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

21/??

Le build process

3.5.1

smile-seam : le module parent

Le projet parent est le module smile-seam. Cest lui qui regroupe les informations globales du projets.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 < project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 < groupId > fr . smile < a r t i f a c t I d> seam3 < version > 0.1 - SNAPSHOT < p a c k a g i n g> pom < name > smile - seam < d e s c r i p t i o n> F o r m a t i o n project on Seam 3 < p r o p e r t i e s> < project . version > 0.1 - SNAPSHOT < project . build . s o u r c e E n c o d i n g> UTF -8 < project . r e p o r t i n g. o u t p u t E n c o d i n g> UTF -8 < modules > < module > smile - seam - features < d e v e l o p e r s>

3.5.2

smile-seam-features : code sources de lapplication

Le module features est le projet parent au niveau du code source. Cest lui qui contient le dependancies managers ainsi que les versions des direntes librairies utilises. e e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

22/??

Le build process

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74

< project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 < groupId > fr . smile < a r t i f a c t I d> smile - seam - features < p a c k a g i n g> pom < version > 0.1 - SNAPSHOT < name > smile - seam features < / name > < p r o p e r t i e s> < project . version > 0.1 - SNAPSHOT < project . build . s o u r c e E n c o d i n g> UTF -8 < project . r e p o r t i n g. o u t p u t E n c o d i n g> UTF -8 < version . jboss . app >5 < version . slf4j > 1.6.1 < seam . version > 3.0.1 - SNAPSHOT < seam . security . version > 3.0.0. Final < seam . p e r s i s t e n c e. version > 3.0.0. Final < r i c h f a c e s. version > 4.0.0. Final < f r e e m a r k e r. version > 2.3.16 < p r i m e f a c e s. version > 3.0. M1 < p r i m e f a c e s. themes . bluesky . version > 1.0.1 < p r e t t y f a c e s. jsf2 . version > 3.0.1

< modules > < module > smile - seam - commons < module > smile - seam - core < / module > < module > smile - seam - d a t a m o d e l < module > smile - seam - war < / module > < module > smile - seam - b o o t s t r a p < module > smile - seam - ear < / module > < r e p o s i t o r i e s> < r e p o s i t o r y> < id > r e p o s i t o r y. jboss . org < name > JBoss Maven R e p o s i t o r y < url > http: // r e p o s i t o r y. jboss . org / maven2 < s n a p s h o t s> < enabled > false < releases > < enabled > true < r e p o s i t o r y> < id > J B O S S _ N E X U S < url > http: // r e p o s i t o r y. jboss . org / nexus / content / groups / public < / url >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

23/??

Le build process

75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149

< r e p o s i t o r y> < id > r e p o s i t o r y. nexus . jboss . org < name > JBoss R e p o s i t o r y < url > http: // r e p o s i t o r y. jboss . org / nexus / content / groups / public - jboss / < r e p o s i t o r y> < id > prime - repo < name > Prime T e c h n o l o g y Maven R e p o s i t o r y < url > http: // r e p o s i t o r y. prime . com . tr < layout > default < d e p e n d e n c y M a n a g e m e n t> < d e p e n d e n c i e s> < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - b o o t s t r a p < version > 0.1 - SNAPSHOT < type > ejb < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - core < version > 0.1 - SNAPSHOT < type > ejb < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - d a t a m o d e l < version > 0.1 - SNAPSHOT < type > ejb < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - commons < version > 0.1 - SNAPSHOT < type > jar < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - war < version > 0.1 - SNAPSHOT < type > war < d e p e n d e n c y> < groupId > org . apache . commons < a r t i f a c t I d> commons - io < version > 1.3.2 < d e p e n d e n c y> < groupId > commons - lang < a r t i f a c t I d> commons - lang < version > 2.6 < d e p e n d e n c y> < groupId > org . slf4j < / groupId > < a r t i f a c t I d> slf4j - simple < version > ${ version . slf4j }

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

24/??

Le build process

150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224

< d e p e n d e n c y> < groupId > org . jboss . spec < a r t i f a c t I d> jboss - javaee -6.0 < version > 1.0.0. CR1 < / version > < type > pom < d e p e n d e n c y> < groupId > org . jboss . seam . solder < a r t i f a c t I d> seam - solder < version > ${ seam . version } < d e p e n d e n c y> < groupId > org . jboss . seam . config < a r t i f a c t I d> seam - config - xml < version > ${ seam . version } < d e p e n d e n c y> < groupId > org . jboss . seam . p e r s i s t e n c e < a r t i f a c t I d> seam - p e r s i s t e n c e < version > ${ seam . p e r s i s t e n c e. version } < d e p e n d e n c y> < groupId > org . jboss . seam . servlet < a r t i f a c t I d> seam - servlet < version > ${ seam . version } < d e p e n d e n c y> < groupId > org . jboss . seam . security < a r t i f a c t I d> seam - security < version > ${ seam . security . version } < d e p e n d e n c y> < groupId > org . jboss . seam . catch < a r t i f a c t I d> seam - catch < version > ${ seam . version } < d e p e n d e n c y> < groupId > org . jboss . seam . i n t e r n a t i o n a l < a r t i f a c t I d> seam - i n t e r n a t i o n a l < version > ${ seam . version } < d e p e n d e n c y> < groupId > org . jboss . seam . rest < a r t i f a c t I d> seam - rest - impl < version > ${ seam . version } < d e p e n d e n c y> < groupId > org . jboss . seam . rest < a r t i f a c t I d> seam - rest - api < version > ${ seam . version } < d e p e n d e n c y> < groupId > org . jboss . seam . faces < a r t i f a c t I d> seam - faces < version > ${ seam . version } < d e p e n d e n c y> < groupId > org . r i c h f a c e s < a r t i f a c t I d> richfaces - bom < version > ${ r i c h f a c e s. version } < scope > import < type > pom

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

25/??

Le build process

225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299

< d e p e n d e n c y> < groupId > org . r i c h f a c e s. ui < a r t i f a c t I d> richfaces - components - ui < version > ${ r i c h f a c e s. version } < d e p e n d e n c y> < groupId > org . r i c h f a c e s. core < a r t i f a c t I d> richfaces - core - impl < version > ${ r i c h f a c e s. version } < d e p e n d e n c y> < groupId > org . f r e e m a r k e r < a r t i f a c t I d> f r e e m a r k e r < version > ${ f r e e m a r k e r. version } < d e p e n d e n c y> < groupId > org . p r i m e f a c e s < a r t i f a c t I d> p r i m e f a c e s < version > ${ p r i m e f a c e s. version } < d e p e n d e n c y> < groupId > org . p r i m e f a c e s. themes < a r t i f a c t I d> bluesky < / a r t i f a c t I d> < version > ${ p r i m e f a c e s. themes . bluesky . version } < d e p e n d e n c y> < groupId > com . ocpsoft < a r t i f a c t I d> prettyfaces - jsf2 < version > ${ p r e t t y f a c e s. jsf2 . version } < d e p e n d e n c y> < groupId > com . ocpsoft < a r t i f a c t I d> ocpsoft - pretty - time < version > 1.0.6 < d e p e n d e n c y> < groupId > org . jboss . weld < a r t i f a c t I d> weld - core < version > 1.1.1. Final

< d e p e n d e n c i e s> < d e p e n d e n c y> < groupId > org . jboss . spec < a r t i f a c t I d> jboss - javaee -6.0 < version > 1.0.0. CR1 < type > pom < scope > provided < build > < p l u g i n M a n a g e m e n t> < plugins >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

26/??

Le build process

300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367

< plugin > < a r t i f a c t I d> maven - ear - plugin < version > 2.4.1 < plugin > < a r t i f a c t I d> maven - ejb - plugin < version > 2.2.1 < c o n f i g u r a t i o n> < e j b V e r s i o n> 3.1 < archive > < manifest > < a d d C l a s s p a t h> true < plugin > < a r t i f a c t I d> maven - jar - plugin < version > 2.3 < e x e c u t i o n s> < e x e c u t i o n> < goals > < goal > test - jar < plugin > < a r t i f a c t I d> maven - surefire - plugin < version > 2.5 < c o n f i g u r a t i o n> < forkMode > once < / forkMode > < argLine > - e n a b l e a s s e r t i o n s < r e p o r t i n g> < plugins > < plugin > < groupId > org . apache . maven . plugins < a r t i f a c t I d> maven - compiler - plugin < c o n f i g u r a t i o n> < source > 1.6 < target > 1.6 < plugin > < a r t i f a c t I d> maven - javadoc - plugin < version > 2.6.1 < c o n f i g u r a t i o n> < a g g r e g a t e> true < plugin > < a r t i f a c t I d> maven - surefire - report - plugin < / a r t i f a c t I d> < version > 2.5

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

27/??

Le build process

3.5.3

smile-seam-commons : la base de lapplication

Le module commons permet de gnraliser des interfaces, enums ou classes pour lensemble de lapplication. En r`gle e e e gnrale le module commons est un JAR. e e1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 < project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 < parent > < groupId > fr . smile < a r t i f a c t I d> smile - seam - features < version > 0.1 - SNAPSHOT < r e l a t i v e P a t h> ../ pom . xml < groupId > fr . smile < a r t i f a c t I d> smile - seam - commons < version > 0.1 - SNAPSHOT < p a c k a g i n g> jar < name > smile - seam - Commons

< d e p e n d e n c i e s> < d e p e n d e n c y> < groupId > commons - io < a r t i f a c t I d> commons - io < version > 1.3.2 < d e p e n d e n c y> < groupId > org . jboss . spec < a r t i f a c t I d> jboss - javaee -6.0 < version > 1.0.0. CR1 < type > pom < scope > provided

< build > < r e s o u r c e s> < resource > < d i r e c t o r y> src / main / r e s o u r c e s < f i l t e r i n g> true

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

28/??

Le build process

3.5.4

smile-seam-datamodel : Les entits JPA e

Le module datamodel contient lensemble des entits JPA. Cest galement lui qui contient le chier de conguration e e hibernate (persistence.xml). Dautre modules peuvent contenir des entits JPA, mais les mod`les de donnes principaux e e e doivent ce trouver ici.

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

29/??

Le build process

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

< project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 < parent > < groupId > fr . smile < a r t i f a c t I d> smile - seam - features < version > 0.1 - SNAPSHOT < r e l a t i v e P a t h> ../ pom . xml < a r t i f a c t I d> smile - seam - d a t a m o d e l < version > 0.1 - SNAPSHOT < p a c k a g i n g> ejb < name > smile - seam - D a t a M o d e l

============ == == == == == == == == == == == == < d e p e n d e n c i e s> < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - commons < type > jar < build > < r e s o u r c e s> < resource > < d i r e c t o r y> src / main / r e s o u r c e s < f i l t e r i n g> true

3.5.5

smile-seam-core : Le coeur de lapplication

Le module core est le centre de lapplication, cest ici que lon retrouve les contrleurs des direntes pages. Il utilise les o e autres modules (commons, datamodel, etc...) an de restituer ` la vue les dirents traitement que lon souhaite raliser. a e e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

30/??

Le build process

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74

< project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 < parent > < groupId > fr . smile < a r t i f a c t I d> smile - seam - features < version > 0.1 - SNAPSHOT < r e l a t i v e P a t h> ../ pom . xml < groupId > fr . smile < a r t i f a c t I d> smile - seam - core < version > 0.1 - SNAPSHOT < p a c k a g i n g> ejb < name > smile - seam - core

< d e p e n d e n c i e s> < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - commons < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - d a t a m o d e l < type > ejb

< d e p e n d e n c y> < groupId > org . slf4j < a r t i f a c t I d> slf4j - simple < scope > provided < d e p e n d e n c y> < groupId > org . jboss . seam . solder < a r t i f a c t I d> seam - solder < scope > provided < d e p e n d e n c y> < groupId > org . jboss . seam . p e r s i s t e n c e < a r t i f a c t I d> seam - p e r s i s t e n c e < scope > provided

< d e p e n d e n c y> < groupId > org . jboss . seam . catch < a r t i f a c t I d> seam - catch < scope > provided < d e p e n d e n c y> < groupId > org . jboss . seam . i n t e r n a t i o n a l < a r t i f a c t I d> seam - i n t e r n a t i o n a l

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

31/??

Le build process

75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116

< scope > provided < d e p e n d e n c y> < groupId > org . jboss . seam . faces < a r t i f a c t I d> seam - faces < scope > provided < d e p e n d e n c y> < groupId > org . jboss . seam . rest < a r t i f a c t I d> seam - rest - impl < scope > provided < d e p e n d e n c y> < groupId > org . jboss . seam . rest < a r t i f a c t I d> seam - rest - api < scope > provided < d e p e n d e n c y> < groupId > com . sun . facelets < a r t i f a c t I d> jsf - facelets < version > 1.1.15. B1 < scope > provided

< build > < r e s o u r c e s> < resource > < d i r e c t o r y> src / main / r e s o u r c e s < f i l t e r i n g> true

3.5.6

smile-seam-bootstrap : initialiser son application

Le but du bootstrap est dinitialiser lapplication, il est excut au dmarrage du serveur. Il permet par exemple e e e dinitialiser la base de donnes avec des valeurs de rfrences. e ee

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

32/??

Le build process

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

< project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 < parent > < groupId > fr . smile < a r t i f a c t I d> smile - seam - features < version > 0.1 - SNAPSHOT < r e l a t i v e P a t h> ../ pom . xml

< groupId > fr . smile < a r t i f a c t I d> smile - seam - b o o t s t r a p < version > 0.1 - SNAPSHOT < p a c k a g i n g> ejb < name > smile - seam - B o o t s t r a p

< d e p e n d e n c i e s> < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - core < type > ejb < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - d a t a m o d e l < type > ejb

3.5.7

smile-seam-war : le rendu de lapplication

Le module War contient la vue de lapplication ainsi que les chiers de congurations de Seam (web.xml, faces-cong.xml, pretty-cong.xml). On y retrouve aussi les chiers dinternationalisation messages.properties. La particularit du module WAR est le fait de rediriger lensemble de ses dpendances vers le dossier Lib de lear. e e Les EAR ont deux classes Loader, lun pour les EJB et lautre pour le WAR, cest les fameux conteneur de servlets et conteneur EJB. En gnralement il nest pas obligatoire de navoir aucun JAR dans le WAR. Cependant lorsque lon cre e e e des composants JSF qui utilisent des composants dj` existant (composants JSF, richfaces, primefaces) il est obligatoire de ea navoir aucune librairie dans le conteneur de servlets, sous peine davoir des erreurs dinstanciation ou de transtypage du aux classes loaders. La mthode pour rsoudre ce probl`me est simple, via maven on exclue toutes les librairies du packaging. Puis on gn`re e e e e e un chier manifest avec les rfrences des librairies pointant sur le dossier Lib de lEAR. ee

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

33/??

Le build process

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74

< project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 < parent > < groupId > fr . smile < a r t i f a c t I d> smile - seam - features < version > 0.1 - SNAPSHOT < r e l a t i v e P a t h> ../ pom . xml < a r t i f a c t I d> smile - seam - war < version > 0.1 - SNAPSHOT < p a c k a g i n g> war < name > smile - seam - WAR

< d e p e n d e n c i e s> < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - d a t a m o d e l < type > ejb

< d e p e n d e n c y> < groupId > org . jboss . seam . solder < a r t i f a c t I d> seam - solder < d e p e n d e n c y> < groupId > org . jboss . seam . config < a r t i f a c t I d> seam - config - xml < scope > provided < d e p e n d e n c y> < groupId > org . jboss . seam . servlet < a r t i f a c t I d> seam - servlet < d e p e n d e n c y> < groupId > org . jboss . seam . security < a r t i f a c t I d> seam - security < d e p e n d e n c y> < groupId > org . jboss . seam . i n t e r n a t i o n a l < a r t i f a c t I d> seam - i n t e r n a t i o n a l < d e p e n d e n c y> < groupId > org . jboss . seam . faces < a r t i f a c t I d> seam - faces < d e p e n d e n c y> < groupId > org . r i c h f a c e s. ui

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

34/??

Le build process

75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149

< a r t i f a c t I d> richfaces - components - ui < d e p e n d e n c y> < groupId > org . r i c h f a c e s. core < a r t i f a c t I d> richfaces - core - impl < d e p e n d e n c y> < groupId > org . f r e e m a r k e r < a r t i f a c t I d> f r e e m a r k e r < d e p e n d e n c y> < groupId > org . p r i m e f a c e s < a r t i f a c t I d> p r i m e f a c e s < d e p e n d e n c y> < groupId > org . p r i m e f a c e s. themes < a r t i f a c t I d> bluesky < d e p e n d e n c y> < groupId > com . ocpsoft < / groupId > < a r t i f a c t I d> ocpsoft - pretty - time < d e p e n d e n c y> < groupId > com . ocpsoft < / groupId > < a r t i f a c t I d> prettyfaces - jsf2

< build > < plugins > < plugin > < groupId > org . apache . maven . plugins < a r t i f a c t I d> maven - war - plugin < c o n f i g u r a t i o n> < p a c k a g i n g E x c l u d e s> WEB - INF / lib /*. jar < / p a c k a g i n g E x c l u d e s> < archive > < manifest > < a d d C l a s s p a t h> true < c l a s s p a t h P r e f i x> ../ lib / < w e b R e s o u r c e s> < resource > < d i r e c t o r y> src / main / webapp < f i l t e r i n g> true < includes > < include > **/ c o m p o n e n t s. xml < include > **/ web . xml < include > **/ footer . xhtml

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

35/??

Le build process

3.5.8

smile-seam-ear : lEAR

Le module ear est en charge de la compilation de lear. Il rsous lensemble de dpendances de lapplication et dtermine e e e dans quel dossiers irons les direntes librairies (JAR, EJB et WAR). Pour cela on utilise le plugins EAR de maven. e Le module EAR doit dpendre de toutes les librairies. Pour chaquune delles il faut prciser dans que modules elles e e appartienent(JAR, EJB et WAR).

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

36/??

Le build process

Figure 3.6 Rsultat de la compilation du module EAR e

1 2 3 4 5 6 7 8 9 10 11 12 13 14

< project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 < parent > < groupId > fr . smile < a r t i f a c t I d> smile - seam - features < version > 0.1 - SNAPSHOT

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

37/??

Le build process

15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89

< r e l a t i v e P a t h> ../ pom . xml

< groupId > fr . smile < a r t i f a c t I d> smile - seam - ear < version > 0.1 - SNAPSHOT < p a c k a g i n g> ear < name > smile - seam - EAR

< d e p e n d e n c i e s> < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - war < type > war < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - d a t a m o d e l < type > ejb < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - b o o t s t r a p < type > ejb < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - core < version > 0.1 - SNAPSHOT < / version > < type > ejb < d e p e n d e n c y> < groupId > fr . smile < a r t i f a c t I d> smile - seam - commons < type > jar

< d e p e n d e n c y> < groupId > org . jboss . spec < a r t i f a c t I d> jboss - javaee -6.0 < version > 1.0.0. CR1 < type > pom < scope > provided < d e p e n d e n c y> < groupId > org . jboss . seam . solder < a r t i f a c t I d> seam - solder < d e p e n d e n c y> < groupId > org . jboss . seam . config < a r t i f a c t I d> seam - config - xml < d e p e n d e n c y> < groupId > org . jboss . seam . p e r s i s t e n c e < a r t i f a c t I d> seam - p e r s i s t e n c e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

38/??

Le build process

90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164

< d e p e n d e n c y> < groupId > org . jboss . seam . servlet < a r t i f a c t I d> seam - servlet < d e p e n d e n c y> < groupId > org . jboss . seam . security < a r t i f a c t I d> seam - security < d e p e n d e n c y> < groupId > org . jboss . seam . catch < a r t i f a c t I d> seam - catch < d e p e n d e n c y> < groupId > org . jboss . seam . i n t e r n a t i o n a l < a r t i f a