La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Enterprise Java Bean 3 Jean-Jacques LE COZ. Introduction Jean-Jacques LE COZ.

Présentations similaires


Présentation au sujet: "Enterprise Java Bean 3 Jean-Jacques LE COZ. Introduction Jean-Jacques LE COZ."— Transcription de la présentation:

1 Enterprise Java Bean 3 Jean-Jacques LE COZ

2 Introduction Jean-Jacques LE COZ

3 Introduction Les EJB sont des composants Côté serveur Distribués Développés avec le langage Java Ils offrent Sécurité Montée en charge Inter-opérabilité

4 Architecture distribuée données logique métier logique métier présentation

5 Caractéristiques La technologie EJB est une approche RAD côté serveur Les EJB sont conçus pour faciliter la Portabilité Réutilisation

6 Java EE Web Container JSP Page Servlet J ava 2 Standard Edition APIs EJB Container EJB JDBCJMS JNDI JTA JavaMail JAF RMI-IIOP

7 Java JEE Systèmes client Applets, applications, CORBA Navigateurs WebSystèmes mobiles ServletsJSPs EJBs Connecteurs Bases de données Systèmes existants PGI Autres Systèmes services web IIOPHTTP services web protocoles propriétaires SERVEUR JEE JMS Systèmes MOM SQL

8 EJB: composant Un composant logiciel est une partie concrète de quelque chose d'abstrait Un composant logiciel est l'implémentation du comportement de ce concept abstrait Un composant logiciel est un ensemble de lignes de code livré dans un paquetage Un composant logiciel ressemble à un objet à la différence qu'il est indépendant

9 EJB: environnement standard

10 EJB version 3 Jean-Jacques LE COZ

11 EJB version 3 : motivations Volonté de simplification Du développement, de la mise en oeuvre Remédier à la non utilisation Sur 100 licences vendues seules 30% des entreprises utilisent les EJB 2 Face à la plateforme.NET rendre Java EE plus attractif Ne plus être cataloguée de technologie compliquée et élitiste

12 EJB 3 : spécifications (1) Final draft : 25 décembre 2005 JSR : 220 Nouveautés Java annotations Configuration par exception Mécanisme d'injection de dépendances Simplification des types Plus d'interface spécifique pour les Session Bean

13 EJB 3 : spécifications (2) Nouveautés (suite) Plus d'interface d'accueil pour les Session Bean Simplification des Entity Bean Persistance Spécialisation Polymorphisme Elimination des interfaces des entités persistantes

14 EJB 3 : spécifications (3) Nouveautés (suite) Spécification des annotations et de la description XML du mapping O/R Amélioration du langage EJB QL La possibilité de réaliser des interceptors pour les Session Bean et Message Driven Bean Réduction du nombre d'exception Les méthodes callback ne sont plus obligatoires

15 Résumé (1) Plus que des interfaces POJI Plus que des classes POJO Spécialisation Polymorphisme Orthogonalité vis à vis des services offerts par le serveur d'application Par injection de dépendance Implémentation par les annotations Java 5 Plus de fichier ejb-jar.xml

16 Résumé (2) EJB3 basé sur les nouveautés Java 5 Java 5 (tiger) Annotations Generics Auto boxing EJB3 basé sur la programmation par aspect

17 Annotations Déclarées par @ Accessibles par réflexion Java Utilisées pour Méta-données Descriptions de déploiement

18 Generics Pour les collections ArrayList liste1 = new ArrayList(); liste1.add(0, new Integer(12)); int total = ((Integer)liste.get(0)).intValue(); ArrayList liste2 = new ArrayList (); liste2.add(0, new Integer(12)); int total = (liste2.get(0)).intValue();

19 Autoboxing Convertion automatique entre les types primitifs Java et leur implémentation sous forme d'objet Java (Wrapper) int, long, boolean Integer, Long, Boolean ArrayList liste3 = new ArrayList (); liste3.add(0, 12); int total = liste3.get(0);

20 Aspect Oriented Programming Séparation de ce qui est fonctionnel de ce qui ne l'est pas dans le code, ce qui n'est pas fonctionnel est retiré de ce qui est fonctionnel Exemples Journalisation Sécurité Test Transaction

21 EJB3 et AOP Méta-données en ligne Avec les @Annotations Possibilité de garder le descripteur de déploiement des EJB2 ejb-jar.xml

22 Les Session Bean

23 Ecriture d'un Session Bean Interface Java Locale Annotation @Local Remote Annotation @Remote Classe Java avec annotation @Stateless ou @Stateful

24 Exemple Session Bean stateless Interface locale @Local public interface Bonjour { public String message (); }

25 Exemple Session Bean stateless Interface distante @Remote public interface RemoteBonjour { public String message (); }

