Java Enterprise Edition EJB3 / Troisième partie. Matthieu EXBRAYAT Master 2 RIA Université Louis Pasteur



Documents pareils
Java EE. Java Enterprise Edition. Pierre-Yves Gibello - pierreyves.gibello@experlog.com (Mise à jour : Septembre 2011)

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Composants logiciels Exemples : Java Beans, Enterprise Java Beans

EXA1415 : Annotations

J2EE. Java2 Enterprise Edition. Pierre Yves Gibello Mise à jour : 30 Septembre 2004

Cedric Dumoulin (C) The Java EE 7 Tutorial

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

JOnAS & EasyBeans EMN 29 Novembre 2007

Java Naming and Directory Interface

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

Une introduction à la technologie EJB (2/3)

Compte Rendu d intégration d application

Auto-évaluation Aperçu de l architecture Java EE

JOnAS Day 5.1. Clustering

J2EE - Introduction. Développement web - Java. Plan du chapitre

Plan. Department of Informatics

1. Installation d'un serveur d'application JBoss:

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Environnements de Développement

Applications des patrons de conception

Europa. Développement JEE 5. avec Eclipse. K a r i m D j a a f a r. A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i

Présentation du cours. Sécurité dans Java EE. Plan (1/2) Plan (2/2) Généralités sur la sécurité

Documentation de la plate forme JOnAS

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Mise en œuvre des serveurs d application

Documentation de la plate forme JOnAS. Frederic Maistre

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

JOnAS 5. Serveur d application d

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Introduction à la plateforme J2EE

Réalisation : Encadrés par : BEN GHORBEL Mohamed Zied OUESLATI Cherif. Mr. ROMDHANI Mohamed

2 Chapitre 1 Introduction

Refonte front-office / back-office - Architecture & Conception -

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Patrons de Conception (Design Patterns)

Les processus métiers : concepts, modèles et systèmes

Application web de gestion de comptes en banques

Cours en ligne Développement Java pour le web

Java pour le Web. Cours Java - F. Michel

Web Tier : déploiement de servlets

Développement, déploiement et sécurisation d'applications JEE

Création d une application JEE

Remote Method Invocation (RMI)

Composants Logiciels. Le modèle de composant de CORBA. Plan

Alfstore workflow framework Spécification technique

Conception et Implémentation d un serveur d applications dans le cadre du projet EISMO

ADMINISTRATION DE ADOBE LIVECYCLE MOSAIC 9.5

Evaluation Idéopass Cahier d analyse technique

Le développement d applications Web

Création d un service web avec NetBeans 5.5 et SJAS 9

Oracle9i Application Server version 2

Introduction aux «Services Web»

Authentification et contrôle d'accès dans les applications web

Modèle d Administration des Systèmes Distribués à Base de Composants.

Ré-architecture et migration d une application standalone vers un serveur applicatif multi-tiers dans un contexte JAVA-SAP

Messagerie asynchrone et Services Web

Architectures n-tiers Intergiciels à objets et services web

Threads. Threads. USTL routier 1

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

IBM Software Group. WebSphere XD. Compute Grid. An IBM Proof of Technology IBM Corporation

TP WEBSERVICES. 1 Pré-requis. 1.1 L environnement de développement. 1.2 Les librairies nécessaires 1.3 SOAPUI

RMI le langage Java XII-1 JMF

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Programmation par composants (1/3) Programmation par composants (2/3)

ENVOLE 1.5. Calendrier Envole

Projet. But: consultation en temps réel d événements (cours de bourse, trafic d envoi SMS ) sur des téléphones portables. Serveur de diffusion

Maîtriser le menu contextuel dans un OfficeBean

Cours 1: Java et les objets

Oracle Maximum Availability Architecture

Remote Method Invocation Les classes implémentant Serializable

IBM WebSphere Application Server 5.0 : Administration avancée

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Remote Method Invocation en Java (RMI)

Le passage à l échelle de serveur J2EE : le cas des EJB

Synchro et Threads Java TM

Rapport de projet de fin d études

10. Base de données et Web. OlivierCuré

SNMP for cloud Jean Parpaillon. SNMP4cloud - 1

4. SERVICES WEB REST 46

EJB. Karim Bouzoubaa Issam Kabbaj

Architecture applicative et Cartographie

Europa. Développement JEE 5. avec Eclipse. K a r i m D j a a f a r. A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i

Projet gestion d'objets dupliqués

