Entreprise Java Beans

Transcription

Entreprise Java Beans
Java Enterprise Edition
EJB3 / Troisième partie
Matthieu EXBRAYAT
Master 2 RIA
Université Louis Pasteur
1
Plan
Cycle
de vie et callbacks
Intercepteurs
Transactions et sécurité
Timers
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
2
Cycle de vie
Les
EJB sont gérés par le containers
Création,
Quels
Quelle
destruction, etc.
sont les états possibles?
prise a-t-on sur les transitions ?
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
3
Cycle de vie : Session Stateless
Does not exist
Class.newInstance()
@PreDestroy
Injections
@PostConstruct
Method-ready
pool
Méthode métier
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
4
Notion de callback

Des opérations peuvent être nécessaires lors des
transitions


Dans les versions antérieures

Une méthode par type de transition

Imposée et souvent vide
Avec les EJB3 (grâce à Java 5)

Utilisation de tags

callback
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Organisation d’un callback

@TypeCallBack
methodeDeCallBack() { …}

Le nom de la méthode est choisi par le développeur

Elle est de type void, et sans paramètre, ne lève
d’exceptions contrôlées (nécessitant un try/catch)

Invocation par le container lors du changement d’état
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Callbacks du Session Stateless
 @PostConstruct
 Initialisation
du bean, ne relevant pas du « new », ni
des ressources injectables
 Exemple
: socket, accès fichier, etc.
 @PreDestroy
 Permet
essentiellement de nettoyer ce qui a été
ouvert dans le PostConstruct
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Pooling : exécution de méthode
Stub
Objet EJB
Contexte
Client
Instances
du bean
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Pool
Pooling : invocation terminée
Stub
Objet EJB
Client
Pool
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Cycle de vie : Session stateful
Exception système
Does not exist
timeout
Class.newInstance()
@PreDestroy
timeout
Injections
@PostConstruct
@PrePassivate
Method-ready
Méthode métier
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
@PostActivate
Passivé
Passivation

Pooling impossible

Comment gérer les ressources ?

Solution : stocker en mémoire secondaire (LRU)

Passivation

Stocke l’état conversationnel en mémoire secondaire et déréférence
l’instance

Activation

Recrée l’instance (et ses attributs) et reconnecte à l’objet EJB
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Etat conversationnel
Contexte
Transaction
EM
et EMFactory
Références
aux ressources et EJB
(Attributs)
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Etat prêt
Stub
Objet EJB
Contexte
Client
Instance
du bean
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Etat passivé
Stub
Objet EJB
Client
État conversationnel
(et attributs)
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Timeout et exceptions système


Timeout

déclarés au déploiement

Dépend du serveur d’application

Pas de timeout en cours de transaction

@PreDestroy pas obligatoire
Exceptions système

Pas de @PreDestroy
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Cycle de vie : entity

En EJB3, lié aux interactions avec l’EM

@PrePersist

@PostPersist

@PostLoad (chargement et refresh)

@PreUpdate

@PostUpdate

@PreRemove

@PostRemove
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Cycle de vie : MDB
Does not exist
Class.newInstance()
@PreDestroy
Injections
@PostConstruct
Method-ready
pool
Méthode métier
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
17
Plan
Cycle
de vie et callbacks
Intercepteurs
Transactions et sécurité
Timers
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
18
Intercepteurs

Les intercepteurs permettent d’effectuer des actions lors de
l’appel de diverses méthodes.

Permettent d’enrichir la gestion des beans au niveau du
container

Appel global ou ciblé sur certaines méthodes

A quoi ça peut bien servir ? ...

Exemples ?
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Intercepteurs


Ils peuvent être définis dans des classes séparées

@Interceptors({« classe1 », « classe2 »…})

Invocation dans cet ordre

@Interceptor (« classe1 »)
Ou directement dans la classe


