SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Downloaden Sie, um offline zu lesen
Java EE 5
Enterprise JavaBeansTM 3.0

Alexis Moussine-Pouchkine
Sun Microsystems France
Plate-forme Java EE 5
•   EJB 3.0 (JSR-220)
•   JavaServer Faces (JSR-252)
•   New persistence API (JSR-220)
•   StAX (JSR-173)
•   JAXB (JSR-222)
•   JAX-WS (JSR-224)
•   Web Services Metadata (JSR-181)
•   Common Annotations (JSR-250)
Project GlassFish
• Sun Java Application Server 9 en Open Source
  > Parfait pour se former à Java EE 5 (Blueprints)
  > Parfait pour une mise en production (Performance)
• Innovation et collaborations
  > Framework HTTPd Grizzly, management de Web Services, Oracle
    Toplink, outils d'admin, call-flow analysis, load on-demand, etc...
  > Spring, Hibernate, Struts, iBatis, AppFuse, Wicket, JSPWiki,
    WebWork, Jive, OpenSymphony workflow, Roller, etc...
  > Version Java EE 5 dès sortie officielle (printemps 2006)
  > http://glassfish.dev.java.net
• Outils de développement
  > NetBeans IDE 5.5 synchronisé avec Java EE 5 et GlassFish
  > Plugin pour Eclipse WTP
TM
Objectifs EJB    3.0

         Simplification des
         Développements
                 avec
          Compatibilité et
            Migration
Un peu de contexte
• Java 5 (JDK 1.5.0) sorti en septembre 2004
  > Nouveautés du langage (generics, enum, annotations, ...)
  > Evolution importante de presque toutes les API
  > Performance, management et monitoring
• Java EE 5 (J2EE 1.5) en cours de développement
  > Thèmes :
     > Ease of Development
     > Ease of Development
     > Ease of Development
  > Travail quasi-finalisé (JSR 244)
  > Intégration JSF 1.2 (JSR 252)
  > EJB 3.0 (JSR 220)
Approche EJB 3.0
• Simplification des API manipulées
  > POJO et POJI
  > Descripteurs de déploiements rendus facultatifs
• Utilisation de meta-données sous forme
  d'annotations Java
  > Nombreuses options par défaut pour les cas les plus fréquents
    (configuration par exception)
  > Expression de meta-données si nécessaire (ex: mapping O/R)
• Le conteneur décharge le développeur de certaines
  de ses responsabilités
Annotations
• Notion introduite dans Java 5 (JSR 175)
• Décoration d'éléments du code source pour
  exprimer le comportement d'une application
• Alternative à XDoclet:
  > JSR intégré au langage et à la plate-forme Java
  > Génération de code et manipulation de bytecode (*.class)
• Meta informations dans le fichier source
  > Gestionnaire de source, gestion des diff, éditeurs et outils
    simplifiés
• Descripteurs de déploiement toujours disponibles
  > Redéfinition des annotations
Exemple EJB 2.1
public class ShopCartBean implements javax.ejb.SessionBean {
    private SessionContext ctx;
    DataSource productDB;
    public void setSessionContext(SessionContext ctx) {
       this.ctx = ctx;
    }
    public void ejbCreate() {
      Context initialContext = new InitialContext();
      productDB = (DataSource)initialContext.lookup(
        "java:comp/env/jdbc/myDB");
    }
    public void ejbActivate() {}
    public void ejbPassivate() {}
    public void ejbRemove() {}
    public Collection startToShop (String productName) {
      Connection conn = productDB.getConnection();
      ...
    }
}
Exemple EJB 2.1 (suite)
 public interface ShopCart extends EJBObject {
    public Collection startToShop (String
    productName)
        throws RemoteException;
    ...
 }


 public interface ShopCartHome extends EJBHome {
    ShopCart create()
       throws CreateException, RemoteException;
 }
Exemple client EJB 2.1
 ...
 Context initialContext = new InitialContext();
 ShopCartHome myCartHome = (ShopCartHome)
     initialContext.lookup("java:comp/env/ejb/cart");
 ShopCart myCart= myCartHome.create();


 //Utilisation du composant
 Collection widgets = myCart.startToShop("widgets")
 ...


 // Code pour gérer javax.ejb.CreateException
 ...
Descripteur Déploiement EJB 2.1
 <session>
   <ejb-name>ShopCartBean</ejb-name>
   <local-home>ShopCartHome</local-home>
   <local>ShopCart</local>
   <ejb-class>com.example.ShopCartBean</ejb-class>
   <session-type>Stateful</session-type>
   <transaction-type>Container</transaction-type>
   <resource-ref>
     <res-ref-name>jdbc/myDB</res-ref-name>
     <res-ref-type>javax.sql.DataSource</res-ref-type>
     <res-auth>Container</res-auth>
   </resource-ref>
 </session>
 ...
 <assembly-descriptor>
 ...
 </assembly-descriptor>
Exemple EJB 3.0
@Remote     // s'applique à l'ensemble des méthodes
public interface ShopCart {
   public Collection startToShop(String productName);
   public void checkout();
}

@Stateful
public class ShopCartBean implements ShopCart {
   @Resource DataSource productDB;
   @Init /* Première méthode métier */
   public Collection startToShop (String productName) {
     Connection conn = productDB.getConnection();
     ...
   }
   @Remove public void checkout(){ ... }
}
                               Plus de descripteur de déploiement
Simplifications EJB 3.0
• Interface métier = interface Java
• Un composant peut implémenter plusieurs
  interfaces
• Plus de référence à EJBHome ou EJBObject
• Génération automatique d'interface possible
• Plus de méthode imposée de cycle de vie
• Plus de JNDI pour le développeur ou le client
• Accès distant transparent (plus de
 RemoteException)
Annotations EJB 3.0
• Nature de l'EJB
  > @Stateless, @Stateful, @MessageDrivenou
    @Entity
• Accès distant ou local
  > @Remote, @Local
  > Plus de RemoteException
