Les Enterprise Java Beans (version 3) SGBD



Documents pareils
Java Naming and Directory Interface

Compte Rendu d intégration d application

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

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

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)

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

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

Création d une application JEE

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

JOnAS & EasyBeans EMN 29 Novembre 2007

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

EJB. Karim Bouzoubaa Issam Kabbaj

La gestion de la persistance avec Hibernate. Hibernate et la gestion de persistance. La gestion de la persistance (1/2) Introduction

Mise en œuvre des serveurs d application

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

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

EXA1415 : Annotations

OpenPaaS Le réseau social d'entreprise

Architecture applicative et Cartographie

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

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

Remote Method Invocation (RMI)

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

JOnAS 5. Serveur d application d

Messagerie asynchrone et Services Web

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

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

Plan. Department of Informatics

Application web de gestion de comptes en banques

Applications des patrons de conception

MOM: Concepts & Applications

TD sur JMS ) Qu est-ce qu un middleware orienté message (MOM)? Quelles différences faites-vous entre un MOM et JMS?

Rapport de projet de fin d études

2 Chapitre 1 Introduction

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

RMI le langage Java XII-1 JMF

Introduction à la plateforme J2EE

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.

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

Composants logiciels Exemples : Java Beans, Enterprise Java Beans

JOnAS Day 5.1. Clustering

PROJET : ETNIC ESB JANUS. Guide technique : WS-Notification - Clustering. BULL Services et Solutions

Java DataBaseConnectivity

Environnements de Développement

Java pour le Web. Cours Java - F. Michel

Développement Web - Object Relational Mapping and Hibernate

I4 : Bases de Données

NFP111 Systèmes et Applications Réparties

Programmer en JAVA. par Tama

Une introduction à la technologie EJB (2/3)

Java et les bases de données

Meta Object Facility. Plan

Dis papa, c est quoi un bus logiciel réparti?

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

CREATION WEB DYNAMIQUE

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

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

La base de données XML exist. A. Belaïd

TP Programmation Java / JDBC / Oracle

Remote Method Invocation en Java (RMI)

Module BD et sites WEB

Evaluation Idéopass Cahier d analyse technique

Tutoriel d installation de Hibernate avec Eclipse

Java et les annotations

Cours en ligne Développement Java pour le web

Développement d un réseau social modulaire

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

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

Bases de Données relationnelles et leurs systèmes de Gestion

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Architectures d'intégration de données

Remote Method Invocation Les classes implémentant Serializable

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

PHP 5. La base de données MySql. A. Belaïd 1

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

Introduction à JDBC. Accès aux bases de données en Java

Première coupe : Introduction à la plateforme Java EE JAVA JAVA. Introduction à la plateforme Java EE. Introduction à la plateforme Java EE

Projet gestion d'objets dupliqués

L Orchestration de Services Web avec Orchestra. Goulven Le Jeune Orchestra Project Manager

Intergiciel - concepts de base

Cedric Dumoulin (C) The Java EE 7 Tutorial

Le modèle client-serveur

Architecture Orientée Service, JSON et API REST

Le langage SQL (première partie) c Olivier Caron

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

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

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Programmation Par Objets

TP1 : Initiation à Java et Eclipse

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

Auto-évaluation Programmation en Java

Introduction aux intergiciels

Conception de serveurs d'applications ouverts

D une part, elles ne peuvent faire table rase de la richesse contenue dans leur système d information.

as Architecture des Systèmes d Information

Programme scientifique Majeure ARCHITECTURE DES SYSTEMES D INFORMATION. Mentions Ingénierie des Systèmes d Information Business Intelligence

Bases de données relationnelles

Software Engineering and Middleware A Roadmap

Transcription:

