Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parGéraldine Gobeil Modifié depuis plus de 8 années
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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.