Les composants Métiers Carine Souveyet Introduction n Les composants Métiers n n n Où se placent-ils dans l’architecture N-tier ? A quoi ils servent ? Par quel type de système sont-ils hébergés ? Services Invariants Introduction - où se placent-ils? Browser DIFFUSION Service d’ admin. Pages HTML Composants métiers $$ Service de sécurité Enterprise Application Integration ... Servic e extern e ... ... BDD LDAP SGBDR ERP ... ... ... Mainframe Progici el Introduction - où se placent-ils? Composants Web Couche « Gestion de l’Utilisateur » middleware Couche Métier Couche présentation (applications front-office) Composants Métiers Couche Sources de Données (applications back-office) Introduction – A quoi servent-ils? middleware Couche « Gestion de l’Utilisateur » Couche Métier Couche Sources de Données (applications back-office) Couche présentation (applications front-office) Bloc : applications front-office Bloc : applications back-office Composants Métiers Introduction – A quoi servent-ils? Applications back-office hétérogènes, distribuées, Couche Métier => Façade Métier Cohérence globale des applications back-office middleware Equipe organisée en 3 compétences Couche « Gestion de l’Utilisateur » Couche Métier Couche Sources de Données (applications back-office) Couche présentation (applications front-office) Bloc : applications front-office Bloc : applications back-office Composants Métiers Introduction – Quels systèmes les hébergent ? Composants Web Couche « Gestion de l’Utilisateur » Serveurs d’application Couche Métier Couche présentation (applications front-office) Composants Métiers Couche Sources de Données (applications back-office) Entreprise JavaBeans n Deux versions Incompatibles § Version 2.x : § Conteneur lourd § Composants représentant des programmes et des données § Chaque bean a un home et un remote interfaces (implémentés comme des objets java) § Version 3.x : § Conteneur léger § Composants représentant uniquement des programmes § Les données sont gérés dans des conteneurs de persistances § Chaque bean est une classe Java standard § Chaque bean a deux interfaces remote et local (implémentés comme des interfaces Java) EJB 2.x : Server Framework Model Les « EJB » sont placés dans un EJB container. Databases & Le client doit pouvoir aux Backend « Laccéder ’EJB container » estSystems EJBpar Server services offerts un « EJB l’environnement d’exécution des EJB Container client Les « EJB » accèdent aux serveurs serverou ». à des EJBs. (comme le « servlet bases de données Transactions « L’EJB container » est accessible container » pour les servlets). applications existantes (backoffice). en mode client/server grâce à Sécurité « l’EJB server ». Il gère la sécurité et les transactions (JTS). « Object architecture for component-based, transaction oriented, distributed entreprise computing » EJB 2.x : Vue générale du framework Objets métiers servlet Container lient HTTP server EJB Container Databases & Backend Systems Logique applicative relative EJB Server au Web (framework struts) Communication via le protocole HTTP Objets distribués ou accès bases Objets distribués : technique de données : technique « bus « bus logiciel » (RMI,de Corba…) à Usage synchrone logiciel » ou JDBC EJB 2.x : Concepts Attention ! Schéma des concepts (uniquement) EJB 2.x : Concepts Entreprise JavaBean Session Bean Programmes ou transactions métiers Entity Bean MessageDriven Bean Données métiers sous format Objet Usage asynchrone (JMS) EJB 2.x - Bilan n Bilan n n n n n SessionBean : programme qui a un impact sur les applications back-office EntityBean : données des applications back-office stockées sous forme d’objet EntityBean : peuvent représenter la vue métier sur des données éparpillées sur plusieurs applications back-office Echec du concept d’EntityBean à cause de la performance de la persistance implémentée dans les serveurs (noyau relationnel utilisé pour stocker des données oo à accès hiérarchique) Utiliser uniquement SessionBean et limiter l’usage des entityBeans à des données peu nombreuses et peu profondes EJB 3.x EJB 3.x SessionBean Conteneur EJB : serveur J2EE Changements Conteneur de Persistance EntityBean Conteneur Léger : hébergeable n’importe où Exemples de « Session Bean » Session Bean Converter Bean CartBean Exemple : Le « ConverterBean» peut être vu comme un Service métier demandé par un client lors de sa connexion à un site boursier. C’est un exemple de « sessionBean » (fonctions ou procédures métiers invoquées par un acteur utilisant une application de type FrontEnd Exemple de « Session Bean » Implements <<ConverterRemote>> ConverterBean Implements Session Bean (classe Java) <<ConverterLocal>> Exemple de « Session Bean » Implements <<ConverterRemote>> ConverterBean Implements Interfaces utilisées par les clients (Interface Java) <<ConverterLocal>> Exemple de « Session Bean » Implements <<ConverterRemote>> ConverterBean Implements Remote Interface => Connexion distante entre EJB et client <<ConverterLocal>> Exemple de « Session Bean » Implements <<ConverterRemote>> ConverterBean Implements Local Interface => EJB et client exécutés dans la même JVM <<ConverterLocal>> Session Bean : ConverterBean package ejb; import java.math.BigDecimal; import javax.ejb.Stateless; @Stateless public class ConverterBean implements, ConverterRemote ConverterLocal { public BigDecimal dollarToYen(BigDecimal dollar) { ….} public BigDecimal yenToEuro(BigDecimal yen) {…..} } Session Bean : ConverterBean package ejb; import java.math.BigDecimal; import javax.ejb.Stateless; @Stateless Méthodes métiers déclarées dans les interfaces et implémentés dans le bean public class ConverterBean implements, ConverterRemote ConverterLocal { public BigDecimal dollarToYen(BigDecimal dollar) { ….} public BigDecimal yenToEuro(BigDecimal yen) {…..} } Session Bean : ConverterBean package ejb; import java.math.BigDecimal; import javax.ejb.Stateless; @Stateless Annotations du code Java pour décrire le type de ConverterBean public class ConverterBean implements, ConverterRemote ConverterLocal { public BigDecimal dollarToYen(BigDecimal dollar) { ….} public BigDecimal yenToEuro(BigDecimal yen) {…..} } Exemples de « Session Bean » Session Bean Converter Bean CartBean Exemple : Le « CartBean » manipulé dans une session d’achat électronique peut être considéré comme un bean de type Session (données temporaires gérées en variables sessions au niveau du serveur Web et relatives à un client) Exemple de « Session Bean » Implements <<CartRemote>> CartBean Implements <<CartLocal>> Session Bean : CartBean @Stateful public class CartBean implements CartRemote, CartLocal { private String customerName; private String customerId; private Vector contents; Méthodes Métier public void addBook(String title) { contents.add(title);} public Vector getContents() { return contents;} public void removeBook(String title) throws BookException {…} public void remove() {contents = null;} public void initialize(String person) throws BookException {…} public void initializes(String person, String id) throws BookException {…} } Session Bean : CartBean @Stateful public class CartBean implements CartRemote, CartLocal { private String customerName; Mémoire private String customerId; dépendante private Vector contents; du client public void addBook(String title) { contents.add(title);} public Vector getContents() { return contents;} public void removeBook(String title) throws BookException {…} public void remove() {contents = null;} public void initialize(String person) throws BookException {…} public void initializes(String person, String id) throws BookException {…} } Session Bean : CartBean @Stateful public class CartBean implements CartRemote, CartLocal { Annotation private String customerName; pour le type de private String customerId; private Vector contents; Session Bean public void addBook(String title) { contents.add(title);} public Vector getContents() { return contents;} public void removeBook(String title) throws BookException {…} public void remove() {contents = null;} public void initialize(String person) throws BookException {…} public void initializes(String person, String id) throws BookException {…} } Session Bean n Il existe deux types de « SessionBean » n n « Stateful Session Bean » : ils portent des données temporaires spécifiques au client utilisant le Bean. (exemple « ShoppingCartBean »). Ils portent un état « conversationnel » et ils sont utilisés par un seul client. « Stateless Session Bean » : ils ne portent aucune donnée mais fournit un ensemble fonctions métiers (exemple « ConverterBean ». Ils ne sont pas spécifiques à un client. Caractéristique des Sessions Beans n Transactions métiers n n n n Méthodes de type Session Bean contenant des actions impactant plusieurs applications Caractéristiques ACID (atomique, cohérence, Isolation et durable) sur ces méthodes => Transactions Transactions métiers = Transactions distribuées sur plusieurs applications back-office Façade Métier => garantie la cohérence de l’ensemble des applications back-office Caractéristique des Sessions Beans n Transactions métier 1 ENT 2 Apogée 3 CROUS 4 Messagerie Inscription d’un nouvel étudiant (méthode métier) Cohérence globale du SI (toutes les opérations ou pas du tout) Architectures avec les EJB Composant Web Middleware OO Composant Web Middleware OO SessionBean EntityBean EntityBean Conteneur EJB 2.x SessionBean Conteneur EJB 3.x EntityBean EntityBean Conteneur Persistance Architectures avec les EJB Composant Web Middleware OO Composant Web Middleware OO SessionBean Conteneur EJB 2.x SessionBean Conteneur EJB 3.x Résumé n Les composants Métiers n n n n n n n n Objets distribués – usage synchrone Façade Métier Conteneur léger Usage d’annotations pour décrire les types de EJB Session Beans à Transactions distribuées Entity Beans à Persistance OO MessageDriven Beans à usage asynchrone Plusieurs architectures d’usage des EJBs Exercice EJB Application Struts (MVC) EJB Session Bean BD Cotation LookUpAction (controller) CotationBean (Session Bean) ModeleImpEJB (model)