BarCamp « Et pourquoi pas JEE ? » 
Octobre 2012 @ Paris 
Patrick GUILLERM 
Architecte Java JEE @PALO IT
2 
Au programme 
Introduction 
JEE 6 
Seam 3 
JSF 
Conclusion
INTRODUCTION
4 
Introduction 
Patrick GUILLERM, Architecte Java JEE 
Backoffice de l’Assemblée des Chambres Françaises de Commerce et d’Industrie (Seam 2) 
Le Guichet Entreprises (JSF) 
HEC – K-HUB (Nuxeo, Seam 2) 
Intranet de Generali France (Nuxeo, Seam 2) 
CADA – Cabinet du 1er Ministre (Nuxeo, Seam 2, Selenium) 
You Testlt (JEE6, Seam 3, JSF 2). 
Quels objectifs pour ce BarCamp ? 
Casser les idées reçues sur JEE 
Exposer les avancées technologiques de cette norme 
Montrer qu’il existe autre chose que Spring 
Réconcilier certains d’entre vous avec les EJB et JSF 
Mettre en avant les avantages et inconvénients.
5 
JEE 6
6 
JEE 6 
Java Entreprise Edition 
Ensemble de normes (JSR) 
Des API (javax.*) 
La majorité des technologies Web en JAVA. 
Que doit contenir un projet pour être un projet JEE ? 
Des EJB 
Un conteneur de SERVLET et un conteneur d’EJB. 
JEE historique
7 
JEE 6 
Evolution entre JEE5 et JEE6 
Simplification des EJB 
Normalisation de l’injection des dépendances 
Davantage de conventions 
Meilleure testabilité (Test unitaire, Arquillian) 
Possibilité d’être utilisé en JAVA SE 
Normalisation de la configuration de JPA 
Les implémentations de référence 
Normes mises obsolètes (Entity CMP 2.x, JAX-RCP, etc.). 
Principales nouvelles normes 
JSR-299 : CDI 
JSR-330 : @Inject 
JSR-303 : Bean Validator 
JSR-314 : Java Server Faces 2 
JSR-317 : JPA 2 
JSR-311 : JAX-RS 1.1 
JSR-224 : JAX-WS 2.2 
JSR-315 : SERVLET API 3 
Etc.
8 
JEE 6 
Evolution entre JEE5 et JEE6
9 
JEE 6 
JPA 2 : les principales nouvelles normes 
Meilleure gestion des collections (@Element-Collection) 
Les Map (@MapKeyColumn) 
Suppression des liaisons orphelines (OneToMany et OneToOne) 
Criterias 
Lock pessimiste 
Order column (tri au moment de l’écriture) 
Des @Embedded dans des @Embedded 
Standardisation du fichier persistance.xml 
Séparation de la norme JPA et des EJB.
10 
JEE 6 
Les nouveautés de JEE 6 : JPA 2
11 
JEE 6 
Les nouveautés de JEE 6 : JPA 2
12 
JEE 6 
Evolution entre JEE5 et JEE6 
Entity Manager Factory (jboss-javaee-6) 
EJB Container (Glassfish embedded). 
Aller plus loin dans les tests 
Arquillian 
Selenium (attention aux ID HTML).
13 
SEAM 3
14 
Seam 3 
Qu’est ce que Seam? 
Concurrent direct de Spring 
Conçu par le créateur d’Hibernate : Gavin King 
Unifier le monde JEE (JPA / EJB / JSF) 
Framework Stateful orienté 
Implémentation de référence de la norme CDI 
Acteurs majeurs de la norme JEE 6. 
Les cas d’utilisation 
Les back-offices : grâce à son orientation stateful 
Middleware : pour sa facilité d’intégration avec les standards JEE 
(JAX-WS, JAX-RS,JPA,JMS,JASS, etc.) 
Site à très haute disponibilité : grâce aux EJB et aux serveurs d’applications 
Site avec des interfaces web très riches grâce à son framework Ajax, les différents 
composants et au Page Description Language 
Site au domaine fonctionnel complexe : validation simplifiée, évènements 
Maintenabilité facilité : AoX, CoC et transparence 
Pour traiter il faut normaliser les évènements 
Sécurité des informations 
Pas de réponse simple au problème du périmètre des équipes supports/exploitations.
15 
Seam 3 
Les avantages 
Productivité 
Unification des briques applicatives 
Puissante gestion des formulaires 
De l’Ajax sans la contrainte de l’écriture de code JavaScript 
Mécanisme de templating très puissant 
Framework orienté composants. 
Les inconvénients 
Peu de développeur connaissent ce framework en France 
Beaucoup de préjugés sur Java EE 
Il est nécessaire de comprendre ce que l’on fait 
Le calcul d’une page JSF est un peu plus long 
Peu de développeur savent concevoir des composants.
16 
Seam 3 
Les principaux modules 
JBoss Weld : implémentation référence de la norme JSR-299 
Seam Persistence : JPA 2 
Seam Faces : JSF2 
Seam Validation : extension pour la norme JSR-303 
Seam Security : identification.
17 
Seam 3 
Contexts and Dependency Injection 
Le simple fait d’avoir un fichier bean.xm dans le META-INF d’un jar permet d’ordonner à Weld 
d’ajouter les Web beans dans son contexte.
18 
Seam 3 
Contexts and Dependency Injection
19 
Seam 3 
Contexts and Dependency Injection
20 
Seam 3 
Les scopes 
@ApplicationScoped : actif durant toute la vie de 
l’application. 
@SessionScoped : actif durant la session HTTP. 
@ConservationScoped : actif durant une conversation. 
@ViewScoped : actif tant que l’on est sur la même 
page. 
@RequestScoped : actif le temps d’une requête HTTP. 
@RenderScoped : actif uniquement durant le 
chargement d’une page. 
@FlashScoped : micro scope destiné aux notifications.
21 
Seam 3 
Que sont les événements ?
22 
Seam 3 
Que sont les événements ?
23 
Seam 3 
Exemples d’événements existants 
@Before Avant le début du cycle de vie JSF 
@After Après le début du cycle de vie JSF 
@RestoreView A la phase ”RestoreView” 
@Initialized Quand l’application est initialisée 
@LoggedInEvent Lorsque l’utilisateur s’est identifié 
@PreLoggedOutEvent Déconnexion d’un utilisateur 
@DidActivate A l’activation d’une session 
@WillPassivate A passivation d’une session.
24 
Seam 3 
JSR-303 : Bean validator 
Permet la validation par annotation 
Unification de la validation ( front et backend ) 
Diverses annotations préexistantes 
Possibilité de créer ses propres annotations pour la validation. 
Restriction des vues 
Création des rôles (Administrateur, contributeurs, etc.) 
Création de la validation des rôles 
Création du Page.java.
25 
Seam 3 
Restriction des vues
26 
Seam 3 
PrettyFaces : URL Rewriting
27 
Seam 3 
PrettyFaces : URL Rewriting
28 
JSF 2
29 
JSF 2 
Qu’est ce que c’est ? 
Framework de présentation orienté composants 
Un ensemble de composants pour gérer les vues 
Permet d’effectuer différents types de rendu (Email, RSS, PDF, ...) 
Du XHTML 
En opposition avec JSP (et JSTL) 
Une interaction transparente avec les Web beans 
Les composants et vues ont des états 
Des bibliothèques très riches en composants (Richfaces, Primefaces). 
Quoi de neuf dans JSF 2 ? 
Page Description Language (Facelets) 
Composants Composite simplifiés (axés sur de la convention) 
Une meilleure gestion des ressources 
De l’ajax en natif 
Gestion des paramètres GET 
Actions en GET 
Un énorme travail d’optimisation 
La normalisation des travaux de JBoss (Seam 2.x)
30 
JSF 2 
Cycle de vie
31 
JSF 2 
Page Description Language
32 
JSF 2 
Page Description Language
33 
JSF 2 
Page Description Language
34 
JSF 2 
Composants Composites
35 
JSF 2 
Composants Composites
36 
JSF 2 
Paramètres en GET 
http://localhost:8080/foobar/product.xhtml?productId=42 
L ’utilisation des PrettyFaces permet un contrôle affiné.
37 
JSF 2 
AJAX 
Le support de l’ajax est natif en JSF 2 mais moins puissant que l’utilisation de Richfaces 
ou de Primefaces.
38 
JSF 2 
Les bibliothèques de composants 
Richfaces : Soutenu par JBoss, très utile pour l’Ajax et de la validation (JSR-303). 
Primefaces : Léger, avec beaucoup de composants, et des diagrammes en HTML 5. 
Icefaces : Graphiquement riche mais gourmande en ressources. 
Apache MyFaces: Largement distancé par Richfaces et Primefaces. 
Richefaces
39 
JSF 2 
Richefaces
40 
JSF 2 
Richefaces
41 
JSF 2 
Richefaces
42 
JSF 2 
Richefaces
43 
JSF 2 
Richefaces
44 
JSF 2 
Primefaces
45 
JSF 2 
Primefaces
46 
JSF 2 
Primefaces
47 
JSF 2 
Primefaces
CONCLUSION
49 
Conclusion 
Liens utiles 
http://www.seamframework.org 
http://www.jboss.org/richfaces/demos 
http://www.primefaces.org/showcase/ui/home.jsf 
Jug sur JEE 6 par Antonio Goncalves : http://www.parleys.com/#st=5&id=1754&sl=0 
Jug sur Arqulian par Alexis Hassier : http://www.parleys.com/#st=5&id=3315&sl=0 
http://www.youtestit.org 
http://palo-it.com/blog.
50