Augmenter la disponibilité des applications JEE grâce au clustering : Le projet open source JShaft

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

CIBLE DE SECURITE CSPN DU PRODUIT PASS. (Product for Advanced SSO)

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

NFP111 Systèmes et Applications Réparties

Installation du client

CAS, la théorie. R. Ferrere, S. Layrisse

ScTools Outil de personnalisation de carte

Présentation J2EE. Stéphane Croisier, Directeur Serge Huber, Directeur Technique. 13 Juin Jahia Ltd. All rights reserved.

Meta Object Facility. Plan

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Sécurisation des architectures traditionnelles et des SOA

Développement d un réseau social modulaire

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Transcription:

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 2

Cycle de vie Les EJB sont gérés par le containers Création, destruction, etc. Quels sont les états possibles? Quelle prise a-t-on sur les transitions? 3

Cycle de vie : Session Stateless Does not exist @PreDestroy Class.newInstance() Injections Method-ready @PostConstruct pool Méthode métier 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

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

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

Pooling : exécution de méthode Stub Objet EJB Contexte Client Instances du bean Pool

Pooling : invocation terminée Stub Objet EJB Client Pool

Cycle de vie : Session stateful Does not exist Exception système Class.newInstance() timeout timeout @PreDestroy Injections @PostConstruct Method-ready @PrePassivate @PostActivate Passivé Méthode métier

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

Etat conversationnel Contexte Transaction EM et EMFactory Références aux ressources et EJB (Attributs)

Etat prêt Stub Objet EJB Contexte Client Instance du bean

Etat passivé Stub Objet EJB Client État conversationnel (et attributs)

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

Cycle de vie : entity En EJB3, lié aux interactions avec l EM @PrePersist @PostPersist @PostLoad (chargement et refresh) @PreUpdate @PostUpdate @PreRemove @PostRemove

Cycle de vie : MDB Does not exist @PreDestroy Class.newInstance() Injections Method-ready @PostConstruct pool Méthode métier 17

Plan Cycle de vie et callbacks Intercepteurs Transactions et sécurité Timers 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?

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

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);

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"); } } }

Méthodes du contexte d'invocation public interface InvocationContext { public Object getbean(); // Le bean qui est intercepté public java.lang.reflect.method getmethod(); // La méthode interceptée (reflection) public Object [] getparameters(); // Les paramètres de la méthode public void setparameters(object [] params); // Modif des paramètres public EJBContext getejbcontext (); public java.util.map getcontextdata(); // Contexte de l EJB // 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 }

Entity Listeners Pas d'intercepteurs pour entities. Classes listeners associées aux callbacks Méthodes void avec entity en paramètre @EntityListeners

Exemple (listener) public class Logger { @PostPersist void postinsert(object entity) { System.out.println(«Entity inséré :»+entity.getclass().getname(); } }

Exemple (entity) @Entity @Listeners({Logger.class}) public class MaClasse {... @PostPersist void afterinsert() {... } }

Plan Cycle de vie et callbacks Intercepteurs Transactions et sécurité Timers 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 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

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

Les Transactions JTA / Interface UserTransaction

Les Transactions / Interface Status

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 C est le code client qui est responsable de la transaction

Les Transactions / Transaction par programmation

BMT @TransactionManagement(TransactionManagerType.BEAN) @Resource SessionContext ejbcontext; ejbcontext.getusertransaction(); ut.begin() / commit() / rollback() Stateless : dans une méthode Statefull : peut être sur plusieurs (attribut)

Les Transactions / Transaction déclarative

Transaction initialisée par le client

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 RequiresNew Supports Mandatory NotSupported Never Cette spécification se fait par annotation (ou DD)

Concrètement... Quand commence une transaction? Quand se finit-elle? Commit ou rollback? Annotation : @TransactionAttribute(TYPE) Par classe et/ou par méthode

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 distinct

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 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 java.rmi.remoteexception, sinon il exécute la méthode hors transaction

Attributs autorisés suivant type d EJB

Sécurité sous J2EE Trois niveaux de sécurité pour 1 appli : Authentification Pas spécifié, mais faisable Contrôle d accès Fourni par J2EE (identités, rôles ) Communications sécurisées Hors spéc, mais courant (ssl, https)

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é.

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).

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

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)

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

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

Exemple de fichiers simples d authentification users.properties user1=passwd1 user2=passwd2 roles.properties user1=admin user2=guest

Plan Cycle de vie et callbacks Intercepteurs Transactions et sécurité Timers

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?