SlideShare uma empresa Scribd logo
1 de 52
Et pourquoi pas JEE ?
Jeudi 25 Octobre 2012
Patrick Guillerm
Introduction JEE 6 Seam 3 JSF Conclusion
1 Introduction
2 JEE 6
3 Seam 3
4 JSF
5 Conclusion
Introduction JEE 6 Seam 3 JSF Conclusion
Pr´esentation
Patrick Guillerm, d´eveloppeur JEE
Backoffice de l’Assembl´ee des chambres Fran¸caises 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)
YouTestIt (JEE6, Seam 3, JSF2)
Introduction JEE 6 Seam 3 JSF Conclusion
Les objectifs
Quels objectifs pour ce Barcamp ?
Casser les id´ees re¸cues sur JEE
Exposer les avanc´ees technologiques de cette norme
Montrer qu’il existe autre chose que Spring
Vous r´econcilier avec les EJB et JSF
Mettre en avant les avantages et inconv´enients.
Introduction JEE 6 Seam 3 JSF Conclusion
JEE 6: Qu’est ce que le JEE
Java Entreprise Edition
Ensemble de normes ( JSR )
Des API ( javax.* )
La majorit´e des technologies Web en java
Que doit contenir un projet pour ˆetre un projet JEE ?
Des EJB
Un conteneur de servlet + un conteneur d’EJB
Introduction JEE 6 Seam 3 JSF Conclusion
JEE 6: Les origines du JEE
JEE historique
Timeline repr´esentant les sorties de JavaEE ainsi que des principaux frameworks
Introduction JEE 6 Seam 3 JSF Conclusion
JEE 6: Quelles diff´erences entre JEE5 et JEE6?
Evolution entre JEE5 et JEE6
Simplification des EJB
Normalisation de l’injection de d´ependances
Davantage de convention
Meilleure testabilit´e (Tests unitaire, Arquillian )
Possibilit´e d’ˆetre utilis´e en Java SE
Normalisation de la configuration de JPA
Les impl´ementations de r´ef´erences
Normes mises en obsol`ete (Entity CMP 2.x, JAX-RCP, ...)
Introduction JEE 6 Seam 3 JSF Conclusion
JEE 6: Nouveaut´es de JEE 6
Les 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 ...
Introduction JEE 6 Seam 3 JSF Conclusion
JEE 6: EAR ou WAR ?
Evolution entre JEE5 et JEE6
Architecture d’un EAR Architecture d’un WAR
Introduction JEE 6 Seam 3 JSF Conclusion
JEE 6: Nouveaut´es de JEE 6 : JPA 2
Les principales nouvelles normes
Meilleure gestion des collections (@Element-Collection)
Les Map (@MapKeyColumn)
Supression des liaisons orphelines (OneToMany et OneToOne)
Criterias
Lock pessimiste
Order column (tris au moment de l’´ecriture)
Des @Embedded dans des @Embedded
Standardisation du fichier persistance.xml
S´eparation de la norme JPA et des EJB
Introduction JEE 6 Seam 3 JSF Conclusion
JEE 6: Nouveaut´es de JEE 6 : JPA 2
Les Criteria
1 @Named
2 @ViewScoped
3 public class FoobarAction implements Serializable {
4
5 private static final long serialVersionUID = 1679635671732315892L;
6
7 @PersistenceContext
8 private EntityManager entityManager;
9
10 public Foobar findFoobar(final String name) {
11 Foobar result = null;
12
13 CriteriaBuilder criteria = entityManager.getCriteriaBuilder();
14 CriteriaQuery<Foobar> criteriaQuery = criteria.createQuery(Foobar.class);
15
16 Root<Foobar> foobars = criteriaQuery.from(Foobar.class);
17 criteriaQuery.where(criteria.equal(Foobar.<String> get("name"), name));
18
19 result = entityManager.createQuery(criteriaQuery).getSingleResult();
20
21 return result;
22 }
23 }
Introduction JEE 6 Seam 3 JSF Conclusion
JEE 6: Nouveaut´es de JEE 6 : JPA 2
EnityManager exemple : NamedNativeQuery
1 @Entity
2 @NamedNativeQuery(name="SELECT_ALL_USER",query="select * from Foobar",resultClass=Foobar.class)
3 public class Foobar implements Serializable {
4 // Entity ...
5 }
Interface listant les Named Query
1 @ConversationScoped @Named
2 public class FoobarAction {
3 @PersistenceContext
4 private EntityManager entityManager;
5
6 public List<Foobar> findAllFoobar() {
7 List<Foobar> result = entityManager.createNamedQuery("SELECT_ALL_USER").getResultList();
8 return result;
9 }
10 }
DAO
Introduction JEE 6 Seam 3 JSF Conclusion
JEE 6: Nouveaut´es de JEE 6 : Testabilit´e
Tester les applications JEE sans douleur
EntityManagerFactory (jboss-javaee-6)
EJBContainer (Glassfish embedded)
Aller plus loin dans les tests
Arquillian
Selenium (attention aux ID Html )
Introduction JEE 6 Seam 3 JSF Conclusion
Seam 3: Qu’est que Seam ?
Concurrent direct de Spring
Con¸cu par le cr´eateur d’Hibernate : Gavin King
Unifier le monde JEE (JPA / EJB / JSF)
Framework Stateful orient´e composants
Impl´ementation de r´ef´erence de la norme CDI
Acteurs majeurs de la norme JEE 6
Introduction JEE 6 Seam 3 JSF Conclusion
Seam 3: les cas d’utilisation ?
Les cas d’utilisations
Les backoffices : grˆace `a son orientation stateful
Middleware : pour sa facilit´e d’int´egration avec les standards JEE (JAX-WS,
JAX-RS,JPA,JMS,JASS,...)
Site `a tr`es haute disponibilit´e : grˆace aux EJB et aux serveurs d’applications.
Site avec des interfaces web tr`es riches : grˆace `a son framework Ajax, les
diff´erents composants et au Page Description Language
Site au domaine fonctionnel complexe : validation simplifi´ee , ´ev`enements
Maintenabilit´e facilit´e : AoX, CoC et transparence entre composants
Introduction JEE 6 Seam 3 JSF Conclusion
Seam 3: les cas d’utilisation ?
Les avantages
Productivit´e
Unification des briques applicatives
Puissante gestion des formulaires
De l’Ajax sans la contrainte de l’´ecriture de code JavaScript
M´ecanisme de templating tr`es puissant
Framework orient´e composants
Les inconv´enients
Peu de d´eveloppeur connaissent ce framework en France
Beaucoup de pr´ejuger sur Java EE
Il est n´ecessaire de comprendre ce que l’on fait
Le calcul d’une page JSF est un peu plus long
Peu de d´eveloppeurs savent concevoir des composants
Introduction JEE 6 Seam 3 JSF Conclusion
Seam 3: Les principaux modules
JBoss Weld : impl´ementation de
r´ef´erence de la norme JSR-299
Seam Persistence : JPA 2
Seam Faces : JSF2
Seam Validation : extension pour la
norme JSR-303
Seam Security : identification
Introduction JEE 6 Seam 3 JSF Conclusion
Seam 3: Contexts and Dependency Injection
Activation du contexte CDI
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://java.sun.com/xml/ns/javaee"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
5
6 </beans>
resources/META-INF/beans.xml
Le simple fait d’avoir un fichier beans.xml dans le META-INF d’un jar permet
d’ordonner `a Weld d’ajouter les Web beans dans son contexte.
Introduction JEE 6 Seam 3 JSF Conclusion
Seam 3: Contexts and Dependency Injection
D´eclarer un Web bean : @Named
Cot´e Java :
1 package org.jboss.seam.examples.actions
2 import javax.inject.Named;
3 import javax.enterprise.context.RequestScoped;
4
5 @RequestScoped
6 @Named
7 public class HelloTheWorld{
8
9 private String foobar = "hello foo bar !";
10
11 public String getFoobar(){
12 return foobar;
13 }
14
15 public void setFoobar(final String foobar){
16 this.foobar = foobar ;
17 }
18 }
Cot´e JSF :
1 <h:outputText value="#{helloTheWorld.foobar}"/>
Introduction JEE 6 Seam 3 JSF Conclusion
Seam 3: Contexts and Dependency Injection
L’injection de ressources
1 @Inject
2 @Resource("WEB-INF/beans.xml")
3 private URL beansXml;
4
5 @Inject
6 @Resource("WEB-INF/web.xml")
7 private InputStream webXml
8
9 @Inject
10 @Resource("META-INF/aws.properties")
11 private Properties awsProperties
Introduction JEE 6 Seam 3 JSF Conclusion
Seam 3: Les scopes
Les scopes des Web Beans
@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ˆeme
page
@RequestScoped : actif le temps d’une requˆete HTTP
@RenderScoped : actif uniquement durant le
chargement d’une page
@FlashScoped : micro scope destin´e aux notifications
Introduction JEE 6 Seam 3 JSF Conclusion
Seam 3: Ev´enements
Que sont les ´ev´enements ?
Introduction JEE 6 Seam 3 JSF Conclusion
Seam 3: Ev´enements
1 @Target({TYPE, METHOD, PARAMETER, FIELD})
2 @Retention(RUNTIME)
3 @Documented
4 @Qualifier
5 public @interface InitializeUser {
6 }
1 @Named
2 @Singleton
3 public class InitializeUsers{
4
5 @Inject
6 @InitializeProduct
7 private Event<ProductPojoEvent> initializeOsAndBrowserEvent;
8
9 public void initialize(@Observes @InitializeUser UserPojoEvent value) {
10 log.info(value.toString());
11 // process....
12 initializeOsAndBrowserEvent.fire(new ProductPojoEvent("initializeProduct"));
13 }
14 }
Introduction JEE 6 Seam 3 JSF Conclusion
Seam 3: Ev´enements
Exemple d’´ev´enements existants
@Before Avant le d´ebut du cycle de vie JSF
@After Apr`es le d´ebut du cycle de vie JSF
@RestoreView A la phase ”RestoreView”
@Initialized Quand l’application est initialis´ee
@LoggedInEvent Lorsque l’utilisateur s’est identifi´e
@PreLoggedOutEvent D´econnection d’un utilisateur
@DidActivate A l’activation d’une session
@WillPassivate A passivation d’une session
Introduction JEE 6 Seam 3 JSF Conclusion
Seam 3: Bean validator
JSR-303 : Bean validator
Permet la validation par annotations
Unification de la validation ( front et backend )
Diverses annotations pr´e-existantes (@Email,@Size,@Pattern)
Possibilit´e de cr´eer ses propres annotations pour la validation
Introduction JEE 6 Seam 3 JSF Conclusion
Seam 3: Restriction des vues
3 points pour la restriction des vues
Cr´eation des rˆoles (Administrateur, contributeurs, etc...)
Cr´eation de la validation des rˆoles
Cr´eation du Pages.java
Introduction JEE 6 Seam 3 JSF Conclusion
Seam 3: Restriction des vues
Cr´eation du Page.java
1 import org.jboss.seam.faces.event.PhaseIdType;
2 import org.jboss.seam.faces.security.AccessDeniedView;
3 import org.jboss.seam.faces.security.LoginView;
4 import org.jboss.seam.faces.security.RestrictAtPhase;
5 import org.jboss.seam.faces.view.config.ViewConfig;
6 import org.jboss.seam.faces.view.config.ViewPattern;
7 import org.youtestit.security.roles.Admin;
8
9 @ViewConfig
10 public interface Pages {
11
12 static enum PagesRestrictions {
13
14 @ViewPattern("/admin*")
15 @RestrictAtPhase(PhaseIdType.RENDER_RESPONSE)
16 @LoginView("/login")
17 @AccessDeniedView("/denied")
18 @Admin
19 ADMIN;
20
21 }
22
23 }
Introduction JEE 6 Seam 3 JSF Conclusion
PrettyFaces : URL Rewriting
Le pretty-config.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <pretty-config xmlns="http://ocpsoft.com/prettyfaces/2.0.4"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://ocpsoft.com/prettyfaces/2.0.4
5 http://ocpsoft.com/xml/ns/prettyfaces/ocpsoft-pretty-faces-2.0.4.xsd">
6
7 <!−−========[ PAGE ]=====================================−−>
8 <url-mapping id="login">
9 <pattern value="/login"></pattern>
10 <view-id>/login.xhtml</view-id>
11 </url-mapping>
12
13 </url-mapping>
14 </pretty-config>
Introduction JEE 6 Seam 3 JSF Conclusion
PrettyFaces : URL Rewriting
Contrˆoles avanc´es
1 <!−−========[ REWRITE ]======================================−−>
2 <rewrite match="^/([wd/-_]+)([.]{1}xhtml)$" substitute="/$1" redirect="301" />
3 <rewrite match="^/(app/[wd-_]+[.]{1}xhtml[?]path=)([wd/-_]+)$" substitute="/app/$2" redirect="301" />
4
5 <!−−========[ IDENTIFY ]===================================== −−>
6 <url-mapping id="logout">
7 <pattern value="/logout" />
8 <view-id>/login.xhtml</view-id>
9 <action>#{identity.logout}</action>
10 <action phaseId="RENDER_RESPONSE">#{redirect.redirectToHome}</action>
11 </url-mapping>
12
13
14 <!−−========[ APPLICATION SECTIONS ]========================= −−>
15 <url-mapping id="createDocument">
16 <pattern value="/app/create/#{ docType }#{ /.*/ path:currentDocument.path }" />
17 <view-id>#{redirect.createDocument}</view-id>
18 </url-mapping>
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2
Qu’est-ce que c’est ?
Framework de pr´esentation orient´e composants
Un ensemble de composants pour g´erer les vues
Permet d’effectuer diff´erents types de rendus (Email, RSS, PDF, ...)
Du XHTML
En opposition avec JSP (et JSTL)
Une interaction transparente avec les Web beans
Les composants et vues ont des ´etats
Des biblioth`eques tr`es riches en composants (Richfaces, Primefaces)
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: les nouveaut´es
Quoi de neuf dans JSF 2 ?
Page Description Language (Facelets)
Composants Composite simplifi´es (ax´es sur de la convention)
Une meilleure gestion des ressources
De l’ajax en natif
Gestion des param`etres GET
Actions en GET
Un ´enorme travail d’optimisation
La normalisation des travaux de JBoss (Seam 2.x)
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Cycle de vie
Le cycle de vie
Cycle de vie de JSF
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Page Description Language
Page HTML 5
1 <html>
2 <!−−============/ HEAD /============−−>
3 <head>
4 <title>project.name</title>
5 <meta charset="utf-8" />
6 <link rel="stylesheet" href="default.css" type="text/css" />
7 </head>
8
9 <!−−============/ BODY /============−−>
10 <body id="top">
11 <div id="main">
12 <!−− content −−>
13 </div>
14
15 <footer id="footer">
16 <!−− footer content −−>
17 </footer>
18 </div>
19 </body>
20 </html>
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Page Description Language
Templating Facelets
1 <f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
2 xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets"
3 dir="ltr" contentType="text/html" id="#{messages[’project.name’]}">
4
5 <html>
6 <ui:remove><!−−============/ HEAD /============−−></ui:remove>
7 <h:head>
8 <title>#{messages[’project.name’]}</title>
9 <meta charset="utf-8" />
10 <h:outputStylesheet name="default.css" library="stylesheet" />
11 </h:head>
12
13 <ui:remove><!−−============/ BODY /============−−></ui:remove>
14 <h:body id="top">
15 <div id="main">
16 <ui:insert name="body" />
17 </div>
18
19 <footer id="footer">
20 <ui:include src="footer.xhtml"/>
21 </footer>
22 </div>
23 </h:body>
24 </html>
25 </f:view>
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Page Description Language
H´eritage entre templates
H´eritage de templates Facelets
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Composants Composites
Cr´eation d’un composant composite
1 <ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
2 xmlns:h="http://java.sun.com/jsf/html"
3 xmlns:cc="http://java.sun.com/jsf/composite"
4 xmlns:f="http://java.sun.com/jsf/core">
5
6 <ui:remove><!−−========| INTERFACE |========−−></ui:remove>
7 <cc:interface>
8 <cc:attribute name="id" required="true"/>
9 <cc:attribute name="title" required="true"/>
10 </cc:interface>
11
12 <ui:remove><!−−========| IMPLEMENTATION |========−−></ui:remove>
13 <cc:implementation>
14 <div id="#{cc.attrs.id}" class="panel">
15 <div id="#{cc.attrs.id}_title">
16 <span id="#{cc.attrs.id}_title_label">#{cc.attrs.title}<span>
17 </div>
18 </div>
19
20 <div id="#{cc.attrs.id}_content" class="panel_content">
21 <ui:insert/>
22 </div>
23 </cc:implementation>
24 </ui:composition>
/resources/project/panel.xhtml
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Composants Composites
Utilisation d’un composant composite
1 <ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
2 xmlns:project="http://java.sun.com/jsf/composite/project"
3 template="layout/template.xhtml">
4
5 <ui:define name="body">
6
7 <project:panel id="myPanel" title="Hello my JSF component">
8 <p>
9 This content will be include in my custom component.
10 </p>
11 </project:panel>
12
13 </ui:define>
14 </ui:composition>
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Param`etre en GET
f:viewParam
http://localhost:8080/foobar/product.xhtml?productId=42
1 <f:metadata>
2 <f:viewParam name="productId" value="#{bean.productId}"/>
3 </f:metadata>
L’utilisation de PrettyFaces permet un contrˆole affin´e
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Ajax
f:ajax
1 <h:form id="form">
2 <h:panelGrid>
3 <h:inputText value="#{beanAction.text}" id="textDisplay">
4 <f:ajax event="keyup" render="text" listener="#{beanAction.doSomething}"/>
5 </h:inputText>
6 <h:outputText id="text" value="#{beanAction.text}" />
7 </h:panelGrid>
8 </h:form>
Le support de l’ajax est natif en JSF 2. Mais moins puissant que l’utilisation de
Richfaces ou de Primefaces
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Les biblioth`eques de composants
Les diff´erentes biblioth`eques
Richfaces : Soutenu par JBoss, tr`es utile pour l’Ajax et de la validation
(JSR-303)
Primefaces : L´eger, avec beaucoup de composants, et des diagrammes en
HTML 5
Icefaces : Graphiquement riche mais gourmande en ressources.
Apache MyFaces: Largement distanc´ee par Richfaces et Primefaces.
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Richefaces
Utilisation de la JSR-303 : rich:validator
1 <!−− .... −−>
2
3 <!−−// Email ++++++++++++++++++++++ −−>
4 <h:outputText value="Email" />
5 <h:inputText value="#{userBean.email}" id="email">
6 <rich:validator />
7 </h:inputText>
8 <rich:message for="email" />
9
10 <!−− .... −−>
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Richefaces
Ajax Simplifi´e : Ajax4JSF et JQuery
1 <h:form>
2 <a4j:commandButton id="updateActionButton"
3 action="#{beanAction.update}"
4 render="AjaxPanel"
5 value="update button" />
6
7 <a4j:commandLink id="updateActionLink"
8 action="#{beanAction.update}"
9 render="AjaxPanel"
10 value="update link" />
11 </h:form>
12
13 <a4j:outputPanel id="AjaxPanel" ajaxRendered="true">
14 <h:outputText value="#{userBean.recordStatus}" id="out"/>
15 </a4j:outputPanel>
16
17 <rich:jQuery selector="#gallery img" event="mouseover" query="jQuery(this).stop().animate({width:’180px’})" />
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Richefaces
Exemple de composants et de sites
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Richefaces
Exemple de composants et de sites
JBoss RHQ JOPR
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Richefaces
Exemple de composants et de sites
TinyPM
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Richefaces
Exemple de composants et de sites
SchoolManager.pl
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Primefaces
Les diagrammes avec Primefaces
1 <h:panelGrid columns="2">
2 <p:lineChart value="#{chartBean.linearModel}" legendPosition="e" zoom="true" animate="true"
3 title="Linear Chart" minY="0" maxY="10" style="width:400px;" widgetVar="chart"/>
4
5 <p:barChart id="basic" value="#{chartBean.categoryModel}" legendPosition="ne"
6 title="Basic Bar Chart" min="0" max="200" style="width:400px" animate="true"/>
7 </h:panelGrid>
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Primefaces
Exemple de composants et de sites
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Primefaces
Exemple de composants et de sites
Musific
Introduction JEE 6 Seam 3 JSF Conclusion
JSF 2: Primefaces
Exemple de composants et de sites
Kupon express
Introduction JEE 6 Seam 3 JSF Conclusion
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
Introduction JEE 6 Seam 3 JSF Conclusion
Conclusion : Questions ? ou Trolls ?

Mais conteúdo relacionado

Mais procurados

Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
Nathaniel Richand
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
Antoine Rey
 
J2eeintro
J2eeintroJ2eeintro
J2eeintro
medbmb
 

Mais procurados (20)

Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
J2ee
J2eeJ2ee
J2ee
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EE
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
Support cours j2_ee
Support cours j2_eeSupport cours j2_ee
Support cours j2_ee
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 
Presentation jsf2
Presentation jsf2Presentation jsf2
Presentation jsf2
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
 
J2 ee
J2 eeJ2 ee
J2 ee
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
Spring & SpringBatch FR
Spring & SpringBatch FRSpring & SpringBatch FR
Spring & SpringBatch FR
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
 
J2eeintro
J2eeintroJ2eeintro
J2eeintro
 
La persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateLa persistance des données : ORM et hibernate
La persistance des données : ORM et hibernate
 

Destaque

Catalogue everlife f:w 13 (1)
Catalogue everlife f:w 13 (1)Catalogue everlife f:w 13 (1)
Catalogue everlife f:w 13 (1)
everlifeFW13
 
Abc lesson 2 ppt
Abc lesson 2 pptAbc lesson 2 ppt
Abc lesson 2 ppt
Laura Jone
 
Env 6000 tn6 bek_pp
Env 6000 tn6 bek_ppEnv 6000 tn6 bek_pp
Env 6000 tn6 bek_pp
bekoffi1967
 
Tutorial de slideshare
Tutorial de slideshareTutorial de slideshare
Tutorial de slideshare
Diegomez92
 
Dialyses chair
Dialyses chairDialyses chair
Dialyses chair
sometltd
 
Manifeste en faveur des forts de plantation en france[1]
Manifeste en faveur des forts de plantation en france[1]Manifeste en faveur des forts de plantation en france[1]
Manifeste en faveur des forts de plantation en france[1]
NathalieBourmaud
 

Destaque (20)

Atelier zotero ! Outil de gestion bibliographique
Atelier zotero ! Outil de gestion bibliographiqueAtelier zotero ! Outil de gestion bibliographique
Atelier zotero ! Outil de gestion bibliographique
 
Historia religiosa
Historia religiosaHistoria religiosa
Historia religiosa
 
anyel stefania y tania ♥
anyel stefania y tania ♥anyel stefania y tania ♥
anyel stefania y tania ♥
 
Trabajo de grado
Trabajo de gradoTrabajo de grado
Trabajo de grado
 
Origine des communes
Origine des communesOrigine des communes
Origine des communes
 
Regard financier sur les départements de france
Regard financier sur les départements de franceRegard financier sur les départements de france
Regard financier sur les départements de france
 
Catalogue everlife f:w 13 (1)
Catalogue everlife f:w 13 (1)Catalogue everlife f:w 13 (1)
Catalogue everlife f:w 13 (1)
 
Plaquette ogec
Plaquette ogecPlaquette ogec
Plaquette ogec
 
Dossier comunicación para el éxito oct 2013
Dossier comunicación para el éxito oct 2013Dossier comunicación para el éxito oct 2013
Dossier comunicación para el éxito oct 2013
 
Abc lesson 2 ppt
Abc lesson 2 pptAbc lesson 2 ppt
Abc lesson 2 ppt
 
Presentación1
Presentación1Presentación1
Presentación1
 
Projet carrières
Projet carrièresProjet carrières
Projet carrières
 
Env 6000 tn6 bek_pp
Env 6000 tn6 bek_ppEnv 6000 tn6 bek_pp
Env 6000 tn6 bek_pp
 
Tutorial de slideshare
Tutorial de slideshareTutorial de slideshare
Tutorial de slideshare
 
Mi programa de formacion estacion 4
Mi programa de formacion estacion 4Mi programa de formacion estacion 4
Mi programa de formacion estacion 4
 
Exploracion
ExploracionExploracion
Exploracion
 
Musica en carolina del principe
Musica en carolina del principeMusica en carolina del principe
Musica en carolina del principe
 
Dialyses chair
Dialyses chairDialyses chair
Dialyses chair
 
Manifeste en faveur des forts de plantation en france[1]
Manifeste en faveur des forts de plantation en france[1]Manifeste en faveur des forts de plantation en france[1]
Manifeste en faveur des forts de plantation en france[1]
 
Fundación AMREF en SGSMad
Fundación AMREF en SGSMadFundación AMREF en SGSMad
Fundación AMREF en SGSMad
 

Semelhante a Et pourquoi pas JEE ?

Jee007 formation-jee-jboss-seam
Jee007 formation-jee-jboss-seamJee007 formation-jee-jboss-seam
Jee007 formation-jee-jboss-seam
CERTyou Formation
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
Mejdeddine Bouzouita
 
Audit Applications Javaee Solutions Linux Ow2
Audit Applications Javaee Solutions Linux Ow2Audit Applications Javaee Solutions Linux Ow2
Audit Applications Javaee Solutions Linux Ow2
Catherine Nuel
 
Audit Applications Javaee Solutions Linux Ow2
Audit Applications Javaee Solutions Linux Ow2Audit Applications Javaee Solutions Linux Ow2
Audit Applications Javaee Solutions Linux Ow2
OW2
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013
Xavier NOPRE
 

Semelhante a Et pourquoi pas JEE ? (20)

Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Jee007 formation-jee-jboss-seam
Jee007 formation-jee-jboss-seamJee007 formation-jee-jboss-seam
Jee007 formation-jee-jboss-seam
 
Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010
 
Aspect avec AspectJ
Aspect avec AspectJAspect avec AspectJ
Aspect avec AspectJ
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer Faces
 
Lbv Dev Meetup #2
 Lbv Dev Meetup #2 Lbv Dev Meetup #2
Lbv Dev Meetup #2
 
JEE_Chapter4_JSF_VF (1).pdf
JEE_Chapter4_JSF_VF (1).pdfJEE_Chapter4_JSF_VF (1).pdf
JEE_Chapter4_JSF_VF (1).pdf
 
2
22
2
 
Spring 3 en production
Spring 3 en productionSpring 3 en production
Spring 3 en production
 
Audit Applications Javaee Solutions Linux Ow2
Audit Applications Javaee Solutions Linux Ow2Audit Applications Javaee Solutions Linux Ow2
Audit Applications Javaee Solutions Linux Ow2
 
Audit Applications Javaee Solutions Linux Ow2
Audit Applications Javaee Solutions Linux Ow2Audit Applications Javaee Solutions Linux Ow2
Audit Applications Javaee Solutions Linux Ow2
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013
 
RefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsRefCard Tests sur tous les fronts
RefCard Tests sur tous les fronts
 
Octo Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-endOcto Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-end
 
Octo RefCard test front-end
Octo RefCard test front-endOcto RefCard test front-end
Octo RefCard test front-end
 
Drools et les moteurs de règles
Drools et les moteurs de règlesDrools et les moteurs de règles
Drools et les moteurs de règles
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
 
Présentation DevoxxFR 2015 sur GWT
Présentation DevoxxFR 2015 sur GWTPrésentation DevoxxFR 2015 sur GWT
Présentation DevoxxFR 2015 sur GWT
 

Mais de PALO IT

The Agile Transformation Hell - PALO IT BarCamp
The Agile Transformation Hell - PALO IT BarCampThe Agile Transformation Hell - PALO IT BarCamp
The Agile Transformation Hell - PALO IT BarCamp
PALO IT
 
Design & Develop Disruptive Software
Design & Develop Disruptive SoftwareDesign & Develop Disruptive Software
Design & Develop Disruptive Software
PALO IT
 
Growth Mindset & Psychological Safety - High Performing Teams in Software Dev...
Growth Mindset & Psychological Safety - High Performing Teams in Software Dev...Growth Mindset & Psychological Safety - High Performing Teams in Software Dev...
Growth Mindset & Psychological Safety - High Performing Teams in Software Dev...
PALO IT
 
Explorez l’Employee eXperience grâce au Design Thinking
Explorez l’Employee eXperience grâce au Design ThinkingExplorez l’Employee eXperience grâce au Design Thinking
Explorez l’Employee eXperience grâce au Design Thinking
PALO IT
 
Emerging Innovation: an exploratory journey into Design Thinking and why it m...
Emerging Innovation: an exploratory journey into Design Thinking and why it m...Emerging Innovation: an exploratory journey into Design Thinking and why it m...
Emerging Innovation: an exploratory journey into Design Thinking and why it m...
PALO IT
 
Spark Streaming
Spark StreamingSpark Streaming
Spark Streaming
PALO IT
 

Mais de PALO IT (20)

The Agile Transformation Hell - PALO IT BarCamp
The Agile Transformation Hell - PALO IT BarCampThe Agile Transformation Hell - PALO IT BarCamp
The Agile Transformation Hell - PALO IT BarCamp
 
Design & Develop Disruptive Software
Design & Develop Disruptive SoftwareDesign & Develop Disruptive Software
Design & Develop Disruptive Software
 
Growth Mindset & Psychological Safety - High Performing Teams in Software Dev...
Growth Mindset & Psychological Safety - High Performing Teams in Software Dev...Growth Mindset & Psychological Safety - High Performing Teams in Software Dev...
Growth Mindset & Psychological Safety - High Performing Teams in Software Dev...
 
BigText, compréhension et inférence avancées sur les textes
BigText, compréhension et inférence avancées sur les textesBigText, compréhension et inférence avancées sur les textes
BigText, compréhension et inférence avancées sur les textes
 
Explorez l’Employee eXperience grâce au Design Thinking
Explorez l’Employee eXperience grâce au Design ThinkingExplorez l’Employee eXperience grâce au Design Thinking
Explorez l’Employee eXperience grâce au Design Thinking
 
Self-Organisation & Transparency: Delegation Poker
Self-Organisation & Transparency: Delegation PokerSelf-Organisation & Transparency: Delegation Poker
Self-Organisation & Transparency: Delegation Poker
 
Framework de Digitalisation par les Organisations Exponentielles
Framework de Digitalisation par les Organisations ExponentiellesFramework de Digitalisation par les Organisations Exponentielles
Framework de Digitalisation par les Organisations Exponentielles
 
Project Managers, our World is Changing!
Project Managers, our World is Changing!Project Managers, our World is Changing!
Project Managers, our World is Changing!
 
The Future of User Experience
The Future of User ExperienceThe Future of User Experience
The Future of User Experience
 
Developers are from Mars, Designers are from Venus
Developers are from Mars, Designers are from VenusDevelopers are from Mars, Designers are from Venus
Developers are from Mars, Designers are from Venus
 
Self-Organization in Agile & Digital Transformation
Self-Organization in Agile & Digital Transformation Self-Organization in Agile & Digital Transformation
Self-Organization in Agile & Digital Transformation
 
Blockchain présenté aux Développeurs
Blockchain présenté aux Développeurs Blockchain présenté aux Développeurs
Blockchain présenté aux Développeurs
 
Pourquoi est-ce si difficile de concevoir une API ?
Pourquoi est-ce si difficile de concevoir une API ?Pourquoi est-ce si difficile de concevoir une API ?
Pourquoi est-ce si difficile de concevoir une API ?
 
Emerging Innovation: an exploratory journey into Design Thinking and why it m...
Emerging Innovation: an exploratory journey into Design Thinking and why it m...Emerging Innovation: an exploratory journey into Design Thinking and why it m...
Emerging Innovation: an exploratory journey into Design Thinking and why it m...
 
Données animées
Données animéesDonnées animées
Données animées
 
Spark Streaming
Spark StreamingSpark Streaming
Spark Streaming
 
Big Data ou comment retrouver une aiguille dans une botte de foin
Big Data ou comment retrouver une aiguille dans une botte de foinBig Data ou comment retrouver une aiguille dans une botte de foin
Big Data ou comment retrouver une aiguille dans une botte de foin
 
Sarah : l’Internet des Objets au service de la maison connectée
Sarah : l’Internet des Objets au service de la maison connectée Sarah : l’Internet des Objets au service de la maison connectée
Sarah : l’Internet des Objets au service de la maison connectée
 
Product Owner : Gardien du Cap
Product Owner : Gardien du CapProduct Owner : Gardien du Cap
Product Owner : Gardien du Cap
 
L'Ergonomie pour les Nuls
L'Ergonomie pour les NulsL'Ergonomie pour les Nuls
L'Ergonomie pour les Nuls
 

Et pourquoi pas JEE ?

  • 1. Et pourquoi pas JEE ? Jeudi 25 Octobre 2012 Patrick Guillerm
  • 2. Introduction JEE 6 Seam 3 JSF Conclusion 1 Introduction 2 JEE 6 3 Seam 3 4 JSF 5 Conclusion
  • 3. Introduction JEE 6 Seam 3 JSF Conclusion Pr´esentation Patrick Guillerm, d´eveloppeur JEE Backoffice de l’Assembl´ee des chambres Fran¸caises 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) YouTestIt (JEE6, Seam 3, JSF2)
  • 4. Introduction JEE 6 Seam 3 JSF Conclusion Les objectifs Quels objectifs pour ce Barcamp ? Casser les id´ees re¸cues sur JEE Exposer les avanc´ees technologiques de cette norme Montrer qu’il existe autre chose que Spring Vous r´econcilier avec les EJB et JSF Mettre en avant les avantages et inconv´enients.
  • 5. Introduction JEE 6 Seam 3 JSF Conclusion JEE 6: Qu’est ce que le JEE Java Entreprise Edition Ensemble de normes ( JSR ) Des API ( javax.* ) La majorit´e des technologies Web en java Que doit contenir un projet pour ˆetre un projet JEE ? Des EJB Un conteneur de servlet + un conteneur d’EJB
  • 6. Introduction JEE 6 Seam 3 JSF Conclusion JEE 6: Les origines du JEE JEE historique Timeline repr´esentant les sorties de JavaEE ainsi que des principaux frameworks
  • 7. Introduction JEE 6 Seam 3 JSF Conclusion JEE 6: Quelles diff´erences entre JEE5 et JEE6? Evolution entre JEE5 et JEE6 Simplification des EJB Normalisation de l’injection de d´ependances Davantage de convention Meilleure testabilit´e (Tests unitaire, Arquillian ) Possibilit´e d’ˆetre utilis´e en Java SE Normalisation de la configuration de JPA Les impl´ementations de r´ef´erences Normes mises en obsol`ete (Entity CMP 2.x, JAX-RCP, ...)
  • 8. Introduction JEE 6 Seam 3 JSF Conclusion JEE 6: Nouveaut´es de JEE 6 Les 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 ...
  • 9. Introduction JEE 6 Seam 3 JSF Conclusion JEE 6: EAR ou WAR ? Evolution entre JEE5 et JEE6 Architecture d’un EAR Architecture d’un WAR
  • 10. Introduction JEE 6 Seam 3 JSF Conclusion JEE 6: Nouveaut´es de JEE 6 : JPA 2 Les principales nouvelles normes Meilleure gestion des collections (@Element-Collection) Les Map (@MapKeyColumn) Supression des liaisons orphelines (OneToMany et OneToOne) Criterias Lock pessimiste Order column (tris au moment de l’´ecriture) Des @Embedded dans des @Embedded Standardisation du fichier persistance.xml S´eparation de la norme JPA et des EJB
  • 11. Introduction JEE 6 Seam 3 JSF Conclusion JEE 6: Nouveaut´es de JEE 6 : JPA 2 Les Criteria 1 @Named 2 @ViewScoped 3 public class FoobarAction implements Serializable { 4 5 private static final long serialVersionUID = 1679635671732315892L; 6 7 @PersistenceContext 8 private EntityManager entityManager; 9 10 public Foobar findFoobar(final String name) { 11 Foobar result = null; 12 13 CriteriaBuilder criteria = entityManager.getCriteriaBuilder(); 14 CriteriaQuery<Foobar> criteriaQuery = criteria.createQuery(Foobar.class); 15 16 Root<Foobar> foobars = criteriaQuery.from(Foobar.class); 17 criteriaQuery.where(criteria.equal(Foobar.<String> get("name"), name)); 18 19 result = entityManager.createQuery(criteriaQuery).getSingleResult(); 20 21 return result; 22 } 23 }
  • 12. Introduction JEE 6 Seam 3 JSF Conclusion JEE 6: Nouveaut´es de JEE 6 : JPA 2 EnityManager exemple : NamedNativeQuery 1 @Entity 2 @NamedNativeQuery(name="SELECT_ALL_USER",query="select * from Foobar",resultClass=Foobar.class) 3 public class Foobar implements Serializable { 4 // Entity ... 5 } Interface listant les Named Query 1 @ConversationScoped @Named 2 public class FoobarAction { 3 @PersistenceContext 4 private EntityManager entityManager; 5 6 public List<Foobar> findAllFoobar() { 7 List<Foobar> result = entityManager.createNamedQuery("SELECT_ALL_USER").getResultList(); 8 return result; 9 } 10 } DAO
  • 13. Introduction JEE 6 Seam 3 JSF Conclusion JEE 6: Nouveaut´es de JEE 6 : Testabilit´e Tester les applications JEE sans douleur EntityManagerFactory (jboss-javaee-6) EJBContainer (Glassfish embedded) Aller plus loin dans les tests Arquillian Selenium (attention aux ID Html )
  • 14. Introduction JEE 6 Seam 3 JSF Conclusion Seam 3: Qu’est que Seam ? Concurrent direct de Spring Con¸cu par le cr´eateur d’Hibernate : Gavin King Unifier le monde JEE (JPA / EJB / JSF) Framework Stateful orient´e composants Impl´ementation de r´ef´erence de la norme CDI Acteurs majeurs de la norme JEE 6
  • 15. Introduction JEE 6 Seam 3 JSF Conclusion Seam 3: les cas d’utilisation ? Les cas d’utilisations Les backoffices : grˆace `a son orientation stateful Middleware : pour sa facilit´e d’int´egration avec les standards JEE (JAX-WS, JAX-RS,JPA,JMS,JASS,...) Site `a tr`es haute disponibilit´e : grˆace aux EJB et aux serveurs d’applications. Site avec des interfaces web tr`es riches : grˆace `a son framework Ajax, les diff´erents composants et au Page Description Language Site au domaine fonctionnel complexe : validation simplifi´ee , ´ev`enements Maintenabilit´e facilit´e : AoX, CoC et transparence entre composants
  • 16. Introduction JEE 6 Seam 3 JSF Conclusion Seam 3: les cas d’utilisation ? Les avantages Productivit´e Unification des briques applicatives Puissante gestion des formulaires De l’Ajax sans la contrainte de l’´ecriture de code JavaScript M´ecanisme de templating tr`es puissant Framework orient´e composants Les inconv´enients Peu de d´eveloppeur connaissent ce framework en France Beaucoup de pr´ejuger sur Java EE Il est n´ecessaire de comprendre ce que l’on fait Le calcul d’une page JSF est un peu plus long Peu de d´eveloppeurs savent concevoir des composants
  • 17. Introduction JEE 6 Seam 3 JSF Conclusion Seam 3: Les principaux modules JBoss Weld : impl´ementation de r´ef´erence de la norme JSR-299 Seam Persistence : JPA 2 Seam Faces : JSF2 Seam Validation : extension pour la norme JSR-303 Seam Security : identification
  • 18. Introduction JEE 6 Seam 3 JSF Conclusion Seam 3: Contexts and Dependency Injection Activation du contexte CDI 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> 5 6 </beans> resources/META-INF/beans.xml Le simple fait d’avoir un fichier beans.xml dans le META-INF d’un jar permet d’ordonner `a Weld d’ajouter les Web beans dans son contexte.
  • 19. Introduction JEE 6 Seam 3 JSF Conclusion Seam 3: Contexts and Dependency Injection D´eclarer un Web bean : @Named Cot´e Java : 1 package org.jboss.seam.examples.actions 2 import javax.inject.Named; 3 import javax.enterprise.context.RequestScoped; 4 5 @RequestScoped 6 @Named 7 public class HelloTheWorld{ 8 9 private String foobar = "hello foo bar !"; 10 11 public String getFoobar(){ 12 return foobar; 13 } 14 15 public void setFoobar(final String foobar){ 16 this.foobar = foobar ; 17 } 18 } Cot´e JSF : 1 <h:outputText value="#{helloTheWorld.foobar}"/>
  • 20. Introduction JEE 6 Seam 3 JSF Conclusion Seam 3: Contexts and Dependency Injection L’injection de ressources 1 @Inject 2 @Resource("WEB-INF/beans.xml") 3 private URL beansXml; 4 5 @Inject 6 @Resource("WEB-INF/web.xml") 7 private InputStream webXml 8 9 @Inject 10 @Resource("META-INF/aws.properties") 11 private Properties awsProperties
  • 21. Introduction JEE 6 Seam 3 JSF Conclusion Seam 3: Les scopes Les scopes des Web Beans @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ˆeme page @RequestScoped : actif le temps d’une requˆete HTTP @RenderScoped : actif uniquement durant le chargement d’une page @FlashScoped : micro scope destin´e aux notifications
  • 22. Introduction JEE 6 Seam 3 JSF Conclusion Seam 3: Ev´enements Que sont les ´ev´enements ?
  • 23. Introduction JEE 6 Seam 3 JSF Conclusion Seam 3: Ev´enements 1 @Target({TYPE, METHOD, PARAMETER, FIELD}) 2 @Retention(RUNTIME) 3 @Documented 4 @Qualifier 5 public @interface InitializeUser { 6 } 1 @Named 2 @Singleton 3 public class InitializeUsers{ 4 5 @Inject 6 @InitializeProduct 7 private Event<ProductPojoEvent> initializeOsAndBrowserEvent; 8 9 public void initialize(@Observes @InitializeUser UserPojoEvent value) { 10 log.info(value.toString()); 11 // process.... 12 initializeOsAndBrowserEvent.fire(new ProductPojoEvent("initializeProduct")); 13 } 14 }
  • 24. Introduction JEE 6 Seam 3 JSF Conclusion Seam 3: Ev´enements Exemple d’´ev´enements existants @Before Avant le d´ebut du cycle de vie JSF @After Apr`es le d´ebut du cycle de vie JSF @RestoreView A la phase ”RestoreView” @Initialized Quand l’application est initialis´ee @LoggedInEvent Lorsque l’utilisateur s’est identifi´e @PreLoggedOutEvent D´econnection d’un utilisateur @DidActivate A l’activation d’une session @WillPassivate A passivation d’une session
  • 25. Introduction JEE 6 Seam 3 JSF Conclusion Seam 3: Bean validator JSR-303 : Bean validator Permet la validation par annotations Unification de la validation ( front et backend ) Diverses annotations pr´e-existantes (@Email,@Size,@Pattern) Possibilit´e de cr´eer ses propres annotations pour la validation
  • 26. Introduction JEE 6 Seam 3 JSF Conclusion Seam 3: Restriction des vues 3 points pour la restriction des vues Cr´eation des rˆoles (Administrateur, contributeurs, etc...) Cr´eation de la validation des rˆoles Cr´eation du Pages.java
  • 27. Introduction JEE 6 Seam 3 JSF Conclusion Seam 3: Restriction des vues Cr´eation du Page.java 1 import org.jboss.seam.faces.event.PhaseIdType; 2 import org.jboss.seam.faces.security.AccessDeniedView; 3 import org.jboss.seam.faces.security.LoginView; 4 import org.jboss.seam.faces.security.RestrictAtPhase; 5 import org.jboss.seam.faces.view.config.ViewConfig; 6 import org.jboss.seam.faces.view.config.ViewPattern; 7 import org.youtestit.security.roles.Admin; 8 9 @ViewConfig 10 public interface Pages { 11 12 static enum PagesRestrictions { 13 14 @ViewPattern("/admin*") 15 @RestrictAtPhase(PhaseIdType.RENDER_RESPONSE) 16 @LoginView("/login") 17 @AccessDeniedView("/denied") 18 @Admin 19 ADMIN; 20 21 } 22 23 }
  • 28. Introduction JEE 6 Seam 3 JSF Conclusion PrettyFaces : URL Rewriting Le pretty-config.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <pretty-config xmlns="http://ocpsoft.com/prettyfaces/2.0.4" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://ocpsoft.com/prettyfaces/2.0.4 5 http://ocpsoft.com/xml/ns/prettyfaces/ocpsoft-pretty-faces-2.0.4.xsd"> 6 7 <!−−========[ PAGE ]=====================================−−> 8 <url-mapping id="login"> 9 <pattern value="/login"></pattern> 10 <view-id>/login.xhtml</view-id> 11 </url-mapping> 12 13 </url-mapping> 14 </pretty-config>
  • 29. Introduction JEE 6 Seam 3 JSF Conclusion PrettyFaces : URL Rewriting Contrˆoles avanc´es 1 <!−−========[ REWRITE ]======================================−−> 2 <rewrite match="^/([wd/-_]+)([.]{1}xhtml)$" substitute="/$1" redirect="301" /> 3 <rewrite match="^/(app/[wd-_]+[.]{1}xhtml[?]path=)([wd/-_]+)$" substitute="/app/$2" redirect="301" /> 4 5 <!−−========[ IDENTIFY ]===================================== −−> 6 <url-mapping id="logout"> 7 <pattern value="/logout" /> 8 <view-id>/login.xhtml</view-id> 9 <action>#{identity.logout}</action> 10 <action phaseId="RENDER_RESPONSE">#{redirect.redirectToHome}</action> 11 </url-mapping> 12 13 14 <!−−========[ APPLICATION SECTIONS ]========================= −−> 15 <url-mapping id="createDocument"> 16 <pattern value="/app/create/#{ docType }#{ /.*/ path:currentDocument.path }" /> 17 <view-id>#{redirect.createDocument}</view-id> 18 </url-mapping>
  • 30. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2 Qu’est-ce que c’est ? Framework de pr´esentation orient´e composants Un ensemble de composants pour g´erer les vues Permet d’effectuer diff´erents types de rendus (Email, RSS, PDF, ...) Du XHTML En opposition avec JSP (et JSTL) Une interaction transparente avec les Web beans Les composants et vues ont des ´etats Des biblioth`eques tr`es riches en composants (Richfaces, Primefaces)
  • 31. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: les nouveaut´es Quoi de neuf dans JSF 2 ? Page Description Language (Facelets) Composants Composite simplifi´es (ax´es sur de la convention) Une meilleure gestion des ressources De l’ajax en natif Gestion des param`etres GET Actions en GET Un ´enorme travail d’optimisation La normalisation des travaux de JBoss (Seam 2.x)
  • 32. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Cycle de vie Le cycle de vie Cycle de vie de JSF
  • 33. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Page Description Language Page HTML 5 1 <html> 2 <!−−============/ HEAD /============−−> 3 <head> 4 <title>project.name</title> 5 <meta charset="utf-8" /> 6 <link rel="stylesheet" href="default.css" type="text/css" /> 7 </head> 8 9 <!−−============/ BODY /============−−> 10 <body id="top"> 11 <div id="main"> 12 <!−− content −−> 13 </div> 14 15 <footer id="footer"> 16 <!−− footer content −−> 17 </footer> 18 </div> 19 </body> 20 </html>
  • 34. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Page Description Language Templating Facelets 1 <f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" 2 xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" 3 dir="ltr" contentType="text/html" id="#{messages[’project.name’]}"> 4 5 <html> 6 <ui:remove><!−−============/ HEAD /============−−></ui:remove> 7 <h:head> 8 <title>#{messages[’project.name’]}</title> 9 <meta charset="utf-8" /> 10 <h:outputStylesheet name="default.css" library="stylesheet" /> 11 </h:head> 12 13 <ui:remove><!−−============/ BODY /============−−></ui:remove> 14 <h:body id="top"> 15 <div id="main"> 16 <ui:insert name="body" /> 17 </div> 18 19 <footer id="footer"> 20 <ui:include src="footer.xhtml"/> 21 </footer> 22 </div> 23 </h:body> 24 </html> 25 </f:view>
  • 35. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Page Description Language H´eritage entre templates H´eritage de templates Facelets
  • 36. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Composants Composites Cr´eation d’un composant composite 1 <ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" 2 xmlns:h="http://java.sun.com/jsf/html" 3 xmlns:cc="http://java.sun.com/jsf/composite" 4 xmlns:f="http://java.sun.com/jsf/core"> 5 6 <ui:remove><!−−========| INTERFACE |========−−></ui:remove> 7 <cc:interface> 8 <cc:attribute name="id" required="true"/> 9 <cc:attribute name="title" required="true"/> 10 </cc:interface> 11 12 <ui:remove><!−−========| IMPLEMENTATION |========−−></ui:remove> 13 <cc:implementation> 14 <div id="#{cc.attrs.id}" class="panel"> 15 <div id="#{cc.attrs.id}_title"> 16 <span id="#{cc.attrs.id}_title_label">#{cc.attrs.title}<span> 17 </div> 18 </div> 19 20 <div id="#{cc.attrs.id}_content" class="panel_content"> 21 <ui:insert/> 22 </div> 23 </cc:implementation> 24 </ui:composition> /resources/project/panel.xhtml
  • 37. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Composants Composites Utilisation d’un composant composite 1 <ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" 2 xmlns:project="http://java.sun.com/jsf/composite/project" 3 template="layout/template.xhtml"> 4 5 <ui:define name="body"> 6 7 <project:panel id="myPanel" title="Hello my JSF component"> 8 <p> 9 This content will be include in my custom component. 10 </p> 11 </project:panel> 12 13 </ui:define> 14 </ui:composition>
  • 38. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Param`etre en GET f:viewParam http://localhost:8080/foobar/product.xhtml?productId=42 1 <f:metadata> 2 <f:viewParam name="productId" value="#{bean.productId}"/> 3 </f:metadata> L’utilisation de PrettyFaces permet un contrˆole affin´e
  • 39. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Ajax f:ajax 1 <h:form id="form"> 2 <h:panelGrid> 3 <h:inputText value="#{beanAction.text}" id="textDisplay"> 4 <f:ajax event="keyup" render="text" listener="#{beanAction.doSomething}"/> 5 </h:inputText> 6 <h:outputText id="text" value="#{beanAction.text}" /> 7 </h:panelGrid> 8 </h:form> Le support de l’ajax est natif en JSF 2. Mais moins puissant que l’utilisation de Richfaces ou de Primefaces
  • 40. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Les biblioth`eques de composants Les diff´erentes biblioth`eques Richfaces : Soutenu par JBoss, tr`es utile pour l’Ajax et de la validation (JSR-303) Primefaces : L´eger, avec beaucoup de composants, et des diagrammes en HTML 5 Icefaces : Graphiquement riche mais gourmande en ressources. Apache MyFaces: Largement distanc´ee par Richfaces et Primefaces.
  • 41. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Richefaces Utilisation de la JSR-303 : rich:validator 1 <!−− .... −−> 2 3 <!−−// Email ++++++++++++++++++++++ −−> 4 <h:outputText value="Email" /> 5 <h:inputText value="#{userBean.email}" id="email"> 6 <rich:validator /> 7 </h:inputText> 8 <rich:message for="email" /> 9 10 <!−− .... −−>
  • 42. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Richefaces Ajax Simplifi´e : Ajax4JSF et JQuery 1 <h:form> 2 <a4j:commandButton id="updateActionButton" 3 action="#{beanAction.update}" 4 render="AjaxPanel" 5 value="update button" /> 6 7 <a4j:commandLink id="updateActionLink" 8 action="#{beanAction.update}" 9 render="AjaxPanel" 10 value="update link" /> 11 </h:form> 12 13 <a4j:outputPanel id="AjaxPanel" ajaxRendered="true"> 14 <h:outputText value="#{userBean.recordStatus}" id="out"/> 15 </a4j:outputPanel> 16 17 <rich:jQuery selector="#gallery img" event="mouseover" query="jQuery(this).stop().animate({width:’180px’})" />
  • 43. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Richefaces Exemple de composants et de sites
  • 44. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Richefaces Exemple de composants et de sites JBoss RHQ JOPR
  • 45. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Richefaces Exemple de composants et de sites TinyPM
  • 46. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Richefaces Exemple de composants et de sites SchoolManager.pl
  • 47. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Primefaces Les diagrammes avec Primefaces 1 <h:panelGrid columns="2"> 2 <p:lineChart value="#{chartBean.linearModel}" legendPosition="e" zoom="true" animate="true" 3 title="Linear Chart" minY="0" maxY="10" style="width:400px;" widgetVar="chart"/> 4 5 <p:barChart id="basic" value="#{chartBean.categoryModel}" legendPosition="ne" 6 title="Basic Bar Chart" min="0" max="200" style="width:400px" animate="true"/> 7 </h:panelGrid>
  • 48. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Primefaces Exemple de composants et de sites
  • 49. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Primefaces Exemple de composants et de sites Musific
  • 50. Introduction JEE 6 Seam 3 JSF Conclusion JSF 2: Primefaces Exemple de composants et de sites Kupon express
  • 51. Introduction JEE 6 Seam 3 JSF Conclusion 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
  • 52. Introduction JEE 6 Seam 3 JSF Conclusion Conclusion : Questions ? ou Trolls ?