Et pourquoi pas JEE ?

  • 1.
    BarCamp « Etpourquoi pas JEE ? » Octobre 2012 @ Paris Patrick GUILLERM Architecte Java JEE @PALO IT
  • 2.
    2 Au programme Introduction JEE 6 Seam 3 JSF Conclusion
  • 3.
  • 4.
    4 Introduction PatrickGUILLERM, Architecte Java JEE Backoffice de l’Assemblée des Chambres Françaises de Commerce et d’Industrie (Seam 2) Le Guichet Entreprises (JSF) HEC – K-HUB (Nuxeo, Seam 2) Intranet de Generali France (Nuxeo, Seam 2) CADA – Cabinet du 1er Ministre (Nuxeo, Seam 2, Selenium) You Testlt (JEE6, Seam 3, JSF 2). Quels objectifs pour ce BarCamp ? Casser les idées reçues sur JEE Exposer les avancées technologiques de cette norme Montrer qu’il existe autre chose que Spring Réconcilier certains d’entre vous avec les EJB et JSF Mettre en avant les avantages et inconvénients.
  • 5.
  • 6.
    6 JEE 6 Java Entreprise Edition Ensemble de normes (JSR) Des API (javax.*) La majorité des technologies Web en JAVA. Que doit contenir un projet pour être un projet JEE ? Des EJB Un conteneur de SERVLET et un conteneur d’EJB. JEE historique
  • 7.
    7 JEE 6 Evolution entre JEE5 et JEE6 Simplification des EJB Normalisation de l’injection des dépendances Davantage de conventions Meilleure testabilité (Test unitaire, Arquillian) Possibilité d’être utilisé en JAVA SE Normalisation de la configuration de JPA Les implémentations de référence Normes mises obsolètes (Entity CMP 2.x, JAX-RCP, etc.). Principales nouvelles normes JSR-299 : CDI JSR-330 : @Inject JSR-303 : Bean Validator JSR-314 : Java Server Faces 2 JSR-317 : JPA 2 JSR-311 : JAX-RS 1.1 JSR-224 : JAX-WS 2.2 JSR-315 : SERVLET API 3 Etc.
  • 8.
    8 JEE 6 Evolution entre JEE5 et JEE6
  • 9.
    9 JEE 6 JPA 2 : les principales nouvelles normes Meilleure gestion des collections (@Element-Collection) Les Map (@MapKeyColumn) Suppression des liaisons orphelines (OneToMany et OneToOne) Criterias Lock pessimiste Order column (tri au moment de l’écriture) Des @Embedded dans des @Embedded Standardisation du fichier persistance.xml Séparation de la norme JPA et des EJB.
  • 10.
    10 JEE 6 Les nouveautés de JEE 6 : JPA 2
  • 11.
    11 JEE 6 Les nouveautés de JEE 6 : JPA 2
  • 12.
    12 JEE 6 Evolution entre JEE5 et JEE6 Entity Manager Factory (jboss-javaee-6) EJB Container (Glassfish embedded). Aller plus loin dans les tests Arquillian Selenium (attention aux ID HTML).
  • 13.
  • 14.
    14 Seam 3 Qu’est ce que Seam? Concurrent direct de Spring Conçu par le créateur d’Hibernate : Gavin King Unifier le monde JEE (JPA / EJB / JSF) Framework Stateful orienté Implémentation de référence de la norme CDI Acteurs majeurs de la norme JEE 6. Les cas d’utilisation Les back-offices : grâce à son orientation stateful Middleware : pour sa facilité d’intégration avec les standards JEE (JAX-WS, JAX-RS,JPA,JMS,JASS, etc.) Site à très haute disponibilité : grâce aux EJB et aux serveurs d’applications Site avec des interfaces web très riches grâce à son framework Ajax, les différents composants et au Page Description Language Site au domaine fonctionnel complexe : validation simplifiée, évènements Maintenabilité facilité : AoX, CoC et transparence Pour traiter il faut normaliser les évènements Sécurité des informations Pas de réponse simple au problème du périmètre des équipes supports/exploitations.
  • 15.
    15 Seam 3 Les avantages Productivité Unification des briques applicatives Puissante gestion des formulaires De l’Ajax sans la contrainte de l’écriture de code JavaScript Mécanisme de templating très puissant Framework orienté composants. Les inconvénients Peu de développeur connaissent ce framework en France Beaucoup de préjugés sur Java EE Il est nécessaire de comprendre ce que l’on fait Le calcul d’une page JSF est un peu plus long Peu de développeur savent concevoir des composants.
  • 16.
    16 Seam 3 Les principaux modules JBoss Weld : implémentation référence de la norme JSR-299 Seam Persistence : JPA 2 Seam Faces : JSF2 Seam Validation : extension pour la norme JSR-303 Seam Security : identification.
  • 17.
    17 Seam 3 Contexts and Dependency Injection Le simple fait d’avoir un fichier bean.xm dans le META-INF d’un jar permet d’ordonner à Weld d’ajouter les Web beans dans son contexte.
  • 18.
    18 Seam 3 Contexts and Dependency Injection
  • 19.
    19 Seam 3 Contexts and Dependency Injection
  • 20.
    20 Seam 3 Les scopes @ApplicationScoped : actif durant toute la vie de l’application. @SessionScoped : actif durant la session HTTP. @ConservationScoped : actif durant une conversation. @ViewScoped : actif tant que l’on est sur la même page. @RequestScoped : actif le temps d’une requête HTTP. @RenderScoped : actif uniquement durant le chargement d’une page. @FlashScoped : micro scope destiné aux notifications.
  • 21.
    21 Seam 3 Que sont les événements ?
  • 22.
    22 Seam 3 Que sont les événements ?
  • 23.
    23 Seam 3 Exemples d’événements existants @Before Avant le début du cycle de vie JSF @After Après le début du cycle de vie JSF @RestoreView A la phase ”RestoreView” @Initialized Quand l’application est initialisée @LoggedInEvent Lorsque l’utilisateur s’est identifié @PreLoggedOutEvent Déconnexion d’un utilisateur @DidActivate A l’activation d’une session @WillPassivate A passivation d’une session.
  • 24.
    24 Seam 3 JSR-303 : Bean validator Permet la validation par annotation Unification de la validation ( front et backend ) Diverses annotations préexistantes Possibilité de créer ses propres annotations pour la validation. Restriction des vues Création des rôles (Administrateur, contributeurs, etc.) Création de la validation des rôles Création du Page.java.
  • 25.
    25 Seam 3 Restriction des vues
  • 26.
    26 Seam 3 PrettyFaces : URL Rewriting
  • 27.
    27 Seam 3 PrettyFaces : URL Rewriting
  • 28.
  • 29.
    29 JSF 2 Qu’est ce que c’est ? Framework de présentation orienté composants Un ensemble de composants pour gérer les vues Permet d’effectuer différents types de rendu (Email, RSS, PDF, ...) Du XHTML En opposition avec JSP (et JSTL) Une interaction transparente avec les Web beans Les composants et vues ont des états Des bibliothèques très riches en composants (Richfaces, Primefaces). Quoi de neuf dans JSF 2 ? Page Description Language (Facelets) Composants Composite simplifiés (axés sur de la convention) Une meilleure gestion des ressources De l’ajax en natif Gestion des paramètres GET Actions en GET Un énorme travail d’optimisation La normalisation des travaux de JBoss (Seam 2.x)
  • 30.
    30 JSF 2 Cycle de vie
  • 31.
    31 JSF 2 Page Description Language
  • 32.
    32 JSF 2 Page Description Language
  • 33.
    33 JSF 2 Page Description Language
  • 34.
    34 JSF 2 Composants Composites
  • 35.
    35 JSF 2 Composants Composites
  • 36.
    36 JSF 2 Paramètres en GET http://localhost:8080/foobar/product.xhtml?productId=42 L ’utilisation des PrettyFaces permet un contrôle affiné.
  • 37.
    37 JSF 2 AJAX Le support de l’ajax est natif en JSF 2 mais moins puissant que l’utilisation de Richfaces ou de Primefaces.
  • 38.
    38 JSF 2 Les bibliothèques de composants Richfaces : Soutenu par JBoss, très utile pour l’Ajax et de la validation (JSR-303). Primefaces : Léger, avec beaucoup de composants, et des diagrammes en HTML 5. Icefaces : Graphiquement riche mais gourmande en ressources. Apache MyFaces: Largement distancé par Richfaces et Primefaces. Richefaces
  • 39.
    39 JSF 2 Richefaces
  • 40.
    40 JSF 2 Richefaces
  • 41.
    41 JSF 2 Richefaces
  • 42.
    42 JSF 2 Richefaces
  • 43.
    43 JSF 2 Richefaces
  • 44.
    44 JSF 2 Primefaces
  • 45.
    45 JSF 2 Primefaces
  • 46.
    46 JSF 2 Primefaces
  • 47.
    47 JSF 2 Primefaces
  • 48.
  • 49.
    49 Conclusion Liensutiles http://www.seamframework.org http://www.jboss.org/richfaces/demos http://www.primefaces.org/showcase/ui/home.jsf Jug sur JEE 6 par Antonio Goncalves : http://www.parleys.com/#st=5&id=1754&sl=0 Jug sur Arqulian par Alexis Hassier : http://www.parleys.com/#st=5&id=3315&sl=0 http://www.youtestit.org http://palo-it.com/blog.
  • 50.