Introduction Client léger Enterprise Java Bean (EJB) : Modèle de composants pour le développement d'applications d'entreprises Les Enterprise Java Beans (version 3) SGBD Modèle de programmation!! Par objet réparti!! Par envoie de message Gaël Thomas gael.thomas@lip6.fr La plateforme à composant basée sur Java Université Pierre et Marie Curie Master Informatique M2 Spécialité SAR Client Riche Ne gère pas l hétérogénéité Largement influencé par RMI SGBD 2008-2009 Introduction Master SAR - M2 MDOC - Introduction 2 Introduction Client léger : navigateur Web HTTP Enterprise Java Bean (EJB) A server-side component that encapsulates the business logic of an application Serveur WEB Conteneur WEB Service de transport : IIOP, RMI ou autre Cache Conteneur EJB 2008-2009 Conteneur EJB Master SAR - M2 MDOC - Introduction On se focalise sur la logique applicative!!les services systèmes sont fournis par le conteneur!!la logique de présentation est du ressort du client!!les enterprise beans sont portables d'un serveur d'application à un autre Service BD : JDBC Client lourd Service Transaction: JTA/JTX Service Nommage : JNDI JEE But : simplifier le développement modulaire d applications réparties Base De Donnée 3 2008-2009 Master SAR - M2 MDOC - Introduction 4

EJB : un composant!!uniquement Java Introduction!!Décrit en xml ou par annotation Java Conteneur EJB : la plateforme à composant définie par SUN!!Uniquement Java!!Programmation répartie!!orienté vers les serveurs d entreprise!!dynamiquement adaptable!!liaison par appel de méthode et par envoie de message!!outils de génération dynamique de souches et squelettes!!nombreux services systèmes Transaction, nommage, persistance, cycle de vie, transport 2008-2009 Principe des Systèmes Informatiques Avancé 5 Trois types d'ejb Introduction Session : effectue une tâche pour un client!!avec état : un état spécifique par client!!sans état : pas d état spécifique (partagé entre clients ou non, dépend de l implémentation) Entity : représente une entité métier persistante!!associé à un tuple d une base de donnée!!gestion transparente de la persistance Message-Driven : un échangeur de messages asynchrones!!session bean sans état!!activé lors de la réception de messages 2008-2009 Master SAR - M2 MDOC - Introduction 6 Deux interfaces d accès :!!Interface locale : invocation uniquement dans la même JVM!!Interface distante : invocation distante interface Un code métier : distante!!implantation des méthodes de l interface Différence par rapport à RMI?!!Gestion automatique du cycle de vie!!facilité d accès aux autres services systèmes!!un bean par client Code Code Code métier métier métier interface locale Machine Virtuelle Java L interface : rien de particulier package test; public interface HelloWorld { public void sayhello(); Le code métier : des annotations @Stateless(name="HelloWorld") @Remote(HelloWorld.class) public class HelloWorldBean implements HelloWorld { public void sayhello() { System.out.println("Hello, World!!!"); 2008-2009 Master SAR - M2 MDOC - Introduction 7 2008-2009 Master SAR - M2 MDOC - Introduction 8

