1
INTRODUCTION


       PRÉSENTATION DU FRAMEWORK


          MODÈLE COMPOSANT SEAM



          CONCEPTS TECHNIQUES DU FRAMEWORK



       CONCLUSION



2
3
 Le framework JBoss Seam est un framework Open Source
               à l'initiative de Gavin King
          (fondateur du framework Hibernate).

            Premiere version:seam 1.0 sortie en juin 2006




4
Un framework destiné à la simplification du développement
            des applications web complexes.

                Un framework basé sur des concepts de la
                        spécification JAVA EE 5.

                   Un framework fournissant un modèle
                 de composant, une API et des annotations.

5
Deux composants d’architecture clefs pour la création
      des applications web

                      Couche présentation

                              Modèle de composant(processus
                                   métier et persistance)


6
7
8
8
Intégration jsf,ejb3.0

    JBoss EL
            Expressions paramétrées
             <h:commandButton
               action="#{universite.trouverClasse(filiere, niveau)}"
               value=“classe"/>



9
Outillage


            Seam-gen



                       Jboss tools


10
11
11
Demo




            12
12
Contextes aplicatifs
          Contexte stateless @scope(STATELESS)
         Contexte event @scope(EVENT)
         Contexte page @scope(PAGE)
         Contexte session @scope(SESSION)
          Contexte Business Process @scope(Business_Process)
         Contexte conversation @scope(CONVERSATION)
         Contexte application @scope(APPLICATION)
13
Gestion des événements assynchrones avec seam
     EVENT:
        Déclencher l’événement dans le corps de la méthode




       Déclencher l’événement sur l’appel d’une méthode
                        @RaiseEvent("postAdded ")

14                 @RaiseAsynchronousEvent(« postAdded »)
Gestion des événements assynchrones avec seam

     Observer:


                    @Observer("postAdded ")




15
Gestion des événements assynchrones avec seam

               <components>
               <event type="PostAdded">
               <action
               execute="#{PostAddedListener.info
               rm}"/>
               </event>
                </components>

16
Gestion de la conversation

           Manière implicite:composant type ejb statefull


              Manière explicite:des javabeans declarés dans
                         le contexte conversation



17
Gestion de la conversation




18
Gestion de la conversation


                       Demo




19
Gestion de la conversation
      Nested conversation
                  Conversation mère



                                 Sous_conversation1



                                                Sous_conversation1.2



                                 Sous_conversation2

20
Principe de l’injection et de la bijection
 @Name("connection")
 @Scope(ScopeType.SESSION)                                            @Out
 public class ConnectionBean
    implements Connection {                    @In

 String id;                    <component name="entityManager"
 String password;              scope="session"
 @In("entityManager")                auto-create="true"
 EntityManager em;             class="org.jboss.seam.core.ManagedPersistenceC
                               ontext">
 …
                                    <property
 }                             name="persistenceUnitJndiName">java:/odaceEn
                               tityManagerFactory</property>
                                                                         21
