Des objets aux composants…
Transcription
Des objets aux composants…
Plan Les limites de la programmation par objets Les composants et connecteurs « modules » réutilisables séparation aspects métiers / propriétés fonctionnelles assemblage Programmation par composition A.D.L. Environnement de programmation par composition Des exemples de composants Java Beans : introspection, persistance, environnement Enterprise Java Beans : architecture, persistance, transaction, sécurité Corba : architecture, déploiement COM+ et .Net Des objets aux composants… Michel RIVEILL [email protected] - http://rangiroa.essi.fr/riveill Laboratoire I3S 2 Limites de la programmation usuelle Programmation par composition (1) « programming in the small » Courtier d'objets Communication synchone tout est la la charge du programmeur construction des différents modules définition des instances interconnexions des modules Interface (services fournis) structure de l’application peu visible ensemble des fichiers de codes nécessaire Objet client développement, génération des exécutables, déploiement pas ou peu d’outils pour les applications réparties Objet client Objet serveur Objet serveur référence évolution / modification difficile changement du mode de communication évolution, ajout, suppression de fonctionnalités modification du placement Bus de message Communication asynchrone (services requis) (services fournis) courtier Bus de message (assure la localisation de l'objet et le transport des requêtes) (assure l'appareillage et le transport des requêtes) Exécution (réaction) La programmation par composition combine les deux approches 3 4 Programmation constructive Programmation par composition (2) (ou programmation par composition) « programming in the large » Motivation : réutilisation de logiciel intégration de modules logiciels existants construction d'applications réparties par assemblage de modules logiciels existants programmation à gros grain ("programming in the large") Composant "client" Interface (services requis) Objet client Approche : description de l'architecture de l'application à référence l'aide d'un langage déclaratif modèle de construction des composants Connecteur = Assemblage + Communication/synchronisation Interface (services fournis) composants : interfaces, attributs, implémentation description des interactions entre composants (connecteurs) description de variables d'environnement (placement, regroupement, sécurité, etc.) Composant "serveur" Les objets sont du code existant et encapsulés ou écrit pour l'occasion Objet serveur 5 Les modèles de composants : Les composants... caractérisation d’un composant Comment coopère un composant Ce que fournit le composant (entrées) module logiciel autonome pouvant être installé sur différentes plates-formes qui exporte différents attributs, propriétés ou méthodes qui peut être configuré capable de s’auto-décrire Intérêt : être des briques de base configurables pour permettre la construction d’une application par composition composition et références aux autres composants modes de communication des connecteurs (synchrone, asynchrone, flots) Propriétés configurables du composant Contraintes techniques (QoS) Quelques composants célèbres (ou qui vont l’être) Ce qu’utilise le composant (dépendances) COM / DCOM / COM+ / .Net Java Beans Enterprise Java Beans (EJB) Composants CORBA (CCM) 7 Propriétés configurables composantes, interfaces, opérations, propriétés bus logiciel (« middleware ») : placement, sécurité, transaction internes : cycle de vie, persistance implantation : OS, bibliothèques, version Fournit Qu’est-ce que c’est ? Définition usuelle 6 s y n c s y n c a s y n c Composant Contraintes techniques a s y n c 8 Utilise Désignation d'un proxy (le composant) Les modèles de composants : Les modèles de composants : conteneurs et structures d’accueil conteneurs et structures d’accueil Conteneur encapsulation d’un composant (et ses composantes) prise en charge (masque) les services systèmes nommage, sécurité, transaction, persistance ... Utilise Client prise en charge partielle des connecteurs Connecteur synchrone Conteneur Composant invocations et événements techniquement par interposition (ou délégation) Connecteur asynchrone Structure d’accueil Composant Conteneur Conteneur Structures d’accueil espace d’exécution des conteneurs et des composants médiateur entre les conteneurs et les services systèmes des + comme le téléchargement de code (navigateur) Composant Structure d’accueil Intergiciel (« Middleware ») + Services (désignation, persistance, transaction, sécurité, …) 9 10 Construction par assemblage de composants Les modèles de composants : de l’installation à l’introspection Installer les composants technologie de regroupement (« packaging ») production des conteneurs Créer les composants par des fabriques (« home ») configuration des valeurs initiales Retrouver les composants services de désignation Utiliser appel synchrone et communication par événements Introspection Découvrir leurs APIs (fonctionnelle) Découvrir les connecteurs (structurelle) Construction par assemblage plutôt que ingénierie de développement réduire les besoins en compétence technique focaliser l’expertise sur les problèmes du domaine Langage de description d’Architecture capturer les composants capturer les connecteurs 11 fonctionnalités et besoins composition et modes de communication adapter les communications C’est le point faible des solutions industrielles ! 12 Programmation constructive MIL (Module Interconnection Language) MIL, ADL Composants « existants » ADL (Architecture Description Language) Modèles éprouvés Java Beans CORBA Component Model (CCM) Enterprise Java Bean (EJB) OLE / ActiveX / COM / COM+ / .Net Web services Fractal A A2 B A1 B1 B2 A3 Connecteur Composant élémentaire (objet de communication) Composant construit Interfaces d'entrée (export) Application Interfaces de sortie (import) 13 Exemple d’architecture instances de sous composants Exemple d’architecture Lookup (in string key, out string email) Initialize 14 Regroupement des instances Directory Directory de sous composants dans des state state==MD MD collections (in string state) coll coll::collection collection[0..N] [0..N]of ofDirectory Directory Directory Directory state state==NY NY Services fournis Services requis Lookup (in string key, out string email) Directory Directory state = MD state = MD Directory Directory state = NY state = NY Directory Directory Directory Directory state state==CA CA state = CA state = CA Initialize (in string state) 15 16 Description de l ’architecture (A.D.L) Interconnexion de composants coll coll::collection collection[0..N] [0..N]of ofDirectory Directory client.Search(key, email, state) => coll.Lookup(key, email) where state == coll.state using SyncCall; Client Client Start Search (in string key, out string email, in string state) Lookup (in string key, out string email) Start Search (in string key, out string email, in string state) Directory Directory state = CA state = CA Directory Directory Lookup (in string key, out string email) state state==MD MD Directory Directory state = NY state = NY coll coll::collection collection[0..N] [0..N]of ofDirectory Directory Client Client Directory Directory state state==MD MD Admin Admin Directory Directory StartDirectory Initialize (in string state) (in string state) state state==NY NY Directory Directory state state==CA CA Admin Admin StartDirectory Initialize (in string state) (in string state) admin.StartDirectory(state) => coll.Initialize(state) using createInCollection(); coll : collection [0..N] of Directory; client : Client; admin : Admin; 17 Langage de description d ’architecture (A.D.L) Description de composant DirectoryItf DirectoryItf string stringstate state Stats (in string statusreport) Initialize () Lookup (in string key, out string email) interface DirectoryItf { attribute string state; provide Initialize(); provide Lookup(in string key, out string email); notify Stats( in string statusreport); } DirectoryImpl DirectoryImpl DirectoryMod DirectoryMod class classDirectory Directory .... .... client.Search(key, email, state) => coll.Lookup(key, email) where state == coll.state using SyncCall; 18 admin.StartDirectory(state) => coll.Initialize(state) using createInCollection(); module «Java» DirectoryMod : DirectoryItf { java : ‘/usr/local/...’; classpath : ‘...’; class : ‘applicationTest.Directory’ } 19 Description de la structure de l’application A des fins de lisibilité, de réutilisation Assemblage de composants Définition des composants Définition des interconnexions Dépendances entre composants Règles de communication Vérification de la sémantique d’assemblage Systèmes de type de composants caractérisant la nature du logiciel Conformité entre interfaces pour autoriser des interconnexions Spécification de contraintes globales sur le fonctionnement de l'application validation, preuve 20 Architecture : Intérêts L'environnement de développement Trait d'union entre le cahier des charges d'un programme les méthodes de conception la mise en œuvre l'installation en environnement réparti Description de l’architecture de l’application - langage OCL – – – Synthétise la complexité d'un système Facilite l ’installation et l ’évolution de l ’application automatise le processus d ’installation de l ’application puis permet l ’évolution de l ’application Modèle et Outils de Configuration Description OCL Description textuelle aspects statiques aspects dynamiques règles de placement Génération du script d’installation Compilateur OCL Langage de programmation Support de Configuration la modification des constituants d'un système la modification des interconnexions entre ces constituants la modification du placement Mise en œuvre des composants Base de composants services de déploiement services de reconfiguration Scripts d’installation Machine de Configuration 21 Chaîne de construction 22 Chaîne d'exécution Déploiement Structure d ’accueil (containers + …) Observation des containers Déploiement Description des composants Description d'une Architecture Modèle Configuration Script de déploiement Propriétés Deployment Script Properties 23 Script de déploiement Propriétés Deployment Script Properties Observation des composants (applications) 24 Déploiement Reconfiguration Installation d ’une application Installation ou déploiement… puis redéploiement statique ou dynamique Association de propriétés Support nécessitant la présence d'un service de aux composants déploiement/redéploiement // utilisateur privilégié possède ce composant admin.User.name == ‘admin’; coll.Host.name == ‘db?.inrialpes.fr’; // site avec peu d’utilisateurs connectés coll.Host.userLoad <= 2; // annuaire et le client sur des sites différents coll.Node <> client.Node; Fonctions de ce support création de composants liaison de composants suppression/clonage/migration de composants reliaison de composants Caractéristiques de ce support notion de déploiement : suite d'ordres caractère transactionnel du déploiement notion d'application déployée et suivi des changements architecturaux d'une application 25 démo 26 Architecture d ’un service d ’observation Observation des exécutions Deux outils de surveillance Surveillance des containers Surveillance des composants (i.e. des applications) Service de d ’observation intégré instrumentation des containers instrumentation des composants Containers Proxy techniques d'héritage et d ’interposition Proxy Containers Administratio n AdminisAdministration abonnements aux événements dissémination de l ’observation en préservant la causalité Agent Agent Agent Composants 27 Interrogation: état Bus à messages Dissé Dissémination: événements avec pré préservation causalité causalité Agent Agent Agent Composants 28 Une classification des solutions industrielles Observation des composants et de l ’application Modèles orientés client / IHM sur les postes clients solutions « propriétaires » OLE, COM, ActiveX de Microsoft Java Beans de SUN Modèles orientés serveur / métier sur les postes serveurs en liaison avec BD, transactions, sécurité solutions « propriétaires » 29 DCOM, COM+, .Net de Microsoft Entreprise Java Beans (EJB) de SUN Corba Component Model (CCM) de l’OMG 30