• Cycle de vie
  > @PostConstruct, @PostActivate,
    @PreDestroy, @PrePassivate, @Remove, ...
  > Selon les natures d 'EJB
  > Ex: @Remove indique une suppression de l'entité après
    exécution de la méthode annotée
Injection
• Le composant déclare ce dont il a besoin au travers
  de meta-données (annotations)
• Le conteneur injecte les ressources demandées à la
  création du composant
  >   Référence EJB
  >   Contexte de transaction
  >   Contexte de sécurité
  >   Notifications de timer
  >   Contexte de persistance
  >   ...
• L'injection ne fonctionne que sur des objets managed
  (créé par le conteneur)
Annotations d'injection
• @EJB
  > Annote les interfaces métier des EJB (déclaration ou setter)
  > Annote les interfaces Home (accès composants EJB 2.1)
• @Resource
  > Permet l'injection de tout ce qui se trouve dans JNDI
  > Permet d'injecter SessionContext           ,
    UserTransaction EntityManager ...
                               ,                   ,
  > Injection de variable d 'instance ou de setter
• Injection possible dans le descripteur de
  déploiement
Configuration par défaut
package exemple.pkg;
@Stateless
public class EchoBean implements Echo {
    @EJB private Hello helloBean;
}
                              • Un seul EJB implémente l'interface Hello
est équivalent à :            • l'interface distante et l'attribut ont le même type
                              • le nom relatif JNDI est
package exemple.pkg;         exemple.pkg.EchoBean/helloBean
@Stateless
public class EchoBean implements Echo {
    @EJB(name="exemple.pkg.EchoBean/helloBean",
     beanName="HelloBean",
     beanInterface=Hello.class)
    private Hello helloBean;
}
Autres Services EJB 3.0
• Transactions
  > Container-Managed Transaction (CMT) par défaut
     > Attribut de transaction REQUIRED par défaut
  > Bean-Managed Transaction (BMT) disponible via annotation
     > @TransactionAttribute(MANDATORY)
     > S'applique aux appels de méthodes imbriqués
• Sécurité
  > Effectué en entreprise au déploiement
     > Le développeur peut donner des indications
  > Annotations de permissions
     > @Unspecified => géré au déploiement
     > @Unchecked, @SecurityDomain, @RolesAllowed, @RunAs
     > Applicables à une classe ou à une méthode
Intercepteurs
• Fonctionnalité avancée pour intercepter des
  invocations de méthodes
• Manipulation des arguments et du résultat
• Annotations @Interceptors et
 @AroundInvoke
• Peut être spécifié dans un descripteur de
  déploiement
• Exemples
  > Sécurité, audit, log, etc...
• Similaire par certains aspects à l'AOP
@Interceptors( { Interceptor.class } )
public class HelloWorldBean {
    public String sayHi() {
        return "Hi";
    }
}

public class Interceptor {
    @AroundInvoke
    public Object log(InvocationContext ic) {
        System.err.println(
            ic.getMethod().getName() + " called." );
        return ic.proceed();
    }
}
Persistance EJB 3.0
• Objectifs initiaux
  > Simplification du modèle de programmation EJB entité
  > Meilleure modélisation de domaines métier
     > Relations, héritage, polymorphisme
  > Meilleures capacités de requêtage
  > Spécification mapping O/R
  > EJB entité utilisables en dehors du conteneur EJB
    (vs. Data Transfert Object et autres anti-patterns)
• Objectif supplémentaire
  > Rendre la persistance utilisable en dehors sur conteneur J2EE
• A terme, spécification séparée
  > Java Persistence API (JPA)
Périmètre de la Persistance
• Modèle de persistance unique et mapping O/R
  > API de persistance dans un document de spécification séparé
  > API complémentaires pour une utilisation en dehors de J2EE
• Elargissement du groupe d'experts JSR-220
  > Editeurs JDO et autres experts venus du JSR 243 (JDO 2)
• Synthèse des expertises Hibernate, JDO, TopLink
  et d'éditeurs J2EE/EJB
  > L'API de persistance tire son inspiration de toutes ces sources
  > Combinaison des idées et des expériences, pas des API
• Flexibilité
  > Utilisable avec ou sans conteneur J2EE
  > A terme, providers (implémentations) inter-changeable
Entité EJB
• Un EJB entité est une simple classe Java
  > Classe concrète – constructeur sans argument (test avec new)
  > Héritage et polymorphisme
  > Méthodes getXXX/setXXXou attributs public (hors
    @Transient pour les propriétés persistantes
                     )
  > Pas d 'interface à implémenter
  > Pas de méthode de callback requise
• Utilisable comme objet « détaché » dans d'autres
  parties de l'application
  > Plus besoin de Data Transfer Object (DTO)
  > Doit implémenter Serializable
Cycle de vie EJB entité
• New
  > Pas d 'identité de persistance
  > Pas associé au conteneur
• Managed                             New
                                             persist()
                                                          Managed
  >   Identité de persistance
  >   Géré par le conteneur
  >   Synchronisation SGBDR                         merge()
  >   Gestion des relations
• Detached                                               remove()

  >   Identité de persistance                                 Removed
                                       Detached
  >   Non géré par le conteneur
  >   Synchronisation nécessite un merge
  >   Pas de gestion des relations
EntityManager
• EntityManager est un point de contrôle des
  opérations sur les EJB entité
 > Méthodes de cycle de vie
    > persist, remove, merge, flush, find, refresh, etc
 > Méthodes de requêtage pré-définies (find)
    > EntityManager.find(MyClass.class, id);
 > Factory pour des objets Query
    > Requêtes (nommées) statiques et dynamiques
    > Requêtes EJB-QL et SQL
 > Gestion du contexte de persistance
    > Réunion des identités persistantes
    > Contexte étendu de persistance (transactions multiples)
 > Similaire à Hibernate Session, JDO PersistenceManager, etc.