@AroundInvoke
Exécution de la méthode : proceed
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Exemple
@Stateful
public class CalculatorBean implements Calculator {
/ / Bean methods that are to be intercepted by "log()"
/ / ... ...
@AroundInvoke
public Object log (InvocationContext ctx)
throws Exception {
String className = ctx.getBean().getClass().getName();
String methodName = ctx.getMethod().getName();
String target = className + "." + methodName + "()";
long start = System.currentTimeMillis();
System.out.println ("Invoking " + target);
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
try {
return ctx.proceed();
} catch(Exception e) {
throw e;
} finally {
System.out.println("Exiting " + target);
cal.setTrace(cal.getTrace() + "Exiting " + target);
long time = System.currentTimeMillis() - start;
System.out.println("This method takes " + time + "ms to execute");
}
}
}
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Méthodes du contexte d'invocation
public interface InvocationContext {
public Object getBean();
// Le bean qui est intercepté
public java.lang.reflect .Method getMethod();
public Object [] getParameters();
// La méthode interceptée (reflection)
// Les paramètres de la méthode
public void setParameters(Object [] params);
// Modif des paramètres
public EJBContext getEJBContext ();
// Contexte de l’EJB
public java.util.Map getContextData();
// permet de passer des infos
// entre méthodes d’interception (chaine d’interception)
public Object proceed() throws Exception;
// Exécution de la méthode interceptée
}
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Entity Listeners
Pas
d'intercepteurs pour entities.
Classes
listeners associées aux callbacks
Méthodes
void avec entity en paramètre
@EntityListeners
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Exemple (listener)
public class Logger {
@PostPersist void postInsert(Object entity) {
System.out.println(« Entity inséré : »+entity.getClass().getName();
}
}
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Exemple (entity)
@Entity
@Listeners({Logger.class})
public class MaClasse {
...
@PostPersist void afterInsert() {
...
}
}
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Plan
Cycle
de vie et callbacks
Intercepteurs
Transactions et sécurité
Timers
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
27
Les Transactions / Définition
 Une transaction est une série d’opération qui s’exécute dans une
même unité de travail
 Cette unité de travail respecte les principes suivants:
 Atomicité : toutes les ressources impliquées dans une transaction sont
« committées », ou aucune ne l’est
 Cohérence : soit la transaction réussit et les données sont valides à la fin, soit elle
échoue et les données retrouvent leur état – valide – initial
 Isolation : tout changement d’état dans une transaction non encore « committée »
est invisible de l’extérieur de la transaction
 Durabilité : les données « committées » le sont de telle façon que si le système
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
crashait, elles seraient restaurées au redémarrage
Les Transactions JTA
 Une transaction JTA (Java Transaction API) est gérée
par la plate-forme J2EE
 Elle peut inclure de multiples composants (servlets, JSP,
EJB, bases de données, etc) et propager le contexte
transactionnel de l’un à l’autre
 L’avantage est que cette propagation est complètement
transparente au programmeur
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Les Transactions / JTA et JTS
 JTA est une API permettant l’accès à une gestion
transactionnel indépendamment de l’implémentation
 JTS spécifie l’implémentation de JTA et de l’OTS 1.1 de
l’OMG. Il propage les transactions via IIOP
 Les composants ne doivent pas interagir avec JTS mais
utiliser JTA et l’interface
javax.transaction.UserTransaction
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Les Transactions JTA / Interface UserTransaction
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Les Transactions / Interface Status
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Les Transactions / Types de transactions
 Par programmation (bean managed)
C’est le développeur qui est responsable de la transaction
dans le bean (begin, commit, rollback…)
 Déclarative (Container-Managed Transaction)
C’est le container qui est responsable de la transaction
C’ est le mode obligatoire pour les Entity Bean
 Initialisée par le client
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
C’est le code client qui est responsable de la transaction
Les Transactions / Transaction par programmation
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
BMT

@TransactionManagement(TransactionManagerType.BEAN)

@Resource SessionContext ejbContext;

ejbContext.getUserTransaction();

ut.begin() / commit() / rollback()

Stateless : dans une méthode

Statefull : peut être sur plusieurs (attribut)
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Les Transactions / Transaction déclarative
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Transaction initialisée par le client
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Container-Managed Transactions
 Pour chaque méthode métier du bean (ou pour la classe
entière), il faut spécifier un attribut de transaction
 Cet attribut précise le comportement transactionnel du bean
 Six valeurs possibles:
 Required
 Mandatory
RequiresNew
Supports
NotSupported
Never
 Cette spécification se fait par annotation (ou DD)
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Concrètement...
Quand
commence une transaction ?
Quand
se finit-elle ?
Commit
ou rollback ?
Annotation
 Par
: @TransactionAttribute(TYPE)
classe et/ou par méthode
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
CMT

Required:
 Le bean s’exécute toujours dans une transaction
 Si une transaction est en cours, alors elle est utilisée, sinon une nouvelle
démarre
 Cet valeur d’attribut correspond à un fonctionnement logique dans la
plupart des cas
 RequiresNew
 Le container créé une nouvelle transaction à chaque fois que le bean est
appelé
 Si une transaction est en cours, alors le conteneur:
1. suspend cette transaction
2. en démarre une nouvelle
3. appelle la méthode
4. reprend la transaction originale après exécution
 Si aucune transaction n’est en cours, alors le conteneur en démarre une
nouvelle
 A utiliser si la méthode doit être exécutée dans un contexte transactionnel
EJB et Java EEdistinct
– Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
CMT
 Supports:
 Si une transaction est en cours, alors le conteneur l’utilise, sinon exécute
l’appel sans en démarrer de nouvelle
 A utiliser avec précaution
 Mandatory
 Si une transaction est en cours, alors le conteneur l’utilise, sinon lance
une javax.ejb.TransactionRequiredException ou
javax.ejb.TransactionRequiredLocalException
 A utiliser si la méthode doit être exécutée dans le contexte transactionnel
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
du client
Container-Managed Transactions

NotSupported:
 Si une transaction est en cours, alors le conteneur la suspend, appelle la méthode
hors transaction et reprend la transaction du client
 Si aucune transaction n’est en cours, alors la méthode est exécutée hors
transaction
 A utiliser si la méthode n’a pas besoin de contexte transactionnel
 Peut augmenter les performances
 Never
 Si une transaction est en cours, alors le conteneur lance une
EJB et Java EE java.rmi.RemoteException,
– Matthieu EXBRAYAT – Master 2 RIA / ULPsinon
2007
il exécute la méthode hors transaction
Attributs autorisés suivant type d’EJB
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Sécurité sous J2EE
 Trois

Authentification


Pas spécifié, mais faisable
Contrôle d’accès


niveaux de sécurité pour 1 appli :
Fourni par J2EE (identités, rôles…)
Communications sécurisées

Hors spéc, mais courant (ssl, https)
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Identité de sécurité
 Un
client qui se connecte au serveur d’EJB est
associé à une identité de sécurité pour la durée
de la session.
 Une identité de sécurité = objet
java.security.Principal
 La gestion des identités incombe au serveur
d’application
 Rôle = groupe d’une ou plusieurs identités
 Accès aux ejb (et méthodes) suivant rôle de
sécurité.
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Contrôle d’accès basé sur les rôles

Les droits d’accès sont gérés au niveau des annotations
(ou descripteurs de déploiement)

En entrée :security-role + method-permission : liste
des rôles reconnus et droits d’accès suivant ces rôles

En sortie : runAs : permet de redéfinir l’identité «
interne » de l’appelant (ou plus exactement de l’EJB).
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Annotations bean
 @SecurityDomain
 Mode
de contrôle des rôles
 Exemple
: other = users.properties + roles.properties
 @RolesReferenced
 Liste
des rôles utilisés dans l'EJB
@RunAs
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Comment le client s’identifie-t-il ?
 Client
« lourd » :

Identification lors du lookup

On transfère des propriétés : login et mot de passe
 Client

« léger »:
L’identification se fait lors de l’accès au servlet (par
exemple)

Spécifier ce qui est protégé (permet authentification), et qui
y a accès (permet contrôle)
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Identification via jndi
Properties prop=new Properties();
prop.put(Context.SECURITY_PRINCIPAL,login);
prop.put(Context.SECURITY_CREDENTIALS,passwd);
javax.naming.Context jndiContext=new javax.naming.InitialContext(prop);
…jndiContext.lookup(« …. »);
Lors du lookup, les informations d’identification sont transférées
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Identification depuis un client web
 On
définit les rôles et la méthode
d’authentification au niveau du descripteur de
déploiement web.xml
 Contrôle :

Dans jboss, plusieurs méthodes existent
Fichier login/password
 Base de données
 Annuaire ldap
…


Le plus simple (pour tester) :
Fichiers users.properties et roles.properties dans [/
…]/jboss…/server/…/conf
 Par exemple dans jboss…/server/default/conf

EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Exemple de fichiers simples d’authentification
 users.properties
 user1=passwd1
user2=passwd2
 roles.properties
 user1=admin
user2=guest
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Plan
Cycle
de vie et callbacks
Intercepteurs
Transactions et sécurité
Timers
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007
Timers... en bref
Il
existe un service Timer
Il
permet de définir une tâche à exécuter à
une date précise (timeOut)
Pour
en savoir plus : cf doc EJB3.0
Pour
des tâches répétitives ?
EJB et Java EE – Matthieu EXBRAYAT – Master 2 RIA / ULP 2007

Documents pareils