26 Exemple La classe du Bean @Stateless @Remote ( { RemoteBonjour.class } ) @Local ( { Bonjour.class } ) public class BonjourBean implements Bonjour, RemoteBonjour { public String message() { return ''Bonjour Le Monde''; }

27 Entity Bean

28 Annotations spécifiques (1) Pour le type Entity @Entity Pour le mapping niveau table @Table (name=''matable'') @Column(name=''macolonne'') Clef primaire @Id @GeneratedValue

29 Annotations spécifiques (2) Relations @OneToOne @ManyToOne @OneToMany @ManyToMany Clef étrangère (mappedBy) @JoinColumn

30 Annotations spécifiques (3) Persistance par navigation Attribut (cascade=CascadeType.xxx) Spécialisation @DiscriminatorColumn(name='''') @DiscriminatorValue(value='''')

31 Exemple @Entity @Table(name = "etudiant") public class Etudiant implements Serializable { private int id; private String nom; public Etudiant () { } public Etudiant (String nom) { this.setNom(nom); } @Id @GeneratedValue public int getId () { return id; } public void setId (int id) { this.id = id; } public String getNom () { return nom; } public void setNom (String nom) {this.nom = nom; }... }

32 Les intercepteurs

33 Capables d'intercepter des invocations de méthodes Par délégation vers d'autres classes ou d'autres méthodes Dans la classe du bean lui-même Implémentation avec le paradigme AOP Affecte tous les services offerts par le bean

34 Les familles d'EJB pouvant être interceptées Message Driven Bean Session Bean Stateless Session Bean Stateful

35 Types d'intercepteur Interne Défini dans le Bean lui-même Une seule méthode interceptrice par classe Méthode Annotation: @AroundInvoke Signature: public Object (InvocationContext ctx) Externe Défini dans une classe externe au Bean Déclaré dans le Bean intercepté par Annotation: @Interceptors

36 Méthode d'implémentation Annotation de la méthode interceptrice @AroundInvoke Signature de méthode spécifique La méthode proceed() invoque l'objet suivant dans la chaîne des intercepteurs A la fin de la chaîne des intercepteurs la méthode du Bean est appelée

37 Exemple de méthode @AroundInvoke public Object MonIntercepteur(InvocationContext ctx) throws Exception { System.out.println("*** AVANT INTERCEPTION ***"); Object object = ctx.proceed(); System.out.println("*** APRES INTERCEPTION ***"); return object; }

38 Classe interceptrice Portée d'une classe interceptrice Défaut Invoquée sur tout invocation de méthode d'un des Bean du déploiement Nécessite le fichier de déploiement ejb-jar.xml Classe Méthode Un intercepteur externe suit le cycle de vie du Bean intercepté

39 Exemple d'intercepteur externe package composant; import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext; public class MonIntercepteur { @AroundInvoke public Object maMethodeInterceptrice(InvocationContext ctx) throws Exception { System.out.println("CLASSE INTERCEPTEE "+ctx.getTarget().getClass().getName()); System.out.println("METHODE INVOQUEE "+ctx.getMethod().getName()); Object[] col = ctx.getParameters(); if(col != null) System.out.println("INVOCATEUR "+ctx.getParameters()[0]); return ctx.proceed(); }

40 Exemple de fichier ejb-jar.xml * composant.MonIntercepteur...

41 Déclaration d'intercepteurs Au niveau de la classe du bean interceptée Annotation @Interceptors Plusieurs intercepteurs possibles Tableau de classes @Interceptors ({intercepteurs.MonIntercepteur.class}) @Stateless public class MonBean implements... {

42 Séquence d'interception

43 Exclusion d'intercepteurs Intercepteur niveau Default Intercepteur niveau Classe Annotations @ExcludeDefaultInterceptors @ExcludeClassInterceptors Fichier ejb-jar.xml Sections

44 Ordre des interceptions Par défaut Intercepteur externe Défaut Classe Méthode Intercepteur interne Configurable Section Du fichier ejb-jar.xml

45 Les Session Bean en détail

46 Deux types de Session Bean Sans état Stateless Avec état Stateful Leur cycle de vie est différent Session Bean Stateful Passivation (Passivate) Activation (Activate)

47 Pattern Session Bean

48 Session Bean Stateless Pas d'état conversationnel entretenu avec le client Cycle de vie Pas de passivation Méthodes événementielles (callback) @PostConstruct Invoquée quand le bean est créé, après toutes les injections de dépendance @PostDestroy Invoquée quand le bean est supprimé du pool ou détruit

49 Cycle de vie

50 Session Bean Stateful État conversationnel entretenu avec le client Cycle de vie Passivation Méthodes événementielles @PostConstruct, @PostDestroy @PrePassivate Invoquée avant que le bean est supprimé du pool pour être « swapé » sur disque (trop longtemps inactif) @PostActivate Invoquée quand le bean est de nouveau instancié dans le pool

51 Cycle de vie

52 Méthodes callback @Stateful public class MonBean implements MonBeanRemote {... @PostActivate public void postActivate() {... } @PrePassivate public void prePassivate() {... }

53 Les Entity Bean en détail

54 Cycle de vie

55 Méthodes du cycle de vie @PrePersist Invoquée juste avant que le bean est créé dans la base de données @PostPersist Invoquée juste après @PreRemove Invoquée juste avant que le bean est détruit dans la base de données @PostRemove Invoquée juste après

56 Méthodes du cycle de vie @PreUpdate Invoquée juste avant que le bean est modifié dans la base de données @PostUpdate Invoquée juste après @PostLoad Invoquée juste après que le bean ait été initialisé avec des données chargées à partir de la base de données

57 Clef primaire Déclaration @ID Elle peut être auto-générée @GeneratedValue(strategy=GenerationType.AUTO )

58 Verrouillage Verrouillage optimiste Par gestion de version Une exception est levée si les données sont changées par une autre partie @Version public int getVersion() { return version;} public void setVersion(int version) { this.version=version; }

59 Caractéristiques (1) Simples classes POJO Peuvent mapper vers un schéma déjà existant Verrouillage optimiste (version) Supportent les relations Supportent les associations et compositions

60 Caractéristiques (2) Supportent l'héritage Supportent les classes abstraites et le polymorphisme Génération de clef primaire Langage de requête et SQL natif Peuvent implémenter Les méthodes equals() et haschCode()

61 Gérant de beans Entity EntityManager Il interagit avec le contexte PersistenceContext Injecté par l'annotation @PersistenceContext Fournit les services Création, suppression, mise à jour

62 Entity Manager Représente une collection d'entités Sa portée est une unique transaction @Stateful public class AddressBookBean implements AddressBookRemote, AddressBookLocal { @PersistenceContext private EntityManager manager; public void addContact(Contact contact) { manager.persist(contact); } public void updateContact(Contact contact) {manager.merge(contact); } public void deleteContact(Contact contact) {manager.remove(contact); } }

63 Requêtes Langage EJBQL Méthode manager.createQuery() Langage SQL Méthode manager.createNativeQuery() public Collection findContact(String nom) { Query query = null; query = manager.createQuery("SELECT c FROM contact c WHERE c.nom = :contactNom"); query = query.setParameter("contactNom", nom); List contacts = query.getResultList(); return contacts; }

64 Relations Attribut mappedBy Permet de déclarer l'attribut de la relation qui correspond à la clef étrangère dans la base de données Entity A private B refb; Entity B private A refa; @OneToOne(mappedBy=''refb'') 11 correspond à la référence inverse

65 Spécialisation Stratégies Une seule table Une seule table pour toutes les classes de la dérivation Verticale Une table par classe Horizontale Une table par classe concrète

66 Une seule table Exemple @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = DiscriminatorType.STRING) @DiscriminatorColumn(name = "") public class MaClasse implements java.io.Serializable {...

67 Solution verticale Exemple @Entity @Inheritance(strategy = InheritanceType.JOINED) public class MaClasse implements java.io.Serializable {...

68 Solution horizontale Exemple @Entity @Inheritance(strategy = InheritanceType.TABLE_ PER_CLASS) public class MaClasse implements java.io.Serializable {...

69 Stratégies de chargement Eager Chargement des objets associés à un bean en même temps que le bean Lazy Chargement au fur et à mesure de la demande @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER, mappedBy=''refc'')

70 Stratégies de cascade Stratégies ALL PERSIST REMOVE REFRESH Comportement par défaut Pas de cascading

71 Ordonnancement des tâches

72 Service de gestion du temps Ordonnancement de notifications associées au temps pour tous les types de Bean Sauf pour les Session Bean Stateful Ordonnancement des invocations A une heure déterminée A intervalle de temps Après une durée

73 API interface TimeService Timer createTimer(Date initialExpiration, long intervalDuration, Serializable info) Create an interval timer whose first expiration occurs at a given point in time and whose subsequent expirations occur after a specified interval. Timer createTimer(Date expiration, Serializable info) Create a single-action timer that expires at a given point in time. Timer createTimer(long initialDuration, long intervalDuration, Serializable info) Create an interval timer whose first expiration occurs after a specified duration, and whose subsequent expirations occur after a specified interval. Timer createTimer(long duration, Serializable info) Create a single-action timer that expires after a specified duration.

74 Implémentation du timeout Méthode invoquée par notification de temps Annotée par @Timeout Création d'un objet Timer Service obtenu par injection de dépendance @Resource TimerService timerService; public void createTimer(long intervalDuration) { Timer timer = timerService.createTimer(intervalDuration,"Created a timer"); }

75 Déclaration d'un @Timeout avec JBoss @Stateless @Remote(ExampleTimer.class) public class ExampleTimerBean implements ExampleTimer { private @Resource SessionContext ctx; public void scheduleTimer(long milliseconds) { ctx.getTimerService().createTimer(new Date(new Date().getTime() + milliseconds), "Hello World"); } @Timeout public void timeoutHandler(Timer timer) { System.out.println("---------------------"); System.out.println("* Received Timer event: " + timer.getInfo()); System.out.println("---------------------"); timer.cancel(); } }

76 Transactions

77 Deux types de gestion CMT Container Managed Transaction Gestion des transactions prise en charge par le serveur d'applications Gestion par défaut BMT Bean Managed Transaction Gestion des transactions prise en charge par le programmeur

78 Attributs de transaction Rôle Contrôle la portée de la transaction Valeurs Required [ comportement par défaut ] RequiresNew Mandatory NotSupported Supports Never

79 Attribut Required Règle Si le client s'exécute dans une transaction et invoque une méthode du bean alors cette méthode s'exécute dans la transaction du client Si le client ne s'exécute pas dans une transaction alors une nouvelle transaction est démarrée avant l'appel de la méthode

80 Attribut RequiresNew Règle Si le client s'exécute dans une transaction et invoque une méthode du bean alors le serveur réalise les étapes suivantes: Suspend la transaction du client Démarre une nouvelle transaction Délègue l'appel de la méthode Reprend la transaction du client

81 Attribut Mandatory Rôle Si le client s'exécute dans une transaction et invoque une méthode du bean alors cette méthode s'exécute dans la transaction du client Si le client ne s'exécute pas dans une transaction alors une exception est levée (TransactionRequiredException)

82 Attribut NotSupported Règle Si le client s'exécute dans une transaction et invoque une méthode du bean alors le serveur suspend la transaction. Après l'exécution de la méthode le serveur reprend la transaction Si le client ne s'exécute pas dans une transaction alors aucune nouvelle transaction est démarrée

83 Attribut Supports Règle Si le client s'exécute dans une transaction et invoque une méthode du bean alors cette méthode s'exécute dans la transaction du client Si le client ne s'exécute pas dans une transaction alors aucune nouvelle transaction est démarrée

84 Attribut Never Règle Si le client s'exécute dans une transaction et invoque une méthode du bean alors le serveur lève une exception (RemoteException) Si le client ne s'exécute pas dans une transaction alors aucune nouvelle transaction est démarrée

85 Positionnement du type de gestion Annotation @TransactionManagement(argument) Arguments javax.ejb.TransactionManagerType.BEAN javax.ejb.TransactionManagerType.CONTAINER

86 Positionnement des attributs CMT Annotation @TransactionAttribute Valeurs @TransactionAttribute(REQUIRED) @TransactionAttribute(REQUIRES_NEW) @TransactionAttribute(MANDATORY) @TransactionAttribute(NOT_SUPPORTED) @TransactionAttribute(SUPPORTS) @TransactionAttribute(NEVER)

87 RollBack des transactions CMT Deux façons Après une exception, le rollback est automatique Appel de la méthode setRollbackOnly() sur l'objet EJBContext Pour tester le statut d'une transaction Méthode getRollbackOnly()

88 Méthodes non permises En mode CMT commit setAutoCommit rollback getUserTransaction

89 Sécurité

90 Fonctionnalités Règles Authentification Couple login + mot de passe Autorisation La notion de rôle Sources de données Fichier, LDAP, Base de Données Spécifiée par l'annotation @SecurityDomain

91 Déclaration des rôles Annotation @DeclareRoles({ ''roleA'', ''roleB'',... }) Test des rôles Avec l'objet SessionContext Obtenu par injection @Resource SessionContext ctx; Méthodes ctx.isCallerInRole(''roleA'') ctx.getCallerPrincipal()

92 Sécurité des applications EJB3 Granularité Méthode Par annotations @RolesAllowed @PermitAll @DenyAll

93 Propagation de la sécurité Granularité Bean Par annotation @RunAs

94 EJB et SOA

95 Exposer un EJB comme un service web Spécifications JSR 921 Web Services for Java EE Uniquement les Session Bean Stateless Annotations @WebService @WebMethod

96 Références java.sun.com/developer java.sun.com/javaee/5/docs/tutorial/doc/ jboss.org Spécifications java.sun.com/products/ejb/docs.html


Télécharger ppt "Enterprise Java Bean 3 Jean-Jacques LE COZ. Introduction Jean-Jacques LE COZ."

Présentations similaires


Annonces Google