Injection EntityManager
@Stateless()
public class CreateUsersFactory implements
                          CreateUsersFactoryLocal {
    @PersistenceContext
    EntityManager em;

     public CreateUsersFactory() {
         UserCredentials user =
               new UserCredentials("scott","tiger");
         em.persist(user);
     }
}

• L'object est écrit en base à la sortie de la méthode (CMT)
• Injection également possible dans le conteneur web (servlet, ...)
  ou dans un ACC (Application Client Container)
@PersistenceContext
• Contexte de persistance:
   > Propose un accès à des unités de persistance (1 à N) pour un ensemble de
      composants
• Unité de persistance:
   > Classes mises en correspondance avec une source de données unique

persistence.xml (dans EJB-JAR, WAR, ou JAR) :

  <?xml version="1.0" encoding="UTF-8"?>
  <persistence version="1.0">
       <persistence-unit name="DEFAULT"
                         transaction-type="JTA">
          <jta-data-source>jdbc/__default</jta-data-source>
          <properties>
               <property name="toplink.ddl-generation"
                         value="drop-and-create-tables"/>
          </properties>
       </persistence-unit>
  </persistence>
                                                      Version application-managed possible
@Entity
public class Customer {      // table = CUSTOMER
  private Long id;
  private String name;
  private Address address;
  private HashSet<Order> orders = new HashSet<Order>();
    @Id                              // clé primaire
    @GeneratedValue(strategy = AUTO) // géré par la base
    public Long getID() {
      return id;
    }
    private void setID(Long id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    @OneToMany(cascade=ALL, fetch=EAGER)
    public Set<Order> getOrders() { // cardinalité
      return orders;
    }
    public void setOrders(Set<Order> orders) {
      this.orders = orders;
    }
}
@Entity
@Table(name="ORDER_TBL")      // nom table explicite
public class Order {
    ...
    @Id                        // clé primaire
    @GeneratedValue(strategy = AUTO)
    public Long getID() {
      return id;
    }
    @ManyToOne(cascade=ALL)           // create, merge, delete
    @JoinColumn(name="cust_id")       // clé étrangère
    public Customer getCustomer() {
      return cust;
    }
    public setCustomer ( Customer c ) {
      this.customer = c;
    }
    ...
}
Vue cliente
@Stateless
public class OrderEntryBean {
  @PersistenceContext
  private EntityManager em;       // singleton

    public void addUser (Customer cust) {
      em.persist (cust);       //
    } // Ecriture en base (CMT par défaut)

    public void enterOrder (int custId, Order newOrder) {
      Customer cust = em.find(Customer.class, custId);
      cust.getOrders().add(newOrder);    // Pointeur de retour
      newOrder.setCustomer(cust);
    } // Ecriture en base (CMT par défaut)

    public Order createOrder (String id, ...) {
      return new Order (String id, ...);
    }
}
Persistence Java SE
• Nécessite des classes de « bootstrap »
  > javax.persistence.Persistence
  > javax.persistence.EntityManagerFactory
• Exemple
  public class EmployeeLoader {
    public static void main(String[] args) {
      EntityManagerFactory emf = Persistence
          .createEntityManagerFactory("HRSystem");
      EntityManager em = emf.createEntityManager();
      em.getTransaction().begin();
      em.persist(new Order(args[0], args[1]));
      em.getTransaction().commit();
      em.close();
      emf.close();
    }
  }
Relations
• Uni ou bi-directionnelles
• Cardinalités
  >   @OneToOne
  >   @OneToMany
  >   @ManyToOne
  >   @ManyToMany
• Cascade
  > Propagation d'une opération sur les relations (attribut de
      l'annotation)
       > PERSIST, REMOVE, MERGE, REFRESH, ALL
  > Aucune propagation par défaut
Héritage
• Rendu possible par le modèle POJO
  > Héritage de classes abstraites ou concrètes, entité ou non
  > Annotation de la classe
     > @Inheritance(strategy=InheritanceType.SINGLE_TABLE)

• Stratégies de correspondance vers une base
  > SINGLE_TABLE(par défaut) – une seule table, valeur
    discriminatoire relative à la classe
  > TABLE_PER_CLASS(optionnel) – une table pour chaque
    classe concrète dans la hiérarchie
  > JOINED – jointure vers d'autres tables spécifiques aux attributs
    définis dans les sous-classes
• SINGLE_TABLE



• TABLE_PER_CLASS



• JOINED
Requêtes EJB-QL
Dynamiques :
public List findWithName(String name) {
    return em.createQuery(
        "SELECT c from Customer c WHERE c.name LIKE :custName" )
             .setParameter("custName", name)
             .setMaxResults(10)
             .getResultList();
}

Polymorphiques :
   select avg(e.salary) from Employee e where e.salary > 80000


Nommées :
@NamedQuery(name="findAllCustomersWithName",
      query="SELECT c FROM Customer c WHERE c.name LIKE ?1")

customers = em.createNamedQuery("findAllCustomersWithName")
                 .setParameter(1, "Smith")
                 .getResultList();
Evolutions EJB-QL
•   Requêtes Natives SQL – résultats sous forme d'objets
•   Bulk updates – plus besoin de tout monter en cache
•   Requêtes dynamiques
•   Pagination – Query.setMaxResults()
•   Projections – Objets de types différents ou partiels
•   Jointures (JOIN)
•   Clauses GROUP BY, HAVING
•   Fonctions supplémentaires: concat(), trim(),
    substring(), lower(), upper(), length(),
    locate(), abs(), sqrt(), size(), mod()
Java Server Faces (JSF 1.2)
•   Framework MVC2
•   Modèle de composant extensible
•   Modèle de rendu estensible
•   Modèle de gestion d'événements
•   Framework de validation
•   Gestion des règles de navigation
•   Internationalisation
•   Accessibilité
•   Tool friendly
JSF Extending Servlet/JSP
                                Servlet Container
                                                                   EIS