21                                 </component>
Principe de l’injection et de la bijection
     @Stateless
     @Name("useraction")                                 @Out

     public class UserAction implements UserIt {

     @In @Out private User user;                   @In
     @Out private List userList;

     @PersistenceContext private EntityManager
        em;

     public String addAndDisplay() {
      user = new User ();
      userList = em.createQuery("From User u
     order by u.name").getResultList();
      return null;
     }

22
Page flow
                                                                         Process shopping
     <pageflow-definition […] name="shopping">
     <start-state name="start">
     <transition to="browse"/>                                                            browse
     </start-state>
     <page name="browse" view-id="/browse.xhtml" redirect="true">
     <transition name="browse" to="browse"/>
     <transition name="checkout" to="checkout"/>                               Browse.xhtml
     </page>
     <page name="checkout" view-id="/checkout.xhtml" redirect="true">
     <transition name="checkout" to="checkout"/>
                                                                        checkout         checkout
     <transition name="complete" to="complete"/>
     </page>
     <page name="complete" view-id="/complete.xhtml" redirect="true">
     <end-conversation />                                                     Checkout.xhtml
     </page>
     </pageflow-definition>
                                                                        complete
     Pageflow.jpdl.xml
     @Begin(join=true, processDefinition="shopping")
     public String doSearch() {                                               Complete.xhtml
     …
23   }
Authentification
     Deux composants Seam pour l’authentification:

                      Identity contient les méthodes pour
                   l'authentification et la connaissance l'état de
                         l'utilisateur (loggé ou non etc ...)


                        Credentials contient les données
                                de l'utilisateur.
24
Démo Authentification




25
Integration ajax 1/2

       Librairies JSF
             Ajax4JSF : extension Ajax des composants
             JSF de base
                  RichFaces et IceFaces
             (composants graphiques riches)




26
Integration ajax 2/2

     Seam remoting
               Appel de méthode distante comme si elle
                            était locale.
                             @WebRemote

       mycomponent=seam.compenent.getinstance(‘’mycomponent’’)



27
Integration avec seam framework
JBOSS server =>Weblogic, WebSphere,OC4J,Tomcat,Glassfish
JSF =>Wicket, Tapestry, GWT, ou Flex

                   EJB =>POJO, Composant Spring
                   JExcelApi
                   YARFRAW
                   iText

28
                   Jboss-Seam-Mail
CONCLUSION


     Seam a apporté une vraie valeur ajoutée à
     notre projet JSF/EJB3/JPA et nous a
     permis de gagner en productivité.




29
*
     Merci pour votre attention

                 *




30

Jboss Seam

  • 1.
  • 2.
    INTRODUCTION PRÉSENTATION DU FRAMEWORK MODÈLE COMPOSANT SEAM CONCEPTS TECHNIQUES DU FRAMEWORK CONCLUSION 2
  • 3.
  • 4.
     Le frameworkJBoss Seam est un framework Open Source à l'initiative de Gavin King (fondateur du framework Hibernate). Premiere version:seam 1.0 sortie en juin 2006 4
  • 5.
    Un framework destinéà la simplification du développement des applications web complexes. Un framework basé sur des concepts de la spécification JAVA EE 5.  Un framework fournissant un modèle de composant, une API et des annotations. 5
  • 6.
    Deux composants d’architectureclefs pour la création des applications web Couche présentation Modèle de composant(processus métier et persistance) 6
  • 7.
  • 8.
  • 9.
    Intégration jsf,ejb3.0 JBoss EL Expressions paramétrées <h:commandButton action="#{universite.trouverClasse(filiere, niveau)}" value=“classe"/> 9
  • 10.
    Outillage Seam-gen Jboss tools 10
  • 11.
  • 12.
    Demo 12 12
  • 13.
    Contextes aplicatifs Contexte stateless @scope(STATELESS) Contexte event @scope(EVENT) Contexte page @scope(PAGE) Contexte session @scope(SESSION)  Contexte Business Process @scope(Business_Process) Contexte conversation @scope(CONVERSATION) Contexte application @scope(APPLICATION) 13
  • 14.
    Gestion des événementsassynchrones avec seam EVENT: Déclencher l’événement dans le corps de la méthode Déclencher l’événement sur l’appel d’une méthode @RaiseEvent("postAdded ") 14 @RaiseAsynchronousEvent(« postAdded »)
  • 15.
    Gestion des événementsassynchrones avec seam Observer: @Observer("postAdded ") 15
  • 16.
    Gestion des événementsassynchrones avec seam <components> <event type="PostAdded"> <action execute="#{PostAddedListener.info rm}"/> </event> </components> 16
  • 17.
    Gestion de laconversation Manière implicite:composant type ejb statefull Manière explicite:des javabeans declarés dans le contexte conversation 17
  • 18.
    Gestion de laconversation 18
  • 19.
    Gestion de laconversation Demo 19
  • 20.
    Gestion de laconversation Nested conversation Conversation mère Sous_conversation1 Sous_conversation1.2 Sous_conversation2 20
  • 21.
    Principe de l’injectionet de la bijection @Name("connection") @Scope(ScopeType.SESSION) @Out public class ConnectionBean implements Connection { @In String id; <component name="entityManager" String password; scope="session" @In("entityManager") auto-create="true" EntityManager em; class="org.jboss.seam.core.ManagedPersistenceC ontext"> … <property } name="persistenceUnitJndiName">java:/odaceEn tityManagerFactory</property> 21 21 </component>
  • 22.
    Principe de l’injectionet de la bijection @Stateless @Name("useraction") @Out public class UserAction implements UserIt { @In @Out private User user; @In @Out private List userList; @PersistenceContext private EntityManager em; public String addAndDisplay() { user = new User (); userList = em.createQuery("From User u order by u.name").getResultList(); return null; } 22
  • 23.
    Page flow Process shopping <pageflow-definition […] name="shopping"> <start-state name="start"> <transition to="browse"/> browse </start-state> <page name="browse" view-id="/browse.xhtml" redirect="true"> <transition name="browse" to="browse"/> <transition name="checkout" to="checkout"/> Browse.xhtml </page> <page name="checkout" view-id="/checkout.xhtml" redirect="true"> <transition name="checkout" to="checkout"/> checkout checkout <transition name="complete" to="complete"/> </page> <page name="complete" view-id="/complete.xhtml" redirect="true"> <end-conversation /> Checkout.xhtml </page> </pageflow-definition> complete Pageflow.jpdl.xml @Begin(join=true, processDefinition="shopping") public String doSearch() { Complete.xhtml … 23 }
  • 24.
    Authentification Deux composants Seam pour l’authentification: Identity contient les méthodes pour l'authentification et la connaissance l'état de l'utilisateur (loggé ou non etc ...) Credentials contient les données de l'utilisateur. 24
  • 25.
  • 26.
    Integration ajax 1/2 Librairies JSF Ajax4JSF : extension Ajax des composants JSF de base RichFaces et IceFaces (composants graphiques riches) 26
  • 27.
    Integration ajax 2/2 Seam remoting Appel de méthode distante comme si elle était locale. @WebRemote mycomponent=seam.compenent.getinstance(‘’mycomponent’’) 27
  • 28.
    Integration avec seamframework JBOSS server =>Weblogic, WebSphere,OC4J,Tomcat,Glassfish JSF =>Wicket, Tapestry, GWT, ou Flex EJB =>POJO, Composant Spring JExcelApi YARFRAW iText 28 Jboss-Seam-Mail
  • 29.
    CONCLUSION Seam a apporté une vraie valeur ajoutée à notre projet JSF/EJB3/JPA et nous a permis de gagner en productivité. 29
  • 30.
    * Merci pour votre attention * 30