Jee PDF
Jee PDF
Jee PDF
Sources
Cours de Pascal Déchamboux (FT R&D) pour l’école d’été ICAR 2003 à Autrans
Cours de Lionel Seinturier (LIFL) http://www2.lifl.fr/~seinturi/middleware/ejb3.pdf
Sommaire
Introduction
Approche à composants
u Packaging
u Gestion externalisée des dépendances
Modèles de programmation Java EE
u Clients
u Composants session
u Composants entité
u Composants mdb
Fonctions avancées
u Timers
u Gestion des transactions
u Gestion de la sécurité
Conclusion
© 2009, F. Boyer 2
Introduction
© 2009, F. Boyer 3
Java EE pour quoi faire ?
© 2009, F. Boyer 4
Architectures usuelles
Navigateur
Application Tiers Terminal
Web
Cliente Client Client
(Pages HTML)
Composants
de Tiers
présentation : Web
Servlet HTTP
+ Pages JSP
Serveur
Java EE
Composants Composants
d’entreprises : d’entreprises :
EJB (logique EJB (logique Tiers
métier + métier + Métier
données) données)
Tiers Serveur
Base de données Base de données « EIS » Base de données
© 2009, F. Boyer 5
Java EE sous l’œil de Darwin !
© 2009, F. Boyer 6
Ce que définit Java EE
Spécification
u Programmation, assemblage, déploiement
u Serveur et services
© 2009, F. Boyer 7
Vue générale de l’architecture Java EE
Application J2EE
RMI
Container
WS Container Web Containers EJB Connecteurs
Container Client Container J2EE Serveur
CLIENT LOURD
SAX,DOM,XSLT)
Sécurité (JAAS)
Mail (JavaMail)
SGBD (JDBC)
Web (Servlet,
MOM (JMS)
Connecteurs
Transaction
XML (JAXP,
(JTA, JTS)
JSP, JSF)
(JNDI)
(JCA)
HTTP
RMI
WS
SERVEUR J2EE
CLIENT LEGER
Bases de Données
(Oracle, …)
© 2009, F. Boyer 8
Configurations possibles d’un
serveur Java EE : clients lourds
Application Application
Cliente Cliente
Application Java EE :
Architecture centralisée Services (jdbc, EJB
mail, jca, etc)
Services (jdbc,
mail, jca, etc)
Application Application
Cliente Cliente
© 2009, F. Boyer 9
Configurations possibles d’un
serveur Java EE : clients Web
Navigateurs Navigateurs
(HTML, WML) (HTML, WML)
Navigateurs Navigateurs
(HTML, WML) (HTML, WML)
Application Java EE :
Architecture Web Servlet Servlet
/
Serveur réparti
EJB EJB EJB
© 2009, F. Boyer 10
Offre importante
Offre commerciale
u IBM / WebSphere (n° 1)
u BEA / WebLogic
u Sun One
u Oracle 9i Application Server
u Et aussi Borland Entreprise Server, Macromedia / Jrun, SAP Web
Application Server, Iona / Orbix E2A
Offre « open source »
u JBoss (Red Hat)
u JOnAS (ObjectWeb)
u GlassFish (Sun)
u …
© 2009, F. Boyer 11
Vers Java EE 5
Simplification du développement
u Relâchement des contraintes / programmation des composants
u Utilisation des annotations amenées par Java SE 5
Enrichissement fonctionnel
u Amélioration du support du tiers de présentation avec Ajax / Flex
u Support complet des Web Services
v Sessions exposables avec RMI ou avec Web Services
u Amélioration du support des objets persistants avec Java
Persistence API (un grand pas vers JDO!)
© 2009, F. Boyer 12
Approche à composants
Définition
Packaging
Gestion externalisée des dépendances
- Inversion de contrôle
- Conteneurs
- Définition et programmation des composants
© 2009, F. Boyer 13
Notion de composant
Szyperski 2002
© 2009, F. Boyer 14
Composants Java EE
Différents profils
u Session Beans (EJB)
v Instances dédiées à un contexte d’interaction client particulier
v Avec / sans état
u Message Driven Bean (EJB)
v Instances réagissant à l’arrivée de messages asynchrones
u Entity Beans
v Instances partagées représentant les données de l’entreprise
u Servlets
v Composants de présentation
© 2009, F. Boyer 15
Exemple d’application: Inscription à
une conférence
Application MDB de
…
client signalisation
"lourd" à un
Envoi d’un
secrétariat
e-mail
© 2009, F. Boyer 16
Packaging de l'application
Application ICAR
u Application JEE
Application ICAR
u Packaging : icar.ear
Présentation ICAR u Contient 2 archives
Servlet/JSP Module de présentation
+
u Spécifique à ICAR
Ressources de présentation
(images, etc.) u Packaging : icarweb.war
Module métier
Métier "école thématique"
u Gestion d'une école thématique
EJB u Non spécifique à l'école ICAR
+ (réutilisable)
Classes persistantes
u Packaging : ecole_them.jar
u Contient code des EJB et des
composants persistants
© 2009, F. Boyer 17
Package "icar.ear"
© 2009, F. Boyer 18
Package "webicar.war"
© 2009, F. Boyer 19
Package "ecole_them.jar"
© 2009, F. Boyer 20
Gestion externalisée des
dépendances
u un autre EJB
v Exemple: Servlet d’inscription à EJB Inscription
© 2009, F. Boyer 21
Inversion de contrôle
© 2009, F. Boyer 22
Inversion de contrôle (2)
…
CONTENEUR
u Pas de liaison statique entre
modules de code applicatif et
services plate-forme
u Eviter l’utilisation de code SERVICE 1
…
SERVICE 2
« technique » dans le code
applicatif SERVICE N
© 2009, F. Boyer 23
Rôle d’un conteneur
© 2009, F. Boyer 24
Principe de mise en oeuvre des
conteneurs
Injection
u Injection des propriétés
u Injection des dépendances entre composants
u Injection des dépendances entre composants et services de l'infrastructure
Interception
u Interception des appels vers/depuis les composants
v Pour gérer les appels aux services non fonctionnels
Callbacks applicatifs
u Spécialisation de la gestion des dépendances et du cycle de vie (création, destruction,
activation, passivation)
© 2009, F. Boyer 25
Principe du conteneur Java EE
CONTENEUR
Cycle de vie
Interface
dépendances
Gestion des
des intercepteurs
dépendances
« local »
Gestion des
Instance
de
composant
Interface EJB3.0: gestion des
« remote » dépendances injectée
dans les composants
Contexte
Bean session (EJB3.0)
© 2009, F. Boyer 26
Principaux conteneurs Java EE
Conteneur de persistance
u Indépendant de JEE
u Intégré par le conteneur EJB
u Basé sur les principes des composants (JPA)
© 2009, F. Boyer 27
Gestion externalisée des
dépendances
u Méta-information
v Définition des dépendances
v Sous forme d’annotations
v Surchargées par des descripteurs XML optionnels
© 2009, F. Boyer 28
Dépendances vers une propriété, un
EJB ou une ressource
© 2009, F. Boyer 29
Définition de dépendances vers une
propriété
// Code du composant
…
class InscriptionBean implements Inscription {
@Resource private int maxPart = 120; // maximum de participants
© 2009, F. Boyer 30
Définition de dépendances vers un
EJB (principe)
© 2009, F. Boyer 31
Définition de dépendances vers une
usine à connexions JDBC
© 2009, F. Boyer 32
Définition de dépendances vers une
ressource JMS
@Resource(mappedName="java:/TopicInscriptions09")
javax.jms.Topic topicInscription;
© 2009, F. Boyer 33
Accès au contexte d'un composant
void setSessionContext(SessionContext c) {
ctxt = c;
}
…
}
© 2009, F. Boyer 34
Modèles de programmation des
composants Java EE
- Composants EJB
Session
Orienté message
- Composants Entity
© 2009, F. Boyer 35
Une conception classique J2EE
Client lourd
© 2009, F. Boyer 36
Bean Session
Stateful / Stateless
u Annotation @Stateful / @Stateless (javax.ejb)
© 2009, F. Boyer 37
Bean Session (interface Remote)
package ecole_them;
import javax.ejb.Remote;
@Remote
public interface Inscription {
public void enregistre(String nom, …);
public void confirme();
public … infos(String nom);
}
© 2009, F. Boyer 38
Bean Session (interface WebService)
package ecole_them;
import javax.ejb.*;
© 2009, F. Boyer 39
Bean Session (Implantation)
package ecole_them;
import javax.ejb.*;
@Stateless
public class InscriptionBean implements Inscription {
© 2009, F. Boyer 40
Dépendance vers un bean session depuis un
composant local (même ear)
package ecole_them;
import javax.ejb.*;
@EJB
private Inscription inscription;
import javax.ejb.*;
© 2009, F. Boyer 43
Bean Session (DTO)
package ecole_them;
import javax.ejb.Remote;
@Remote
public interface Inscription {
public void enregistre(String nom);
public void confirme();
public ParticipantDTO infos(String nom);
}
© 2009, F. Boyer 44
Entity Beans
© 2009, F. Boyer 45
Mapping objet-relationnel
© 2009, F. Boyer 46
Mapping avec la base de données
© 2009, F. Boyer 47
Mapping avec la base de données
Colonne de jointure
u @JoinColumn(name=".. ", referencedColumnName=" .. ")
Table de jointure
Nom de l’attribut dans la classe
u @JoinTable
© 2009, F. Boyer 48
Fichier de définition des unités de
persistance : "persistence.xml"
<persistence>
<persistence-unit name="DonneesInscriptions">
<jta-data-source>jdbcInscriptions</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
...
</persistence-unit>
</persistence>
© 2009, F. Boyer 49
API du système de persistance
© 2009, F. Boyer 50
Programmation d'un Entity Bean
Annotations de classes
u @Entity pour définir une classe correspondant à un bean entité
u @NameQuery pour associer une requête nommée à ce bean
© 2009, F. Boyer 51
Programmation d’un Entity Bean
© 2009, F. Boyer 52
Programmation d’un Entity Bean
© 2009, F. Boyer 53
Dépendance vers des Entity Beans
@Stateless
public class InscriptionBean implements Inscription {
@PersistenceContext private EntityManager em; // em injecté
Collection<Participant> participantsFinder() {
Query q = em.createNamedQuery("tousLesParticipants");
return q.getResultList();
}
@Stateless
public class InscriptionBean implements Inscription {
@PersistenceContext
private EntityManager em;
...
© 2009, F. Boyer 55
Les relations
u Gestion optimisée
u Cardinalité 1-1, 1-n, n-1, n-n
v @OneToOne, @OneToMany, @ManyToOne, @ManyToMany
u Principe
v Annote un champ d’une classe
v Attribut mappedBy permet de désigner le champ qui définit la
relation dans l’autre classe
© 2009, F. Boyer 56
Sans les relations…
ENTREPRISE PARTICIPANT
ENTREPRISE_ID PARTICIPANT_ID
NOM NOM
.. ENTREPRISE_PARTICIPANTS
ENTREPRISE_ID
Les colonnes
ENTREPRISE_PARTICIPANTS et
ENTREPRISE_ID représentent les
mêmes informations !!
© 2009, F. Boyer 57
Avec les relations
(OneToMany / ManyToOne)
© 2009, F. Boyer 58
Avec les relations (ManyToMany)
© 2009, F. Boyer 59
Message Driven Beans (MDB)
Base JMS
u ConnectionFactory pour créer des queues/topics
u Connection pour créer une connexion vers une queue / un topic
© 2009, F. Boyer 60
Bean Message Driven
@MessageDriven(
activationConfig =
{ @ActivationConfigProperty(
propertyName="destination", propertyValue="InscriptionsQueue"),
@ActivationConfigProperty(
propertyName="destinationType", propertyValue="javax.jms.Queue")
})
public class NouvelleInscriptionBean implements
javax.jms.MessageListener{
@resource private String secretaireEcole = "ecole.secretaire@monorg.fr";
@Resource(mappedName="jms/ConnectionFactory")
private static ConnectionFactory connectionFactory;
@Resource(mappedName=”jms/InscriptionQueue”)
private static Queue queue;
© 2009, F. Boyer 62
Fonctionnalités avancées
- Timer Beans
- Callbacks applicatives
- Transactions
- Sécurité
© 2009, F. Boyer 63
Composants EJB Timer
@
Pour les beans sans état seulement
Resource TimerService permet de créer des timers
Timer permet de déclencher des actions
périodiquement
@Stateless
public class InscriptionBean implements Inscription, TimerSession {
@Resource TimerService timerService;
© 2009, F. Boyer 64
Callbacks applicatives :
spécialisation du cycle de vie
Permet d’ajouter des traitements métier à certains moments du cycle de vie d’un
bean
Session bean
u @PostConstruct : après la création
u @PreDestroy : avant la destruction
u @PrePassivate : avant la passivation (swapping out), seulement pour statefull
u @PostActivate : après l’activation (swapping in)
u @afterBegin : après le démarrage d’une transaction, avant invocation de toute méthode
métier
u @beforeCompletion : juste avant la terminaison de la transaction
u @afterCompletion : juste avant la terminaison de la transaction
Entity bean
u @ejbCreate
u @ejbPostCreate
u @ejbRemove
u @ejbPostRemove
u …
© 2009, F. Boyer 65
Callbacks applicatives : intercepteurs
© 2009, F. Boyer 66
Gestion des transactions
Propriétés ACID
u Atomicity, Consistency, Isolation, Durability
Utilisation de javax.transaction.UserTransaction
Contrôle de la transaction (timeout, « rollbackonly »)
© 2009, F. Boyer 67
Exemple de gestion transactionnelle
programmative (client lourd)
...
UserTransaction utx
=ctxt.lookup("javax.transaction.UserTransaction");
utx.begin();
utx.commit(); // ou utx.rollback();
}
© 2009, F. Boyer 68
Gestion déclarative des transactions
(« container-managed »)
© 2009, F. Boyer 69
Exemple de gestion transactionnelle
déclarative
…
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class InscriptionBean implements Inscription {
@Resource
private SessionContext context;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void enregistre(String nom) {
...
} catch(EnregistrementException e) {
context.setRollbackOnly();
}
...
}
...
© 2009, F. Boyer 70
Exemple de gestion transactionnelle
déclarative
© 2009, F. Boyer 71
Gestion de l'authentification et des
autorisations
Notions de base
u "principal"= identifiant (utilisateur)
u "credential"="principal" authentifié
u "role"=profil d'autorisation Navigateur
Web
Authentification requête réponse
formulaire infos
u Valide un "principal" et associe un ressource
de "login" d'authentification
ressource
protégée protégée
Conteneur
"credential" à sa session
Authentification à "crédential" Web
u "credential" passé au système
d'autorisation Autorisation
Autorisation servlet
Conteneur
u Vérification de droits d'utilisation ou
EJB
d'accès Autorisation
© 2009, F. Boyer 72
Principes de Sécurité
web.xml :
<login-config>
<auth-method>BASIC </auth-method>
<realm-name>InscriptionsRealm </realm-name>
</login-config>
<security-constraint>
<web-resource-collection>
<web-resource-name> Inscription Admin </web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>ADMIN</role-name>
</auth-constraint>
</security-constraint>
© 2009, F. Boyer 73
Exemple de gestion de sécurité
déclarative
…
@DeclareRoles(“BUYER”, “ADMIN”)
@Stateless
...
public class InscriptionBean implements Inscription {
@RolesAllowed(“ADMIN”)
public void desenregistre(String nom) {
...
}
@PermitAll
public void enregistre(String nom) {
...
}
© 2009, F. Boyer 74
Conclusion
Problèmes de maturité
u Persistance (co-existance avec JDO)
u Modèle de composants (manque d’homogénéité, problèmes avec gestion
de l’héritage)
© 2009, F. Boyer 75
Plus d’information…
http://java.sun.com/
http://www.theserverside.com/
http://developer.java.sun.com/developer/technicalArti
cles/J2EE/
http://developer.java.sun.com/developer/onlineTrainin
g/J2EE/
http://www.triveratech.com/
http://jonas.objectweb.org/
© 2009, F. Boyer 76