                                (Controller)
            1. Request         FacesServlet
  Browser




                                            2.
                                               Ins
                          3. Redirect


                                                  ta n
                                                   tia
            5. Response           (View)               te(Model)
                                                         Managed
                                   JSP                    Bean
                                           4. Associate
AJAX et JavaServer Faces
• Ajax « BluePrints Solutions catalog » :
  https://bpcatalog.dev.java.net/nonav/solutions.html
  > AJAX utilisant l'architecture JavaServer Faces pour traiter les
    requêtes AJAX
  > Les composants JSF effectuent le rendu en encapsulant et en
    exécutant les scripts AJAX
  > Le Servlet Controller gère les requêtes AJAX
• AJAX est intégré au cycle de vie JSF
  > Un écouteur de phase est utilisé pour récupérer le code
    JavaScript initial
  > Un écouteur de phase est utilisé pour exécuter les requêtes AJAX
  > L'état de la page est accessible depuis le code JavaScript
Web Service Java EE 5
 package endpoint;

 import javax.jws.WebService;

 @WebService
 public class MyHelloService {

     @WebMethod
     public String sayHello(String param) {
          return "Hello " + param;
     }

 }
Client Web Service Java EE 5
  public class MyComponent {
     @WebServiceRef(MyHelloService.class)
     HelloIF helloPort;

      public void myMethod() {
        // Invoke an operation
        helloPort.sayHello();
      }
  }
Web Services dans Java EE 5
• JAX-WS 2.0 (Java API for XML Web Services)
  > Nouvelle spécification, successeur de JAX-RPC
  > JAX-RPC 1.1 reste supporté
• Implémentation de la nouvelle pile WS
  > JAX-WS 2.0 et JAXB 2.0
  > StAX et JAXP 1.3
  > Conçu pour être évolutif (spécifications WS-* en cours)
• Utilisation importantes des annotations
  > Simplification des développements
• Support Fast Infoset (GlassFish)
  > Meilleure Performance
Conclusion
• EJB 3.0 – Simplification réelle pour le développeur
  > Suppression de classes et d 'interfaces (POJO)
  > Modèle d 'injection de services et de ressources
  > Descripteurs de déploiement rendus facultatifs
  > Capacités de requêtage améliorées
  > Spécification du mapping O/R (relations)
• EJB 3.0 et JSF 1.2 sont les fondations de Java EE 5
  > Ease of Development (EoD)
• Disponible en beta (version finale en mai)

   http://java.sun.com/javaee/5/docs/tutorial/doc/index.html
Rôle des outils pour Java EE 5
• L'éditeur devient le point central
  > Besoin d'assistants, d'aide en ligne, de hints/tips
  > Rapport d'erreur en ligne (syntaxe, sémantique, blueprints)
• Analyse des annotations
  > Doit intervenir avant la compilation ou le déploiement
  > Complétion de code pour les annotations (y compris pour la
    persistance)
• L'outil doit connaître la sémantique de chaque
  annotation
  > Quelles sont les conséquences et les différences entre
    @Statelesset @Stateful
Demo
Project GlassFish
• Sun Java Application Server 9 en Open Source
  > Parfait pour se former à Java EE 5 (Blueprints)
  > Parfait pour une mise en production (Performance)
• Innovation et collaborations
  > Framework HTTPd Grizzly, management de Web Services, Oracle
    Toplink, outils d'admin, call-flow analysis, load on-demand, etc...
  > Spring, Hibernate, Struts, iBatis, AppFuse, Wicket, JSPWiki,
    WebWork, Jive, OpenSymphony workflow, Roller, etc...
  > Version Java EE 5 dès sortie officielle (printemps 2006)
  > http://glassfish.dev.java.net
• Outils de développement
  > NetBeans IDE 5.5 synchronisé avec Java EE 5 et GlassFish
  > Plugin pour Eclipse WTP
Sun Developer Network
• Free resources for all developers
  >   Tools (Creator, Java Studio Enterprise Edition)
  >   Forums
  >   FAQs
  >   Early Access
  >   Newsletters
• Join Today!
  >http://developers.sun.com
Sun Partner Advantage Community :
• For professional developers ( for companies only )
  >   Information and training
  >   Technical resources for porting/migration/integration
  >   Marketing tools
  >   Sales engagement
• To know much more, contact :
• jean-michel.pelmont@sun.com or,
 partneradvantage.sun.com
Alexis Moussine-Pouchkine
alexis.mp@sun.com
blogs.sun.com/alexismp

Weitere ähnliche Inhalte

Was ist angesagt? (19)

Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 
Java Server Faces 2
Java Server Faces 2Java Server Faces 2
Java Server Faces 2
 
J2eeintro
J2eeintroJ2eeintro
J2eeintro
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EE
 
3 Jsf
3 Jsf3 Jsf
3 Jsf
 
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
 
Presentation JEE et son écossystéme
Presentation JEE et son écossystémePresentation JEE et son écossystéme
Presentation JEE et son écossystéme
 
Présentation de JEE et de son écosysteme
Présentation de JEE et de son écosystemePrésentation de JEE et de son écosysteme
Présentation de JEE et de son écosysteme
 
Spring
SpringSpring
Spring
 
Java Entreprise Edition
Java Entreprise EditionJava Entreprise Edition
Java Entreprise Edition
 
J2ee
J2eeJ2ee
J2ee
 
Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010
 
J2 ee
J2 eeJ2 ee
J2 ee
 
Jsf 110530152515-phpapp01
Jsf 110530152515-phpapp01Jsf 110530152515-phpapp01
Jsf 110530152515-phpapp01
 
J2 ee
J2 eeJ2 ee
J2 ee
 
JSF 2.0
JSF 2.0JSF 2.0
JSF 2.0
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
 
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...
 
Architectures n-tiers
Architectures n-tiersArchitectures n-tiers
Architectures n-tiers
 

Andere mochten auch

Andere mochten auch (19)

JTS
JTSJTS
JTS
 
Java JSF
Java JSFJava JSF
Java JSF
 
Google appengine&guice
Google appengine&guiceGoogle appengine&guice
Google appengine&guice
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
 
Android
AndroidAndroid
Android
 
Administration glassfish 3
Administration glassfish 3Administration glassfish 3
Administration glassfish 3
 
Java 5, un bilan
Java 5,  un bilanJava 5,  un bilan
Java 5, un bilan
 
Hibernate et jsf
Hibernate et jsfHibernate et jsf
Hibernate et jsf
 
Tutorial
TutorialTutorial
Tutorial
 
L'écosystème Java
L'écosystème JavaL'écosystème Java
L'écosystème Java
 
Java et java ee histoire présent futur khaled ben driss tnjug 24 04 2012
Java et java ee histoire présent futur khaled ben driss tnjug 24 04 2012Java et java ee histoire présent futur khaled ben driss tnjug 24 04 2012
Java et java ee histoire présent futur khaled ben driss tnjug 24 04 2012
 
Sonar-Hodson-Maven
Sonar-Hodson-MavenSonar-Hodson-Maven
Sonar-Hodson-Maven
 
Hibernate 3
Hibernate 3Hibernate 3
Hibernate 3
 
4 Hibernate
4 Hibernate4 Hibernate
4 Hibernate
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)
 