Quelques remarques : Nommage : chaque recherche renvoie une nouvelle instance!! name : nom EJB du bean par défaut : le nom de la classe!! mappedname : nom dans le service de nommage global (JNDI, voir cours suivant) Utile pour les clients lourds Interfaces d accès :!! @Remote : indique l interface externe, plusieurs interfaces possibles!! @Local : indique l interface interne, plusieurs interfaces possibles!! Par défaut : @Remote des interfaces directes Utilisation d un Session Bean à partir d un autre Session Bean public interface Test { public void test(); @Statefull(mappedName = "Test@Remote») @Remote(Test.class) public class TestBean implements Test { @EJB(name="HelloWorld") HelloWorld hw; Avec ou sans état :!! Bean sans état (@Stateless) : état indépendant du client (attention, partage possible)!! Bean avec état (@Statefull) : état propre à chaque Bean public void test() { hw.sayhello(); 2008-2009 Master SAR - M2 MDOC - Introduction 9 2008-2009 Master SAR - M2 MDOC - Introduction 10 Utilisation d un Session Bean à partir d un client Lourd public static void main(final String[] args) throws Exception { Context ic = new InitialContext(); Test test = (Test)initialContext.lookup("Test@Remote"); test.test(); InitialContext : service de nommage (voir cours JNDI) Le client ne peut utiliser que le nom JNDI, pas le nom du Bean Lancer le client : dans un conteneur client (avec Jonas : jclient au lieu de java) Injection de ressources!!accès à d autres objets enregistrés dans le service de nommage @Statefull(mappedName = "Test@Remote") @Remote(Test.class) public class TestBean implements Test { @Resource(mappedName= "jdbc_1") Object o; Remarque : jdbc_1 est le nom par défaut donné au gestionnaire de connexions vers la base de donnée sous Jonas (voir cours JDBC) 2008-2009 Master SAR - M2 MDOC - Introduction 11 2008-2009 Master SAR - M2 MDOC - Introduction 12

Suppression de Session Bean : Interception des changements d état du cycle de vie Explicite après l invocation d une méthode marquée @Remove @Remove void del() { System.out.println("Va être supprimé"); @PostConstruct public void initialise() { initialise le Bean @PreDestroy public void detruit() { destruction du Bean Fonction destroy() : appelée juste avant toute suppression!!après un appel explicite à une méthode marquée @Remove!!Lors du déchargement du Bean Attention : @Remove void destroy() {! fonction appelée deux fois!! Bug @PrePassivate public void avantswap() { Bean va être mis en swap @PostActivate public void apresswap() { Bean vient d être rechargé 2008-2009 Master SAR - M2 MDOC - Introduction 13 2008-2009 Master SAR - M2 MDOC - Introduction 14 Interception de méthodes métier Utile pour debuggage, monitoring, changement de paramètres, évolution d API Compilation : javac classique Ajouter le.jar javaee dans le classpath Méthode @AroundInvoke :!!Invoquée à la place de toute méthode métier!!sauf si elle est annotée @ExcludeClassInterceptors @AroundInvoke public Object intercept(invocationcontext ic) throws Exception { System.out.println("*** intercept la méthode '" + ic.getmethod().getname() try { return invocationcontext.proceed(); finally { System.out.println("*** fin"); 2008-2009 Master SAR - M2 MDOC - Introduction 15 Packaging : dans un fichier.jar classique /test/helloworld.class /test/helloworldbean.class /test/test.class /test/testbean.class Déploiement (sous Jonas) : copie dans le répertoire deploy 2008-2009 Master SAR - M2 MDOC - Introduction 16

Entity Bean = tuple d une base de donnée Exemple de base Entity Bean : POJO (Plain Old Java Object)!!Champs du POJO = colonne d une table API des Entity Bean : JPA (Java Persistance API) Unification des APIs Hibernate, TopLink Gestion (quasi-)transparente de la persistance @Entity @Table(name = "FILMS") public class Film implements java.io.serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String name; public int getid() { return id; public void setid(int id) { this.id = id; public String getname() { return name; public void setname(final String name) { this.name = name 2008-2009 Master SAR - M2 MDOC - Introduction 17 2008-2009 Master SAR - M2 MDOC - Introduction 18 @Basic ou rien : indique qu un champs est persistant Les jointures entre EntityBean Tous les champs sont persistants Changer le nom de la colonne de la BD : @Column(name="nomBD") int nomjava; Table associée au tuple : @Table(name="FILMS") Pas nécessaire de de mettre tous les champs de la table Clé primaire obligatoire : type primitif ou composé @GeneratedValue(strategy=?) : indique comment sont générés les clés Auto, Identity, Sequence, Table Cardinalité des relations :!!1-1!!1-n (ex. : une commande contient n lignes)!!n-1 (ex. : plusieurs ligne de commandes peuvent concerner le même produit)!!n-n (ex. : un cours comporte +sieurs étudiants qui suivent +sieurs cours) Dénomination : OneToOne, OntToMany, ManyToOne, ManyToMany Principe : un unique propriétaire de la relation Propriétaire : tuple qui possède la clé externe 2008-2009 Master SAR - M2 MDOC - Introduction 19 2008-2009 Master SAR - M2 MDOC - Introduction 20

Exemple de jointure : «un film est joué dans des salles» Exemple de jointure create table FILMS ( id integer primary key auto_increment, name VarChar(256) ); create table SALLES_PROG ( id integer primary key auto_increment, salle_id integer, film_id integer, foreign key (salle_id) references SALLES(id), foreign key (film_id) references FILMS(id) ); Dans le Bean Film : @OneToMany(mappedBy = "film", fetch=fetchtype.eager, cascade=cascadetype.all) private List<SalleProg> salles; Dans le bean SalleProg (propriétaire) : @ManyToOne @JoinColumn(name = "film_id") private Film film; Champs De jointure chez le propriétaire film_id : clé étrangère! propriétaire : SALLES_PROG 2008-2009 Master SAR - M2 MDOC - Introduction 21 2008-2009 Master SAR - M2 MDOC - Introduction 22 Complément sur les jointures Utilisation des EntityBeans : dans des SessionBeans Fetch : façon de gérer la jointure (aussi paramètre des @Basic)!!FetchType.EAGER : au plus tôt (nécessaire si Serializable)!!FetchType.LAZY : au plus tard (inutilisable avec Serializable) Cascade : cascade des opérations entre les beans!!cascadetype.all : toute opération propagée!!cascadetype.merge : merge entre deux beans (voir + loin dans le cours)!!cascadetype.persist : Film devient persistant! List<SalleProg> aussi!!cascadetype.refresh : rechargement à partir de la base!!cascadetype.remove : suppression en cascade L EntityManager : gestionnaire de persistance public interface Cinema{ Film findfilm(int id); @Stateless public class CinemaBean implements Cinema { @PersistenceContext private EntityManager em; 2008-2009 Master SAR - M2 MDOC - Introduction 23 2008-2009 Master SAR - M2 MDOC - Introduction 24

Etat d un Entity Bean Attaché : géré par l entity manager Modification répercutée dans la BD!!Tout Entity Bean renvoyé par l entity manager Détaché : non géré par l entity manager Modification non répercutée dans la BD!!Nouveau Bean!!Copie de Bean (après sérialisation) L EntityManager : attachement et détachement!! void merge(object entity) : synchronise l état persistant du bean Utilisable sur un bean détaché. Ne rattache pas le bean. Utile lorsque le Bean est modifié chez le client et renvoyé au serveur.!! void persist(object entity) : rend l entité persistante et attachée Utilisable sur un nouveau Bean (après un new) Film createfilm(string name) { Film film= new Film(); res.setname(name); em.persist(film); // attache le bean + rend persistant return film; // la copie est bien sûr détachée 2008-2009 Master SAR - M2 MDOC - Introduction 25 2008-2009 Master SAR - M2 MDOC - Introduction 26 Principales méthode d un EntityManager!! Object find(class cl, Object key) : Trouve un EntityBean à partir de sa clé primaire!! boolean contains(object entity) : Vrai si entity est attaché à l EntityManager!! Query createquery(string qlstring) : Création d une requête dans le langage «query language»!! Query createnamedquery(string name) : Création d une requête nommée!! Query createnativequery(string sqlquery) : Création d une requête dans le langage SQL!! void remove(object entity) : Supprime l entity de la base!! void refresh(object entity) : Recharge le bean à partir de la base Exemple d utilisation Trouver un film à partir de sa clé primaire : public void findfilm(int id) { return em.find(film.class, Integer.valueOf(id)); Supprimer un film : public void removefilm(int id) { em.remove(findfilm(id)); 2008-2009 Master SAR - M2 MDOC - Introduction 27 2008-2009 Master SAR - M2 MDOC - Introduction 28

Le langage «Query Language» : langage de requête proche de SQL!!Sélection à partir du nom du Bean!!Paramètres indiqués par :nom-du-parm!!positionnement des requêtes dans l objet Query!!Demande d une liste de résultats à partir de l objet Query Exemple : public Film findfilmbyname(string name) { Query q = em.createquery( "select f from Film where f.name = :fname"); q.setparameter("fname", name); List<Film> res = q.getresultlist(); return res.size() == 0? null : res.get(0); Requête nommée : définie avec le Bean @Entity @Table(name = "FILMS") @NamedQueries({ @NamedQuery(name = "findallfilms", query = "select f from Film f"), @NamedQuery(name = "findfilmbyname", query = "select f from Film f WHERE f.name = :fname") ) public class Film implements java.io.serializable { Utilisation dans le SessionBean : void findfilmbyname() { Query q = em.createnamedquery("findfilmbyname"); 2008-2009 Master SAR - M2 MDOC - Introduction 29 2008-2009 Master SAR - M2 MDOC - Introduction 30 Les Entity Beans (version 3) Interception des changements d état du cycle de vie Le descripteur de déploiement Autour de la création (em.persist) :!!@PrePersist!!@PostPersist Lors du chargement à partir de la base (em.find, Query.getResultList)!!@PostLoad Autour des mises à jour (modification de champs, em.merge)!!@preupdate!!@postupdate Autour de la suppression (em.remove)!!@preremove!!@postremove <persistence xmlns= "http://java.sun.com/xml/ns/persistence" version="1.0"> <persistence-unit name="entity" transaction-type="jta"> <provider></provider> <jta-data-source>jdbc_1</jta-data-source> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.hsqldialect" /> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> </properties> </persistence-unit> </persistence> 2008-2009 Master SAR - M2 MDOC - Introduction 31 2008-2009 Master SAR - M2 MDOC - Introduction 32

Les Messages Driven Bean (version 3) Message driven Bean : interaction par messagerie MOM : Message Oriented Middleware Deux modes de communication!!n vers 1 : Queue!!N vers M : Topic Message Driven Bean : repose sur la spécification JMS JMS : Java Message Service Les Messages Driven Bean (version 3) Principe des Message Driven Bean!!Consomme des messages asynchrones!!pas d'état (toutes les instances d'une même classe de MDB équivalentes)!!peut traiter les messages de clients!!1 seule méthode métier (onmessage)! Paramètres imposés! Pas de valeur de retour! Pas d'exception Quand utiliser un MDB!!Éviter appels bloquants!!découpler clients (producteurs) et serveurs (consommateurs)!!besoin de fiabilité : protection crash serveurs 2008-2009 Master SAR - M2 MDOC - Introduction 33 2008-2009 Master SAR - M2 MDOC - Introduction 34 Les Messages Driven Bean (version 3) La spécification JMS (java.sun.com/jms) Queue : file de discussion (un seul consommateur) Topic : sujet de discussion (diffusion) ConnectionFactory : usine à connexions vers queue/topic Connection : connexion vers queue/topic Les Messages Driven Bean (version 3) Architecture Java Message Service (pour le queue, remplacer Topic par Queue, Publisher par Sender, Subscriber par Receiver) NameService JTCF montopic TopicConnectionFactory TopicConnection TopicSession Session :!!Création d émetteur et récepteur!!peut être rendue transactionnelle TopicPublisher Message Topic Message TopicSubscriber 2008-2009 Master SAR - M2 MDOC - Introduction 35 2008-2009 Master SAR - M2 MDOC - Introduction 36

Les Messages Driven Bean (version 3) Développement d un Message Driven Bean Les Messages Driven Bean (version 3) Exemple d émetteur (Bean) @MessageDriven(activationConfig = { @ActivationConfigProperty( propertyname = "destination", propertyvalue = "topic_rigolo"), @ActivationConfigProperty( propertyname = "destinationtype", propertyvalue = "javax.jms.topic")) public class Mdb implements MessageListener { public void onmessage(message inmessage) { System.out.println(((TextMessage)msg).getText()); 2008-2009 Master SAR - M2 MDOC - Introduction 37 @Resource(name="rigolo", mappedname="topic_rigolo") Topic topic; @Resource(name="factory", mappedname="jtcf") TopicConnectionFactory factory; TopicSession session; TopicPublisher sender; public void publish(string value) { TopicConnection tc = factory.createtopicconnection(); session = tc.createtopicsession(false, Session.AUTO_ACKNOWLEDGE); sender = session.createpublisher(topic); TextMessage msg = session.createtextmessage(); msg.settext("mdb: " + value); sender.publish(msg); 2008-2009 Master SAR - M2 MDOC - Introduction 38 Historique Différence majeure entre version 2 et version 3 Présence de Home (Usine) dans les Session Beans!!Usine enregistrée dans le service de nommage!!obtention d un bean via l usine (home.create()) Pas d EntityManager!!Gestion de la persistance via la Home de l EntityBean (homefilm.findbyname("les Vikings")) Version 2 : beaucoup de XML Difficile à maintenir Version 3 : beaucoup d annotation Historique Maintenance simplifiée Possibilité d utiliser du XML à la place Entity Bean non sérializable!!pas de notion de DTO (Data Transfert Object)!!Entity Bean toujours attaché 2008-2009 Master SAR - M2 MDOC - Introduction 39 2008-2009 Master SAR - M2 MDOC - Introduction 40

Conclusion Enterprise Java Bean!!Composants Java!!Programmation répartie!!facile à mettre en œuvre!!très bonne amélioration de l ergonomie avec la version 3 Fonctionnement interne!!relativement compliqué (quatre cours pour l étudier!)!!demande de bonnes base 2008-2009 Master SAR - M2 MDOC - Introduction 41