Génie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architecturesGénie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architectures
 
Le reseau hospitalier maroc et rih
Le reseau hospitalier maroc et rihLe reseau hospitalier maroc et rih
Le reseau hospitalier maroc et rih
 
schéma regional de l'offre de soins
schéma regional de l'offre de soins schéma regional de l'offre de soins
schéma regional de l'offre de soins
 
Spring mvc 3.0 web flow
Spring mvc 3.0 web flowSpring mvc 3.0 web flow
Spring mvc 3.0 web flow
 

Ähnlich wie 2

#5 Java EE5 Client Lourd et Smart Client
#5 Java EE5  Client Lourd  et Smart Client#5 Java EE5  Client Lourd  et Smart Client
#5 Java EE5 Client Lourd et Smart ClientGuillaume Sauthier
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !Paris Salesforce Developer Group
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur SpringAntoine Rey
 
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 JavaAntoine Rey
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer FacesJS Bournival
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Mejdeddine Bouzouita
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?PALO IT
 
Play Framework
Play FrameworkPlay Framework
Play FrameworkArmaklan
 
Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01
Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01
Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01Eric Bourdet
 
Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01 (1)
Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01 (1)Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01 (1)
Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01 (1)Eric Bourdet
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 

Ähnlich wie 2 (20)

#5 Java EE5 Client Lourd et Smart Client
#5 Java EE5  Client Lourd  et Smart Client#5 Java EE5  Client Lourd  et Smart Client
#5 Java EE5 Client Lourd et Smart Client
 
JavaEEGibello.ppt
JavaEEGibello.pptJavaEEGibello.ppt
JavaEEGibello.ppt
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
 
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
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer Faces
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
 
Play Framework
Play FrameworkPlay Framework
Play Framework
 
Les annotations
Les annotationsLes annotations
Les annotations
 
Jboss Seam
Jboss SeamJboss Seam
Jboss Seam
 
Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01
Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01
Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01
 
Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01 (1)
Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01 (1)Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01 (1)
Supportdecoursejb3versioncompletemryoussfi 140317162653-phpapp01 (1)
 
Présentation nouveauté java7
Présentation nouveauté java7Présentation nouveauté java7
Présentation nouveauté java7
 
Support cours j2_ee
Support cours j2_eeSupport cours j2_ee
Support cours j2_ee
 
Liquibase en action
Liquibase en actionLiquibase en action
Liquibase en action
 
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
 
YaJUG - Spring 3.0
YaJUG - Spring 3.0YaJUG - Spring 3.0
YaJUG - Spring 3.0
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 

2

  • 1. Java EE 5 Enterprise JavaBeansTM 3.0 Alexis Moussine-Pouchkine Sun Microsystems France
  • 2. Plate-forme Java EE 5 • EJB 3.0 (JSR-220) • JavaServer Faces (JSR-252) • New persistence API (JSR-220) • StAX (JSR-173) • JAXB (JSR-222) • JAX-WS (JSR-224) • Web Services Metadata (JSR-181) • Common Annotations (JSR-250)
  • 3. Project GlassFish • Sun Java Application Server 9 en Open Source > Parfait pour se former à Java EE 5 (Blueprints) > Parfait pour une mise en production (Performance) • Innovation et collaborations > Framework HTTPd Grizzly, management de Web Services, Oracle Toplink, outils d'admin, call-flow analysis, load on-demand, etc... > Spring, Hibernate, Struts, iBatis, AppFuse, Wicket, JSPWiki, WebWork, Jive, OpenSymphony workflow, Roller, etc... > Version Java EE 5 dès sortie officielle (printemps 2006) > http://glassfish.dev.java.net • Outils de développement > NetBeans IDE 5.5 synchronisé avec Java EE 5 et GlassFish > Plugin pour Eclipse WTP
  • 4. TM Objectifs EJB 3.0 Simplification des Développements avec Compatibilité et Migration
  • 5. Un peu de contexte • Java 5 (JDK 1.5.0) sorti en septembre 2004 > Nouveautés du langage (generics, enum, annotations, ...) > Evolution importante de presque toutes les API > Performance, management et monitoring • Java EE 5 (J2EE 1.5) en cours de développement > Thèmes : > Ease of Development > Ease of Development > Ease of Development > Travail quasi-finalisé (JSR 244) > Intégration JSF 1.2 (JSR 252) > EJB 3.0 (JSR 220)
  • 6. Approche EJB 3.0 • Simplification des API manipulées > POJO et POJI > Descripteurs de déploiements rendus facultatifs • Utilisation de meta-données sous forme d'annotations Java > Nombreuses options par défaut pour les cas les plus fréquents (configuration par exception) > Expression de meta-données si nécessaire (ex: mapping O/R) • Le conteneur décharge le développeur de certaines de ses responsabilités
  • 7. Annotations • Notion introduite dans Java 5 (JSR 175) • Décoration d'éléments du code source pour exprimer le comportement d'une application • Alternative à XDoclet: > JSR intégré au langage et à la plate-forme Java > Génération de code et manipulation de bytecode (*.class) • Meta informations dans le fichier source > Gestionnaire de source, gestion des diff, éditeurs et outils simplifiés • Descripteurs de déploiement toujours disponibles > Redéfinition des annotations
  • 8. Exemple EJB 2.1 public class ShopCartBean implements javax.ejb.SessionBean { private SessionContext ctx; DataSource productDB; public void setSessionContext(SessionContext ctx) { this.ctx = ctx; } public void ejbCreate() { Context initialContext = new InitialContext(); productDB = (DataSource)initialContext.lookup( "java:comp/env/jdbc/myDB"); } public void ejbActivate() {} public void ejbPassivate() {} public void ejbRemove() {} public Collection startToShop (String productName) { Connection conn = productDB.getConnection(); ... } }
  • 9. Exemple EJB 2.1 (suite) public interface ShopCart extends EJBObject { public Collection startToShop (String productName) throws RemoteException; ... } public interface ShopCartHome extends EJBHome { ShopCart create() throws CreateException, RemoteException; }
  • 10. Exemple client EJB 2.1 ... Context initialContext = new InitialContext(); ShopCartHome myCartHome = (ShopCartHome) initialContext.lookup("java:comp/env/ejb/cart"); ShopCart myCart= myCartHome.create(); //Utilisation du composant Collection widgets = myCart.startToShop("widgets") ... // Code pour gérer javax.ejb.CreateException ...
  • 11. Descripteur Déploiement EJB 2.1 <session> <ejb-name>ShopCartBean</ejb-name> <local-home>ShopCartHome</local-home> <local>ShopCart</local> <ejb-class>com.example.ShopCartBean</ejb-class> <session-type>Stateful</session-type> <transaction-type>Container</transaction-type> <resource-ref> <res-ref-name>jdbc/myDB</res-ref-name> <res-ref-type>javax.sql.DataSource</res-ref-type> <res-auth>Container</res-auth> </resource-ref> </session> ... <assembly-descriptor> ... </assembly-descriptor>
  • 12. Exemple EJB 3.0 @Remote // s'applique à l'ensemble des méthodes public interface ShopCart { public Collection startToShop(String productName); public void checkout(); } @Stateful public class ShopCartBean implements ShopCart { @Resource DataSource productDB; @Init /* Première méthode métier */ public Collection startToShop (String productName) { Connection conn = productDB.getConnection(); ... } @Remove public void checkout(){ ... } } Plus de descripteur de déploiement
  • 13. Simplifications EJB 3.0 • Interface métier = interface Java • Un composant peut implémenter plusieurs interfaces • Plus de référence à EJBHome ou EJBObject • Génération automatique d'interface possible • Plus de méthode imposée de cycle de vie • Plus de JNDI pour le développeur ou le client • Accès distant transparent (plus de RemoteException)
  • 14. Annotations EJB 3.0 • Nature de l'EJB > @Stateless, @Stateful, @MessageDrivenou @Entity • Accès distant ou local > @Remote, @Local > Plus de RemoteException • Cycle de vie > @PostConstruct, @PostActivate, @PreDestroy, @PrePassivate, @Remove, ... > Selon les natures d 'EJB > Ex: @Remove indique une suppression de l'entité après exécution de la méthode annotée
  • 15. Injection • Le composant déclare ce dont il a besoin au travers de meta-données (annotations) • Le conteneur injecte les ressources demandées à la création du composant > Référence EJB > Contexte de transaction > Contexte de sécurité > Notifications de timer > Contexte de persistance > ... • L'injection ne fonctionne que sur des objets managed (créé par le conteneur)
  • 16. Annotations d'injection • @EJB > Annote les interfaces métier des EJB (déclaration ou setter) > Annote les interfaces Home (accès composants EJB 2.1) • @Resource > Permet l'injection de tout ce qui se trouve dans JNDI > Permet d'injecter SessionContext , UserTransaction EntityManager ... , , > Injection de variable d 'instance ou de setter • Injection possible dans le descripteur de déploiement
  • 17. Configuration par défaut package exemple.pkg; @Stateless public class EchoBean implements Echo { @EJB private Hello helloBean; } • Un seul EJB implémente l'interface Hello est équivalent à : • l'interface distante et l'attribut ont le même type • le nom relatif JNDI est package exemple.pkg; exemple.pkg.EchoBean/helloBean @Stateless public class EchoBean implements Echo { @EJB(name="exemple.pkg.EchoBean/helloBean", beanName="HelloBean", beanInterface=Hello.class) private Hello helloBean; }
  • 18. Autres Services EJB 3.0 • Transactions > Container-Managed Transaction (CMT) par défaut > Attribut de transaction REQUIRED par défaut > Bean-Managed Transaction (BMT) disponible via annotation > @TransactionAttribute(MANDATORY) > S'applique aux appels de méthodes imbriqués • Sécurité > Effectué en entreprise au déploiement > Le développeur peut donner des indications > Annotations de permissions > @Unspecified => géré au déploiement > @Unchecked, @SecurityDomain, @RolesAllowed, @RunAs > Applicables à une classe ou à une méthode
  • 19. Intercepteurs • Fonctionnalité avancée pour intercepter des invocations de méthodes • Manipulation des arguments et du résultat • Annotations @Interceptors et @AroundInvoke • Peut être spécifié dans un descripteur de déploiement • Exemples > Sécurité, audit, log, etc... • Similaire par certains aspects à l'AOP
  • 20. @Interceptors( { Interceptor.class } ) public class HelloWorldBean { public String sayHi() { return "Hi"; } } public class Interceptor { @AroundInvoke public Object log(InvocationContext ic) { System.err.println( ic.getMethod().getName() + " called." ); return ic.proceed(); } }
  • 21. Persistance EJB 3.0 • Objectifs initiaux > Simplification du modèle de programmation EJB entité > Meilleure modélisation de domaines métier > Relations, héritage, polymorphisme > Meilleures capacités de requêtage > Spécification mapping O/R > EJB entité utilisables en dehors du conteneur EJB (vs. Data Transfert Object et autres anti-patterns) • Objectif supplémentaire > Rendre la persistance utilisable en dehors sur conteneur J2EE • A terme, spécification séparée > Java Persistence API (JPA)
  • 22. Périmètre de la Persistance • Modèle de persistance unique et mapping O/R > API de persistance dans un document de spécification séparé > API complémentaires pour une utilisation en dehors de J2EE • Elargissement du groupe d'experts JSR-220 > Editeurs JDO et autres experts venus du JSR 243 (JDO 2) • Synthèse des expertises Hibernate, JDO, TopLink et d'éditeurs J2EE/EJB > L'API de persistance tire son inspiration de toutes ces sources > Combinaison des idées et des expériences, pas des API • Flexibilité > Utilisable avec ou sans conteneur J2EE > A terme, providers (implémentations) inter-changeable
  • 23. Entité EJB • Un EJB entité est une simple classe Java > Classe concrète – constructeur sans argument (test avec new) > Héritage et polymorphisme > Méthodes getXXX/setXXXou attributs public (hors @Transient pour les propriétés persistantes ) > Pas d 'interface à implémenter > Pas de méthode de callback requise • Utilisable comme objet « détaché » dans d'autres parties de l'application > Plus besoin de Data Transfer Object (DTO) > Doit implémenter Serializable
  • 24. Cycle de vie EJB entité • New > Pas d 'identité de persistance > Pas associé au conteneur • Managed New persist() Managed > Identité de persistance > Géré par le conteneur > Synchronisation SGBDR merge() > Gestion des relations • Detached remove() > Identité de persistance Removed Detached > Non géré par le conteneur > Synchronisation nécessite un merge > Pas de gestion des relations
  • 25. EntityManager • EntityManager est un point de contrôle des opérations sur les EJB entité > Méthodes de cycle de vie > persist, remove, merge, flush, find, refresh, etc > Méthodes de requêtage pré-définies (find) > EntityManager.find(MyClass.class, id); > Factory pour des objets Query > Requêtes (nommées) statiques et dynamiques > Requêtes EJB-QL et SQL > Gestion du contexte de persistance > Réunion des identités persistantes > Contexte étendu de persistance (transactions multiples) > Similaire à Hibernate Session, JDO PersistenceManager, etc.
  • 26. Injection EntityManager @Stateless() public class CreateUsersFactory implements CreateUsersFactoryLocal { @PersistenceContext EntityManager em; public CreateUsersFactory() { UserCredentials user = new UserCredentials("scott","tiger"); em.persist(user); } } • L'object est écrit en base à la sortie de la méthode (CMT) • Injection également possible dans le conteneur web (servlet, ...) ou dans un ACC (Application Client Container)
  • 27. @PersistenceContext • Contexte de persistance: > Propose un accès à des unités de persistance (1 à N) pour un ensemble de composants • Unité de persistance: > Classes mises en correspondance avec une source de données unique persistence.xml (dans EJB-JAR, WAR, ou JAR) : <?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0"> <persistence-unit name="DEFAULT" transaction-type="JTA"> <jta-data-source>jdbc/__default</jta-data-source> <properties> <property name="toplink.ddl-generation" value="drop-and-create-tables"/> </properties> </persistence-unit> </persistence> Version application-managed possible
  • 28. @Entity public class Customer { // table = CUSTOMER private Long id; private String name; private Address address; private HashSet<Order> orders = new HashSet<Order>(); @Id // clé primaire @GeneratedValue(strategy = AUTO) // géré par la base public Long getID() { return id; } private void setID(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @OneToMany(cascade=ALL, fetch=EAGER) public Set<Order> getOrders() { // cardinalité return orders; } public void setOrders(Set<Order> orders) { this.orders = orders; } }
  • 29. @Entity @Table(name="ORDER_TBL") // nom table explicite public class Order { ... @Id // clé primaire @GeneratedValue(strategy = AUTO) public Long getID() { return id; } @ManyToOne(cascade=ALL) // create, merge, delete @JoinColumn(name="cust_id") // clé étrangère public Customer getCustomer() { return cust; } public setCustomer ( Customer c ) { this.customer = c; } ... }
  • 30. Vue cliente @Stateless public class OrderEntryBean { @PersistenceContext private EntityManager em; // singleton public void addUser (Customer cust) { em.persist (cust); // } // Ecriture en base (CMT par défaut) public void enterOrder (int custId, Order newOrder) { Customer cust = em.find(Customer.class, custId); cust.getOrders().add(newOrder); // Pointeur de retour newOrder.setCustomer(cust); } // Ecriture en base (CMT par défaut) public Order createOrder (String id, ...) { return new Order (String id, ...); } }
  • 31. Persistence Java SE • Nécessite des classes de « bootstrap » > javax.persistence.Persistence > javax.persistence.EntityManagerFactory • Exemple public class EmployeeLoader { public static void main(String[] args) { EntityManagerFactory emf = Persistence .createEntityManagerFactory("HRSystem"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); em.persist(new Order(args[0], args[1])); em.getTransaction().commit(); em.close(); emf.close(); } }
  • 32. Relations • Uni ou bi-directionnelles • Cardinalités > @OneToOne > @OneToMany > @ManyToOne > @ManyToMany • Cascade > Propagation d'une opération sur les relations (attribut de l'annotation) > PERSIST, REMOVE, MERGE, REFRESH, ALL > Aucune propagation par défaut
  • 33. Héritage • Rendu possible par le modèle POJO > Héritage de classes abstraites ou concrètes, entité ou non > Annotation de la classe > @Inheritance(strategy=InheritanceType.SINGLE_TABLE) • Stratégies de correspondance vers une base > SINGLE_TABLE(par défaut) – une seule table, valeur discriminatoire relative à la classe > TABLE_PER_CLASS(optionnel) – une table pour chaque classe concrète dans la hiérarchie > JOINED – jointure vers d'autres tables spécifiques aux attributs définis dans les sous-classes
  • 35. Requêtes EJB-QL Dynamiques : public List findWithName(String name) { return em.createQuery( "SELECT c from Customer c WHERE c.name LIKE :custName" ) .setParameter("custName", name) .setMaxResults(10) .getResultList(); } Polymorphiques : select avg(e.salary) from Employee e where e.salary > 80000 Nommées : @NamedQuery(name="findAllCustomersWithName", query="SELECT c FROM Customer c WHERE c.name LIKE ?1") customers = em.createNamedQuery("findAllCustomersWithName") .setParameter(1, "Smith") .getResultList();
  • 36. Evolutions EJB-QL • Requêtes Natives SQL – résultats sous forme d'objets • Bulk updates – plus besoin de tout monter en cache • Requêtes dynamiques • Pagination – Query.setMaxResults() • Projections – Objets de types différents ou partiels • Jointures (JOIN) • Clauses GROUP BY, HAVING • Fonctions supplémentaires: concat(), trim(), substring(), lower(), upper(), length(), locate(), abs(), sqrt(), size(), mod()
  • 37. Java Server Faces (JSF 1.2) • Framework MVC2 • Modèle de composant extensible • Modèle de rendu estensible • Modèle de gestion d'événements • Framework de validation • Gestion des règles de navigation • Internationalisation • Accessibilité • Tool friendly
  • 38. JSF Extending Servlet/JSP Servlet Container EIS (Controller) 1. Request FacesServlet Browser 2. Ins 3. Redirect ta n tia 5. Response (View) te(Model) Managed JSP Bean 4. Associate
  • 39. AJAX et JavaServer Faces • Ajax « BluePrints Solutions catalog » : https://bpcatalog.dev.java.net/nonav/solutions.html > AJAX utilisant l'architecture JavaServer Faces pour traiter les requêtes AJAX > Les composants JSF effectuent le rendu en encapsulant et en exécutant les scripts AJAX > Le Servlet Controller gère les requêtes AJAX • AJAX est intégré au cycle de vie JSF > Un écouteur de phase est utilisé pour récupérer le code JavaScript initial > Un écouteur de phase est utilisé pour exécuter les requêtes AJAX > L'état de la page est accessible depuis le code JavaScript
  • 40. Web Service Java EE 5 package endpoint; import javax.jws.WebService; @WebService public class MyHelloService { @WebMethod public String sayHello(String param) { return "Hello " + param; } }
  • 41. Client Web Service Java EE 5 public class MyComponent { @WebServiceRef(MyHelloService.class) HelloIF helloPort; public void myMethod() { // Invoke an operation helloPort.sayHello(); } }
  • 42. Web Services dans Java EE 5 • JAX-WS 2.0 (Java API for XML Web Services) > Nouvelle spécification, successeur de JAX-RPC > JAX-RPC 1.1 reste supporté • Implémentation de la nouvelle pile WS > JAX-WS 2.0 et JAXB 2.0 > StAX et JAXP 1.3 > Conçu pour être évolutif (spécifications WS-* en cours) • Utilisation importantes des annotations > Simplification des développements • Support Fast Infoset (GlassFish) > Meilleure Performance
  • 43. Conclusion • EJB 3.0 – Simplification réelle pour le développeur > Suppression de classes et d 'interfaces (POJO) > Modèle d 'injection de services et de ressources > Descripteurs de déploiement rendus facultatifs > Capacités de requêtage améliorées > Spécification du mapping O/R (relations) • EJB 3.0 et JSF 1.2 sont les fondations de Java EE 5 > Ease of Development (EoD) • Disponible en beta (version finale en mai) http://java.sun.com/javaee/5/docs/tutorial/doc/index.html
  • 44. Rôle des outils pour Java EE 5 • L'éditeur devient le point central > Besoin d'assistants, d'aide en ligne, de hints/tips > Rapport d'erreur en ligne (syntaxe, sémantique, blueprints) • Analyse des annotations > Doit intervenir avant la compilation ou le déploiement > Complétion de code pour les annotations (y compris pour la persistance) • L'outil doit connaître la sémantique de chaque annotation > Quelles sont les conséquences et les différences entre @Statelesset @Stateful
  • 45. Demo
  • 46. Project GlassFish • Sun Java Application Server 9 en Open Source > Parfait pour se former à Java EE 5 (Blueprints) > Parfait pour une mise en production (Performance) • Innovation et collaborations > Framework HTTPd Grizzly, management de Web Services, Oracle Toplink, outils d'admin, call-flow analysis, load on-demand, etc... > Spring, Hibernate, Struts, iBatis, AppFuse, Wicket, JSPWiki, WebWork, Jive, OpenSymphony workflow, Roller, etc... > Version Java EE 5 dès sortie officielle (printemps 2006) > http://glassfish.dev.java.net • Outils de développement > NetBeans IDE 5.5 synchronisé avec Java EE 5 et GlassFish > Plugin pour Eclipse WTP
  • 47. Sun Developer Network • Free resources for all developers > Tools (Creator, Java Studio Enterprise Edition) > Forums > FAQs > Early Access > Newsletters • Join Today! >http://developers.sun.com
  • 48. Sun Partner Advantage Community : • For professional developers ( for companies only ) > Information and training > Technical resources for porting/migration/integration > Marketing tools > Sales engagement • To know much more, contact : • jean-michel.pelmont@sun.com or, partneradvantage.sun.com