ScalAgent, une plate-forme à composants pour applications ... - Sardes

Maître de conférences à l'INP Grenoble depuis 1998, ses recherches portent sur les ... David Féliot a obtenu un diplôme d'ingénieur de l'ENSIMAG en 1998.
216KB taille 3 téléchargements 174 vues
RECHERCHE

ScalAgent, une plate-forme à composants pour applications asynchrones Vivien Quéma∗ — Roland Balter∗∗1 — Luc Bellissard∗∗2 David Féliot∗∗ — André Freyssinet∗∗ — Serge Lacourte∗∗ ∗

INPG - Laboratoire LSR-IMAG (CNRS, INPG, UJF) - INRIA - projet Sardes ScalAgent Distributed Technologies INRIA Rhône-Alpes, 655 av. de l’Europe, F-38334 Saint-Ismier cedex [email protected] ∗∗

RÉSUMÉ. L’usage généralisé d’Internet et l’intelligence croissante des équipements permettent le

développement de services interactifs coopérant avec les systèmes d’information de l’entreprise. Développer et déployer ces services est un défi à la fois sur le plan des modèles et outils de construction, et sur celui des services systèmes sous-jacents (ou intergiciels). Il est aujourd’hui reconnu que les intergiciels orientés messages sont bien adaptés à ce type d’applications. On leur reproche cependant la pauvreté des modèles de programmation et le manque d’outils pour le développement des applications. Ce papier présente la plate-forme ScalAgent dont l’objectif est de pallier ces lacunes. Cette plate-forme comprend un intergiciel orienté messages, un modèle de composants asynchrones, et un ensemble d’outils permettant la configuration, le déploiement et l’administration d’applications distribuées écrites en termes de composants. ABSTRACT. The use of the Internet as a general purpose communication system is growing very fast in all sectors of activity and multiple forms of equipments are now connected to Internet and have gained increased embedded intelligence. This evolution leads to emerging interactive services that are cooperating with existing enterprise information systems. Developing and deploying these new services is a challenging issue from both the software engineering point of view (development tools) and the run-time point of view (middleware services). It is recognized today that message oriented middleware (MOM) are well-suited to support these services. However MOM-based environments are suffering from a lack of tools for building and operating distributed applications. This paper describes the ScalAgent infrastructure which aims at filling this gap. This infrastructure is based on a MOM and a coherent set of development tools following a component-based approach. MOTS-CLÉS :

composants, intergiciels asynchrones, langages de description d’architecture.

KEYWORDS:

components, asynchronous middleware, architecture description languages.

1. Université Joseph Fourier – Grenoble 1, en délégation dans ScalAgent D.T. 2. Institut National Polytechnique de Grenoble, en délégation dans ScalAgent D.T. RSTI - TSI – 23/2004. Composants et adaptabilité, pages 253 à 274

254

RSTI - TSI – 23/2004. Composants et adaptabilité

1. Introduction L’usage d’internet se généralise dans tous les secteurs d’activité : banque, distribution, santé, domotique, etc. Des équipements de toute nature – assistants personnels, téléphones mobiles, bornes interactives, automates, etc. – sont aujourd’hui accessibles à travers internet et sont dotés d’une intelligence croissante. Grâce à cette double capacité de programmabilité et de connectivité, les équipements deviennent le support d’accès à de nouveaux services interactifs qui coopèrent, via internet, avec les systèmes d’information de l’entreprise. Cette évolution donne naissance à une nouvelle génération d’applications distribuées, caractérisées par un couplage fonctionnel fort, entre des composants logiciels évoluant dans un environnement faiblement couplé dans les deux dimensions espace et temps. En effet, les systèmes hébergeant ces composants logiciels sont potentiellement distribués sur une grande échelle géographique, et sont interconnectés par des réseaux de capacité variable. Par ailleurs, ces applications sont très souvent concernées par un mode de fonctionnement déconnecté, engendré par les usages mobiles et par les pannes temporaires du réseau. Le couplage faible milite en faveur d’un modèle de communication asynchrone, tant au niveau de l’architecture de l’application, qu’au niveau de l’intergiciel sous-jacent. Cette propriété explique l’intérêt croissant des intergiciels asynchrones (ou MOM pour Message Oriented Middleware) [GEI 01, BAN 99]. Aujourd’hui, on reproche principalement à cette classe d’intergiciels le faible niveau d’abstraction fourni au développeur, et le manque d’outils pour construire et déployer des applications réparties. En effet, les MOM se résument trop souvent à une interface de programmation (API) qui prend la forme d’une simple bibliothèque de fonctions d’accès au bus de communication. C’est le cas par exemple de la spécification JMS (Java Messaging Service). Lorsque l’application est de complexité moyenne, cette approche est acceptable. Pour les applications de complexité significative, ce niveau d’interface devient un obstacle rédhibitoire en comparaison avec les modèles et outils disponibles dans les intergiciels de type client-serveur – tels que les langages de description d’interface et les outils de génération de stubs. Dans ce papier, nous présentons la plate-forme ScalAgent dont l’objectif est de fournir une infrastructure d’exécution répartie, bâtie autour d’un MOM, et un ensemble d’outils facilitant la construction, le déploiement et l’administration d’applications réparties regroupant un ensemble de composants logiciels hétérogènes coopérant selon un modèle de communication asynchrone. La plate-forme ScalAgent est composée des éléments suivants : – Un intergiciel orienté messages qui fournit un service de communication asynchrone offrant divers niveaux de qualité de service pour les propriétés de fiabilité (garantie de délivrance des messages), sécurité, ordonnancement, etc. – Un modèle de programmation répartie à base d’agents1 . Les agents sont des objets Java distribués qui ont un modèle d’exécution de type événement-réaction. L’ato1. Le terme « agent » est associé à de nombreux travaux : systèmes multiagents, agents mobiles, agents assistants, etc. Dans cet article, un agent est un objet réactif qui a un comportement proche de celui d’un acteur [AGH 86].

La plate-forme à composants ScalAgent

255

micité des réactions, combinée avec la garantie de délivrance des messages, fournit globalement un premier niveau de construction d’applications réparties tolérant les fautes, utilisé notamment pour construire les outils et services d’administration d’applications réparties présentés plus loin. – Un modèle de composants distribués. Le paradigme agent est insuffisant pour modéliser les applications présentant un niveau de complexité significatif car il ne permet d’exprimer ni les relations et dépendances entre agents, ni les propriétés non fonctionnelles requises par les agents. C’est pourquoi un modèle de composants a été développé afin d’encapsuler les agents dans des unités sémantiquement plus riches, caractérisées, entre autres, par les deux propriétés suivantes : la composabilité, inspirée des travaux de [MAG 93, MAG 89] – qui permet de définir une application comme un assemblage de composants –, et la séparation entre aspects fonctionnels et non fonctionnels. Ces derniers incluent les fonctions de gestion du cycle de vie du composant. – Des outils de construction et déploiement d’applications à base de composants. L’objectif de ces outils est d’assister le programmeur d’application dans le processus de configuration d’une application, et dans les opérations de déploiement des composants sur leur site d’exécution. Ces outils s’appuient sur une description de l’application effectuée à l’aide d’un langage de description d’architecture (ADL). L’article est structuré de la façon suivante : nous présentons l’intergiciel orienté messages et le modèle de programmation associé dans la section 2. La section 3 est consacrée au modèle de composants et au langage de description d’architectures. L’outil de déploiement est décrit dans la section 4. Enfin, la section 5 conclut cet article.

2. L’intergiciel orienté messages L’intergiciel orienté messages proposé dans la plate-forme ScalAgent [BEL 99] est un exemple d’infrastructure d’intégration de services par les flots de données. On distingue, aujourd’hui, deux types de telles infrastructures : les MOM (pour Message Oriented Middleware) [BAN 99] et les intergiciels à événements (Event-based Middleware [BUC 03]). Dans les deux cas, la caractéristique principale de ces infrastructures est de fournir un canal de communication asynchrone entre émetteurs et destinataires. Les MOM délivrent des messages quelconques à des files de messages ou boîtes aux lettres, dans lesquelles les destinataires viennent retirer les messages. Les MOM présentent deux caractéristiques principales. D’une part, ils garantissent la persistance des messages tant que leur consommation n’a pas été signifiée. D’autre part, la sémantique d’intégration entre producteurs et destinataires est définie par l’analyse du contenu du message. Dans les intergiciels à événements, les messages sont typés et le découplage entre émetteurs et destinataires est assuré par le mécanisme de publication-abonnement (publish-subscribe) . Les émetteurs « publient » des messages typés au sein de l’intergiciel et les destinataires, qui ont préalablement enregistré leur intérêt pour un type

256

RSTI - TSI – 23/2004. Composants et adaptabilité

de messages, les reçoivent de manière automatique : un événement correspond à la notification du message typé. On peut noter que l’effort de recherche porte surtout, aujourd’hui, sur des mécanismes efficaces de dissémination des événements dans des environnements à grande échelle [CAR 01, STR 98]. L’intergiciel de la plate-forme ScalAgent combine certaines des caractéristiques de ces deux types d’intergiciels. Il fournit une infrastructure de communication asynchrone garantissant la délivrance des messages entre émetteurs et destinataires. Les messages sont typés et la communication fiable est réalisée grâce à des files de messages distribuées. Une différence notable avec les intergiciels à messages existants est liée à l’utilisation d’un modèle d’objets distribués pour décrire émetteurs et récepteurs. Ces objets, appelés « agents », communiquent uniquement par messages en utilisant les services du canal de communication asynchrone.

2.1. Les agents Le modèle d’agents est issu du modèle d’objets réactifs [AGH 86]. Les agents se conforment à un modèle de programmation de type « événement → réaction ». Un événement correspond à la notification d’un message typé à un agent qui va se traduire par l’exécution d’une méthode de l’objet. Cette exécution peut, à son tour, provoquer la production d’événements auxquels un ou plusieurs agents vont réagir.

2.2. Les serveurs d’agents L’évolution actuelle des architectures d’intergiciels fait apparaître nettement la distinction entre la structure d’accueil – l’environnement d’exécution – et les entités de traitement [RIV 02]. Les agents s’exécutent au sein d’une structure d’accueil nommée serveur d’agents. Cette structure d’accueil est configurable et fournit différentes politiques de fonctionnement des agents hébergés, par exemple : – l’atomicité des réactions aux événements : les traitements induits par la réception d’une notification sont soit complètement réalisés, soit annulés. – la persistance de l’état des agents : un changement d’état correspond à la complétion d’une réaction. Le lecteur peut avoir un aperçu de la programmation des agents et du développement d’une application à base d’agents en consultant [BEL 99, PAL 00]. L’organisation d’un serveur d’agents est décrite dans la figure 1. Le cœur du serveur est un moteur d’exécution qui contrôle le flot d’exécution des agents. Ce flot est unique et prend la forme d’une boucle qui consiste, pour chaque notification, à exécuter la méthode associée à la réaction de l’agent destinataire. Le flot exécute le code des modules de persistance et d’atomicité s’ils ont été spécifiés dans la configuration initiale de l’intergiciel. Un serveur d’agents contrôle également les flots d’exécution

La plate-forme à composants ScalAgent

257

associés à la gestion des communications au sein d’un sous-système appelé le bus local. Les bus locaux des différents serveurs coopèrent pour fournir une mise en œuvre distribuée d’un bus à messages global. Ce bus à messages global permet la communication entre les différents agents – qu’ils soient hébergés par le même serveur ou non. Chaque bus est constitué de deux types de composants : un canal et un ensemble de composants réseau. – Les composants réseau sont responsables de l’émission de messages provenant du canal à destination des serveurs distants. Il existe différents composants réseau correspondant à différents protocoles. Par ailleurs, il est possible d’adjoindre à un composant réseau des modules logiciels responsables de propriétés diverses : sécurité, fiabilité, ordonnancement causal, etc. Nous ne reviendrons pas sur la mise en œuvre de ces propriétés qui est décrite dans [PAL 00]. – Le canal est chargé de distribuer les messages provenant du moteur d’exécution vers les composants réseau et vice versa. Ce routage est effectué en fonction des propriétés non fonctionnelles nécessaires à la communication. Par exemple, si la communication entre deux agents doit être sécurisée, le canal transmettra le message à un composant réseau utilisant un protocole sécurisé. Serveur d’agents 1

Serveur d’agents 2

Moteur d’exécution

Agent

Agent

Agent Agent

Moteur d’exécution

Composant réseau 2

Agent

Agent

Agent

Canal

Canal Composant réseau 1

Agent

Composant réseau 3

Bus local

Composant réseau 1

Composant réseau 2

Bus à messages global

Bus local

Figure 1. Deux serveurs d’agents interconnectés

2.3. Evaluation de la plate-forme De nombreux produits de type MOM sont disponibles aujourd’hui, en particulier pour réaliser l’intégration d’applications patrimoniales [SON02, MAF 97, MSM02]. Ces intergiciels fournissent tous la communication fiable par files de message avec, pour chaque produit, des variantes au niveau de l’architecture (centralisée ou répartie) et des protocoles de communication utilisés. L’intégration avec les applications est mise en œuvre par une interface de programmation (API) dont la plus connue aujourd’hui est l’interface Java Messaging Service(JMS) [JMS02]. De fait, ils interagissent peu avec les composants logiciels – car ils ne fournissent qu’un canal de communication – et leur intégration au sein d’applications existantes est aisée. Ce découplage fort présente néanmoins un inconvénient majeur, dans la mesure où seuls les trans-

258

RSTI - TSI – 23/2004. Composants et adaptabilité

ferts de messages sont fiabilisés. Or aujourd’hui, fiabiliser uniquement les transferts de messages ne suffit pas : il faut aussi fiabiliser le processus de traitement et de transformation de l’information [BAN 99, GEI 01]. L’intergiciel de la plate-forme ScalAgent apporte un début de réponse à cette limitation majeure grâce à un modèle d’objets distribués (les agents) adapté aux communications asynchrones utilisant un MOM. Les traitements effectués par les agents bénéficient des propriétés conjointes de persistance et d’atomicité des traitements, en complément de la garantie de délivrance des messages fournie par le canal de communication. Ce modèle se limite à la communication point à point, ce qui est un peu contradictoire avec l’utilisation croissante du modèle publication-abonnement, surtout pour les applications présentant un niveau de découplage fort [BAN 99]. Pour combler cette lacune, le modèle de communication publication-abonnement conforme à l’interface JMS a été construit au-dessus de cet intergiciel, en utilisant les agents pour programmer la logique induite : filtrage de messages, topic, files de messages, etc.2 Toutefois, notre expérience dans le développement d’applications fortement distribuées [C3D00, SCA02] nous a amené à constater les limites de ce modèle. La programmation « événement/réaction » se rapproche de la programmation de machines à états [TUR 93], dont la complexité lorsque le nombre de processus/objets communicants augmente est reconnue. De plus, lorsque l’environnement est distribué, s’ajoute à la complexité de la programmation, la complexité de l’architecture, du placement et du contrôle du cycle de vie de l’application. Cette complexité se retrouve avec n’importe quel type d’intergiciel dans lequel les objets sont distribués. Ces constatations nous ont amenés à envisager conjointement deux pistes que nous détaillons dans les sections suivantes : – proposer un modèle de composants pour les communications asynchrones fiables, et utiliser, de concert, un formalisme de description des applications dirigé par l’architecture logicielle [SHA 96]. Ceci oblige le programmeur à se concentrer sur la programmation individuelle des composants, alors que l’architecture globale de l’application est prise en compte par un autre formalisme (et éventuellement un autre intervenant), – implanter des outils de gestion du cycle de vie des applications en environnement distribué, en particulier le déploiement automatisé, en exploitant la description de l’architecture.

3. Un modèle de composants pour applications asynchrones 3.1. Motivations – Travaux connexes Il existe aujourd’hui un certain nombre de modèles de composants qui partagent des concepts communs : un composant est un module logiciel autonome pouvant être 2. L’ensemble regroupant l’intergiciel et l’interface JMS (nom de code JORAM) est disponible en open-source sur www.obje tweb.org.

La plate-forme à composants ScalAgent

259

installé sur différentes plates-formes ; il exporte différents attributs, propriétés et méthodes ; en outre, il peut être configuré et doit être capable de s’auto-décrire. Dans la plupart des modèles, il est possible d’associer aux composants certaines propriétés non fonctionnelles (persistance, protection, duplication, etc.) prises en charge par une entité logicielle encapsulant le composant, appelée conteneur. Les modèles actuels souffrent d’un certain nombre de limitations : ils adoptent souvent un modèle de communication client/serveur. Des efforts sont faits pour intégrer les communications asynchrones : c’est le cas des puits et sources d’événements du modèle de composants de Corba (CCM [MER 01]) ou encore des Message Driven Beans du modèle de composants de Sun [EJB02]. Cependant, ces modèles n’ont pas été conçus initialement pour les communications asynchrones et ne fournissent pas toujours la qualité de service nécessaire comme la fiabilité ou l’ordonnancement des messages échangés. De plus, ces modèles ne permettent souvent que des assemblages plats de composants : la notion de composition n’est pas prise en compte. L’utilisation de modèles hiérarchiques présente le double intérêt de faciliter la conception d’application et de faciliter les fonctions d’administration [PAL 01a]. Des efforts sont actuellement faits dans ce sens par les modèles de composants émergents : le modèle Fractal [BRU 02], par exemple, permet de créer des architectures hiérarchiques par composition de composants. Enfin, si la plupart des conteneurs actuels proposent des fonctionnalités évoluées comme la prise en charge des transactions, il reste encore des efforts à faire sur la prise en charge du déploiement et l’administration du cycle de vie des composants.

3.2. Le modèle des SCBeans Le modèle de composants a été conçu pour faciliter la construction d’applications par assemblage. La principale caractéristique des composants est de communiquer exclusivement par envois de messages. De plus, comme dans la plupart des modèles de composants, le composant est constitué de deux parties solidaires : une partie fonctionnelle en charge des fonctions applicatives propres à ce composant, que l’on appellera désormais SCBean, et un conteneur en charge de certains aspects non fonctionnels comme la liaison, l’activation, etc., que l’on appellera SCContainer. Enfin, ce modèle est hiérarchique : une application est représentée par un assemblage hiérarchique de composants. 3.2.1. La partie fonctionnelle ou SCBean Un composant possède des interfaces fonctionnelles, appelées ports. On distingue les ports d’entrée qui sont associés aux services fournis par un SCBean, des ports de sortie qui correspondent aux services requis par le SCBean. Définition d’un port Un port d’entrée (resp. de sortie) est défini par son type qui est composé de :

260

RSTI - TSI – 23/2004. Composants et adaptabilité

– un identifiant qui est un nom représentant le port, – un rle qui spécifie si le port considéré est un port d’entrée ou de sortie, – une signature qui est l’ensemble des types de messages acceptés par le port en réception (resp. émission). Le type d’un message est la classe Java qui l’implante. Liaison de deux ports Un port de sortie peut être relié à un port d’entrée s’il est conforme à ce dernier. Pour ce faire, l’ensemble des types de messages susceptibles d’être émis par le port de sortie doit être un sous-ensemble de l’ensemble des types et sous-types de messages acceptés par le port d’entrée. En pratique, la définition de « sous-type » de messages est mise en œuvre par la notion d’héritage de classes fournie par le langage Java. 3.2.2. La partie contrôle ou SCContainer La partie contrôle d’un SCBean est mise en œuvre par son SCContainer. Celui-ci garantit la persistance du SCBean qu’il encapsule, ainsi que l’atomicité de son exécution. Par ailleurs, le SCContainer met en œuvre des interfaces qui permettent de procéder à des opérations de configuration et d’administration sur le SCBean. L’interface de liaison permet de lier un port de sortie du SCBean au port d’entrée d’un autre SCBean, à condition que les ports soient conformes. Elle fournit aussi le dual de cette fonction de liaison : la rupture de liaison qui permet de rompre une liaison entre deux ports. L’interface de gestion du cycle de vie permet trois actions sur le SCBean : – son initialisation lors du (re)chargement du composant. Ces chargements ont lieu au déploiement du composant, ou lors de reprises après pannes, – son démarrage qui consiste à lancer le démarrage applicatif du composant, – son arrêt qui consiste à arrêter la distribution des messages destinés au SCBean et donc le fonctionnement du SCBean. L’interface de configuration des attributs permet de configurer les attributs du SCBean. Pour ce faire, le SCBean doit fournir des fonctions de modifications de ses attributs ayant la signature suivante : set). 3.2.3. Les composants composites Le modèle de composants est hiérarchique : un assemblage de SCBean peut être manipulé comme un SCBean appelé composite. Un SCBean composite possède une différence majeure par rapport à un SCBean primitif : il ne possède pas de code fonctionnel ; il ne fait qu’exporter certains ports des SCBean qu’il encapsule. Par ailleurs le code de ses interfaces de contrôle est implanté par les outils d’administration et de déploiement présentés au paragraphe 4.

La plate-forme à composants ScalAgent

261

L’intérêt de la composition réside dans le fait qu’elle permet de structurer l’application. En effet, pour lier deux SCBean, le modèle de composants exige que ceux-ci soient encapsulés par un même composite. Par ailleurs, le modèle n’autorise pas le partage de composant : un composant ne peut pas être le fils direct de deux composites. De fait, une application construite en respectant ce modèle sera toujours représentée par une hiérarchie en arbre de composites. Cette hiérarchie est utilisée par les outils d’administration et de déploiement. 3.2.4. Exemple La figure 2 donne l’exemple d’une application suivant le modèle de composants présenté.

Application

partie contrôle interface de contrôle

Client init

init

{Initialisation}

{Initialisation}

Message message_a _envoyer

HelloWorld

partie fonctionnelle port d’entrée

affichage {*}

filtre {*}

port de sortie

filtre {*}

Message

nom du port signature du port attribut du composant

Figure 2. Un exemple d’application suivant le modèle

L’application est représentée par le composite Appli ation. Celui-ci encapsule un composant Client qui a pour rôle d’envoyer des messages au composant HelloWorld. Client possède un attribut qui définit le message qu’il envoie. Celui-ci peut être modifié via son interface de contrôle des attributs. Par ailleurs, il possède un port d’entrée init qui est exporté par le composite Appli ation. Ce port d’entrée n’accepte que les messages du type Initialisation. Sur réception d’un message de ce type, il envoie le message qu’il a en attribut sur son port de sortie affi hage. Ce message est reçu par le port d’entrée filtre du composant HelloWorld. Ce port d’entrée accepte tous les types de message et affiche les messages du type HelloWorld. 3.2.5. Mise en œuvre La mise en œuvre de ce modèle de composants à l’aide d’agents est aisée. Les agents servent à implémenter les SCContainer. Chaque SCContainer encapsule un SCBean. Ce dernier est représenté par un objet Java. A chaque port d’entrée du SCBean est associée une méthode de l’objet qui est appelée par le SCContainer quand un message arrive. Par ailleurs, le SCBean accède à ses ports de sortie via l’interface de contrôle de liaison mise en œuvre par le SCContainer. Enfin, l’objet implémentant le SCBean doit fournir les méthodes utilisées par les interfaces de contrôle du SCContainer : méthodes d’initialisation, d’activation, d’arrêt, etc.

262

RSTI - TSI – 23/2004. Composants et adaptabilité

En pratique, la plate-forme fournit des classes de base de SCContainers. Le développeur de l’application doit donc uniquement développer les classes des SCBeans. Mais il est aussi libre de développer d’autres classes de SCContainers s’il veut des fonctionnalités évoluées. 3.2.6. Un support pour la description d’architectures Pour manipuler le modèle de composants, nous proposons d’utiliser un langage de description d’architectures (ADL). Notre objectif est de construire une application par assemblage de composants. En ce sens, l’utilisation d’un ADL est un pas vers la réutilisation de composants et la « programmation à gros grain » [DER 76]. L’ADL proposé [BEL 00] sert à décrire les différents composants de l’application et à donner des informations sur sa configuration initiale, c’est-à-dire les composants à déployer et la valeur de leurs attributs. Chaque composant est associé à une description. Dans le cas d’un SCBean primitif, on donne la description de ses interfaces fonctionnelles, de ses attributs et de sa mise en œuvre (classe Java du SCBean et du SCContainer). Concernant les SCBean composites, on décrit l’architecture interne du composite, c’est-à-dire l’ensemble des composants encapsulés, leur localisation et leurs interconnexions.

Composant Client {

| Composite Appli ation { | *** Attributs *** | *** Interfa es fon tionnelles *** Message message_a_envoyer; | Port entree { | nom = init ; *** Interfa es fon tionnelles *** | signature = Initialisation ; Port entree { | } nom = init ; | signature = Initialisation ; | *** Composants en apsulés *** } | Client lient = | new Client(zir onium.inrialpes.fr) ; Port sortie { | nom = affi hage ; | HelloWorld helloWorld = signature = * ; | new HelloWorld(strontium.inrialpes.fr) ; } | | *** Liaisons *** *** Mise en oeuvre *** | this.init => lient.init ; SCBean = fr.ClientBean ; | lient.affi hage => helloWorld.filtre ; SCContainer = fr.ClientContainer ; | } | }

Figure 3. La description du composant Client et du composite Appli ation La figure 3 donne deux exemples de description de composants. Celle du SCBean primitif Client spécifie son attribut, ses interfaces fonctionnelles et sa mise en œuvre. La description du composite Appli ation spécifie les interfaces fonctionnelles du composite. De plus, les composants encapsulés sont indiqués avec en paramètre le site de leur déploiement. Enfin, les liaisons entre composants sont spécifiées à l’aide du symbole =>.

La plate-forme à composants ScalAgent

263

4. Outils de la plate-forme 4.1. Motivations – Travaux connexes Le modèle de composants et l’ADL associé ont été conçus pour permettre l’utilisation d’outils facilitant les différentes activités du cycle de vie d’une application. Il existe aujourd’hui deux grandes catégories d’ADL qui diffèrent par l’exploitation qu’elles font de la description d’une application : – génération d’un exécutable : c’est le cas d’ADL comme UniCon [SHA 95], Olan [BEL 00], Aster [ISS 98] ou C2 [MED 99] qui utilisent la description de l’application pour générer une partie du code des composants ; – analyse du système : c’est le cas d’ADL tels que Rapide [LUC 95] ou Wright [ALL 97] qui permettent au développeur de l’application de spécifier le comportement dynamique des différentes entités du système. Ces ADL utilisent la description de l’application pour modéliser et analyser les scénarios envisageables. On peut faire plusieurs reproches aux ADL existants : d’une part, aucun ADL ne propose de déployer une application à partir de sa description. En effet, dans le meilleur des cas, les ADL fournissent une aide à la génération de code de composants, mais ne prennent en charge ni l’installation de ce code sur les différents sites, ni l’interconnexion des composants, ou encore l’activation de l’application. Une autre lacune des ADL existants est qu’ils ne fournissent pas d’aide à la configuration d’une application. Les applications distribuées s’exécutent dans des environnements souvent hétérogènes, et exigent, de fait, un certain nombre de propriétés dites « non fonctionnelles ». Ces propriétés sont aussi bien associées aux composants (persistance, transaction, etc.), qu’aux connecteurs (sécurité, fiabilité, ordonnancement, etc.). Elles sont fournies par l’intergiciel en charge de l’exécution des composants et de leurs communications. La configuration de cet intergiciel est souvent complexe et à la charge du développeur de l’application. Enfin, un dernier reproche que l’on peut formuler est le manque de prise en charge des aspects dynamiques dans les ADL : aucun support n’est fourni pour la reconfiguration dynamique des applications. Nous avons construit des outils visant à combler ces manques. Nous nous focalisons, dans cet article, sur l’outil de déploiement. Le lecteur intéressé trouvera une description de l’outil de reconfiguration dynamique dans [PAL 01b], et une description de l’outil de configuration de l’intergiciel dans [QUE 02].

4.2. Un outil de déploiement asynchrone hiérarchique L’outil de déploiement exploite la description ADL de l’application pour instancier et déployer les différents SCContainer (et SCBean associés) sur les serveurs d’agents, et réaliser les interconnexions entre SCBean. L’objectif de cet outil de déploiement est (1) d’exploiter la description ADL pour faciliter la prise en compte des contraintes fonctionnelles de l’application à déployer, et (2) d’exploiter la structure hiérarchique

264

RSTI - TSI – 23/2004. Composants et adaptabilité

de l’application à déployer pour distribuer l’intelligence de déploiement. Pour ce faire, l’outil de déploiement met en œuvre un dispositif de type workflow décomposé en activités. Les activités s’exécutent parallèlement ou séquentiellement. Elles sont responsables des différents aspects du déploiement : instanciation, liaison, activation, etc. Ces activités s’exécutent au sein d’entités hiérarchiquement organisées appelées contrôleur de déploiement. Les contrôleurs sont organisés en arbre ; leur hiérarchie est calquée sur celle de l’application : chaque composant composite est associé à un contrôleur. 4.2.1. Architecture d’un contrôleur Principe de fonctionnement Comme on peut le voir sur la figure 4, à l’exception du contrôleur racine, le fonctionnement d’un contrôleur est initié par son contrôleur père. Une session de communication est alors établie entre les deux contrôleurs. A l’ouverture de cette session, une activité est créée au sein du contrôleur pour effectuer les opérations de déploiement.

Contrôleur père

Ouverture de session Opération de contrôle

Acquittement Evénement de contrôle

Contrôleur

Activités

Mise à jour Interrogation Abonnement

Référentiel Evénement

Ouverture de session Opération de contrôle

Acquittement Evénement de contrôle

Contrôleur fils Fabrique de composants Fabrique de liaisons

Figure 4. Architecture d’un contrôleur

Les résultats des opérations effectuées par un contrôleur sont stockés dans un référentiel d’architecture. Suite à certaines mises à jour, le référentiel émet des événements à destination des activités qui y réagissent en effectuant de nouvelles opérations ou en donnant naissance à d’autres activités.

La plate-forme à composants ScalAgent

265

Les activités Une activité est composée de sous-activités, appelées activités primitives, s’exécutant parallèlement ou séquentiellement. On distingue trois activités primitives : – les activités de création dont le rôle est de créer les SCContainer. Le code de ces activités dépend du type de composant à instancier : dans le cas d’un composant composite, l’activité de création crée le contrôleur associé au composite et ouvre une session en donnant la description ADL du composite. Cette session est utilisée par les autres activités pour envoyer des ordres de contrôle. Dans le cas d’un composant primitif, l’activité crée et déploie l’agent représentant le SCContainer. Dans tous les cas, il résulte de cette activité la mise à jour du référentiel maintenu par le contrôleur. Cette mise à jour sert à stocker une référence vers le SCBean créé ainsi que vers ses interfaces. Dans le cas des composites, les références d’interfaces enregistrées dans le référentiel sont celles des composants encapsulés ; – les activités de liaison dont le rôle est de créer une liaison entre composants. Cette activité crée la liaison en utilisant le contrôleur de liaison du SCBean à lier ; – les activités d’activation dont le rôle est d’activer un SCBean par un appel de méthode sur son interface de contrôle d’activation. Dans le cas d’un composite, cette activité utilise la session créée par l’activité de création pour transmettre l’ordre d’activation au contrôleur fils responsable du composite. A l’issue de cette activité, la session avec le contrôleur père est fermée.

Organisation des activités Les différentes activités ayant lieu au sein d’un contrôleur s’exécutent de façon indépendante. Elles se synchronisent par l’intermédiaire des événements générés par le référentiel suite à ses mises à jour. Les activités peuvent s’exécuter parallèlement ou séquentiellement suivant leur type et les composants sur lesquels elles œuvrent. Ainsi, toutes les activités de création s’exécutent parallèlement. En revanche, une activité de liaison s’exécute après que les activités de création des deux composants à lier ont mis à jour le référentiel. De plus, une activité d’activation d’un composant s’exécute après que les ports de sortie du composant ont été liés. Cette organisation des activités garantit une activation « au plus tôt » des différents composants. Ce ne serait pas le cas si on exécutait séquentiellement les activités de création, puis les activités de liaison et enfin les activités d’activation.

Mise en œuvre Les contrôleurs, les activités, ainsi que les référentiels sont implémentés à l’aide d’agents. Lors d’une ouverture de session, l’agent contrôleur destinataire de la session est créé et déployé. Cet agent contrôleur déploie l’agent responsable du référentiel et utilise la description ADL pour déployer les agents responsables des différentes activités : une activité de création et d’activation par composant encapsulé, ainsi qu’une activité par liaison à établir.

266

RSTI - TSI – 23/2004. Composants et adaptabilité

4.2.2. Traitement des pannes L’application de déploiement présentée peut être sujette à des pannes. Dans cette section, nous montrons comment ces pannes sont détectées et traitées. Il est important de noter que nous ne traitons que les pannes franches.

Détection des pannes Deux types de pannes peuvent se produire : soit une activité se bloque – par exemple, elle ne parvient pas à créer un composant –, soit une machine tombe en panne. Dans ce cas, les activités qui dialoguent avec cette machine sont bloquées. De fait, mis à part le cas des pannes du contrôleur racine, tous les autres cas de pannes entraînent le blocage d’une ou plusieurs activités. Pour détecter ces pannes, deux stratégies sont envisageables. La première consiste à borner les temps d’exécution des différentes activités et à propager des messages d’erreur dès lors qu’une activité ne s’est pas terminée dans le délai qui lui était imparti. Cette méthode n’est pas viable pour déployer des applications à grande échelle. La stratégie adoptée est qualifiée d’« optimiste » : aucun message d’erreur n’est propagé. En revanche, chaque contrôleur héberge une activité supplémentaire, appelée activité d’observation dont le rôle est d’observer la progression des activités ayant lieu au sein du contrôleur. Cette activité réagit aux événements produits par le référentiel d’architecture, les filtre et transmet les événements importants au contrôleur père. Les activités d’observation permettent d’avoir, au niveau du contrôleur racine, une connaissance détaillée de l’état du déploiement. L’initiateur du déploiement utilise cette connaissance pour détecter les éventuels blocages et y réagir.

Traitement des pannes Les pannes sont traitées en deux étapes : dans un premier temps, arrêt de tout ou partie du déploiement, puis, dans un second temps, nouvel essai de déploiement. Entre ces deux étapes, il peut y avoir une intervention humaine pour redémarrer un site, modifier la description ADL, etc. Notons que les parties de l’application qui avaient déjà été activées poursuivent leur exécution. Stopper une partie de l’application de déploiement se fait en stoppant un certain nombre de contrôleurs. Pour ce faire, une session ouverte entre un contrôleur et son contrôleur père peut recevoir un ordre d’interruption qui a pour effet de stopper les activités du contrôleur fils associé à la session. Pour procéder à un nouveau déploiement, il faut ouvrir une nouvelle session vers le contrôleur racine et donner un ordre retry avec la nouvelle description ADL. Des sessions retry sont ouvertes vers les contrôleurs fils. Les activités stoppées sont redémarrées (parfois recréées). Elles utilisent le référentiel pour déterminer les actions qu’il reste à effectuer.

La plate-forme à composants ScalAgent

267

4.2.3. Mesures expérimentales Des mesures de performance ont été réalisées afin de valider cette application de déploiement. Elles ont été réalisées sur une grappe de 216 PC linux équipés de processeur Intel Pentium III à 733 MHz, avec 256 Mo de mémoire RAM. Les tests ont consisté à déployer des applications construites suivant le schéma représenté sur la figure 5. Chaque application a une hiérarchie arborescente à trois niveaux : un site central relié à n composants composites, chacun encapsulant un composant régional relié à m composants locaux. Chaque composite local encapsule 10 composants primitifs. Chaque composite régional encapsule 10 composants primitifs ainsi que des composites locaux. Les expériences réalisées évaluent le temps moyen de terminaison du déploiement. La complétion consiste à recevoir, sur le site central, les indicateurs de terminaison du déploiement. Nous avons fait varier plusieurs paramètres : – le nombre de machines physiques sur lesquelles le déploiement est réalisé ; – le nombre de composites locaux. Il faut noter que chaque composite local est exécuté au sein d’un serveur d’agents. Un serveur d’agents est un processus Java. Plus une machine héberge de serveurs d’agents, plus la puissance requise est importante. Dans les applications réelles, on privilégie un petit nombre de serveurs d’agents par machine, et plusieurs composants par serveur ; – le nombre de composites régionaux. Notons qu’une augmentation du nombre de composites régionaux permet de faire diminuer le nombre de composites locaux encapsulés dans chaque composite régional. Ceci engendre une parallélisation des opérations de déploiement.

Figure 5. Architecture de l’application de test du déploiement

268

RSTI - TSI – 23/2004. Composants et adaptabilité

Impact de la distribution

Temps de completion du deploiement (s)

Pour évaluer l’impact de la distribution, nous maintenons un nombre constant de composites régionaux et locaux (m = 10 et n = 100) et nous faisons varier le nombre de machines sur lesquelles l’application est déployée (de 20 à 111). Ceci correspond à l’hébergement de 110 serveurs d’agents, avec approximativement 10 composants par serveurs. Les résultats obtenus sont présentés dans la figure 6. L’augmentation du nombre de machine permet de réduire le nombre de serveurs d’agents hébergés par chaque machine. Cela diminue la charge des machines et améliore les performances du déploiement (entre 20 et 30 machines). En revanche, lorsque le nombre de machine est trop important, les communications entre serveurs d’agents sont moins efficaces (car entre machines distantes), et le temps de déploiement augmente. 60 58 56 54 52 50 48 46 44 42 0

20

40

60

80

100

120

Nombre de machines

Figure 6. Impact de la décentralisation sur le temps de déploiement

Effet de l’architecture hiérarchique de l’application Ce test a pour but d’évaluer l’impact de la hiérarchie de composites au sein de l’application. Rappelons que l’application est un composite contenant m composites régionaux, chacun contenant outre des composants primitifs, n/m composites locaux. La figure 7 montre que, pour des nombres fixes de machines (= 60) et de composants locaux (n = 500), le temps de déploiement atteint un minimum pour m = 10 (ou le rapport n/m = 50). Ceci s’explique par la conception du service de déploiement qui associe à chaque composite un contrôleur en charge de déployer ses souscomposants. Plus le nombre de contrôleurs créés est important, plus le déploiement est parallélisé. Lorsque le déploiement est trop parallélisé, le travail de consolidation du contrôleur de niveau supérieur (ici du site central) est important et peut pénaliser les performances. Cette mesure montre ainsi que le découpage hiérarchique de l’architecture d’une application a une incidence sur les performances de déploiement et ouvre la voie vers des outils d’aide à l’architecture d’une application.

Temps de completion du deploiement (s)

La plate-forme à composants ScalAgent

269

225 220 215 210 205 200 195 190 0

5

10

15

20

25

30

35

40

Nombre de composites regionaux

Figure 7. Evaluation de l’architecture de l’application sur le déploiement

Test de passage à l’échelle

Temps de completion du deploiement (s)

Ce test est le plus important. Son rôle est de vérifier que l’augmentation proportionnelle des paramètres (n, m et le nombre de machines) ne perturbe pas les performances du déploiement. La figure 8 montre que le temps de déploiement reste linéaire, avec des paramètres variant ainsi : n = 10 à 450, m = 1 à 45, machines = 3 à 91.

200

150

100

50

0 0

10

20

30

40

50

60

70

80

90

Nombre de machines

Figure 8. Evaluation du passage à l’échelle de l’application de déploiement

4.2.4. Evaluation de l’outil de déploiement Cet outil de déploiement présente trois caractéristiques intéressantes. D’une part, il n’y a pas de contrôle centralisé du déploiement : l’application de déploiement est hiérarchisée en accord avec la structure de l’application à déployer. Cette hiérarchisation permet d’éviter la création de goulot d’étranglement et facilite le passage à l’échelle

270

RSTI - TSI – 23/2004. Composants et adaptabilité

de l’outil. Par ailleurs, l’exécution parallèle des différentes activités garantit une activation au plus tôt de l’ensemble des SCBeans déployés. En effet, chaque activité ne se synchronise (via le référentiel d’architecture) qu’avec les activités dont elle dépend. Enfin, l’utilisation de la plate-forme ScalAgent facilite la gestion des pannes. En effet, celle-ci permet l’exécution atomique des différentes composantes de l’outil, ce qui garantit la cohérence de l’état des différents sites de déploiement. A notre connaissance, aucune solution proposée à l’heure actuelle ne présente ces trois caractéristiques. Des travaux ont été menés sur le modèle de composants SOFA [KAL 02]. Comme dans l’approche que nous proposons, les concepteurs utilisent un ADL pour déployer l’application. Néanmoins, ce déploiement est centralisé et ne tire pas profit de la structure hiérarchique de l’application : un serveur centralise la connaissance et propage les ordres de création et de liaison. Les chercheurs de l’université du Colorado ont proposé un système de reconfiguration dans le modèle de composants EJB [RUT 02]. Ils proposent BARK (Bean Automatic Reconfiguration FrameworK) qui est un système de gestion du cycle de vie des EJB. Le déploiement distribué des EJB n’est pas prévu dans la spécification du modèle : seule l’installation sur un site à l’aide d’un fichier .jar est prévue. BARK propose de lever cette limitation. Il est constitué d’un ensemble de modules logiciels installés au niveau de chaque serveur d’EJB. Ces modules partagent un répertoire et sont contrôlés par une machine centrale qui détermine les scripts de commandes à effectuer. La démarche proposée rejoint la nôtre du fait que BARK permet d’exhiber les liaisons entre EJB. Il peut ainsi être considéré comme un langage d’assemblage d’EJB. Cependant, les différentes commandes sont centralisées et synchrones. Il est aussi important de mentionner les travaux menés par Hall et al. sur le déploiement de logiciel [HAL 99]. Le système est composé d’un ensemble de serveurs, appelés docks. Ces docks sont utilisés par un ensemble d’agents qui sont des programmes exécutables en charge d’une tâche de déploiement spécifique. Les agents peuvent migrer d’un dock à un autre et communiquent via un système de propagation d’événements. Un point intéressant de ces travaux est l’utilisation de communications asynchrones et d’agents. Cependant, ce système est dédié au déploiement de logiciel et non d’applications à base de composants. Il n’y a pas de déploiement hiérarchique ; de plus, il ne permet pas l’activation anticipée de certaines parties du logiciel. Enfin, aucune précision n’est donnée sur la tolérance aux fautes : contrairement à notre proposition, les agents ne s’exécutent pas de façon atomique. Enfin, citons les travaux menés sur le déploiement d’applications sur Grilles. [BAU 02] propose un modèle de programmation distribué à base d’objets actifs : ProActive. Afin d’ôter du code des objets toute référence vers une machine précise, un répertoire, etc., les concepteurs proposent de référencer dans le code des structures virtuelles. L’association entre structures virtuelles et structures réelles est fait par l’intermédiaire de descripteurs XML. Comme dans l’approche que nous proposons, l’utilisation d’un fichier de description permet de séparer code fonctionnel et code de déploiement. Néanmoins, nous ne visons pas le même type de déploiement : ce système sert à déployer des entités de bas niveau comme des machines virtuelles

La plate-forme à composants ScalAgent

271

Java. Nous proposons de déployer des applications à composants utilisant ces machines virtuelles.

5. Conclusion Aujourd’hui, les développeurs sont confrontés au problème de la construction d’applications réparties dans un environnement faiblement couplé à grande échelle. Les intergiciels à messages sont bien adaptés à cette classe d’application. Cependant, la construction, la configuration et le déploiement de telles applications restent des tâches très difficiles du fait de nombreux facteurs : dispersion géographique, nombre important d’entités impliquées dans une application, hétérogénéité des plates-formes, fiabilité, sécurité, etc. L’infrastructure ScalAgent facilite ces tâches en proposant un ensemble d’outils basés, à la fois sur un intergiciel orienté messages et sur une approche orientée composants de la construction des applications. L’intergiciel permet la mise en œuvre d’un modèle de programmation distribué à base d’agents. Il garantit, en outre, des propriétés importantes pour la construction d’applications réparties à grande échelle : fiabilité, ordonnancement, atomicité, etc. Outre les propriétés offertes, cet intergiciel se distingue des autres MOM par le fait qu’il intègre les composants applicatifs et ne se contente pas de fournir une API de communication. Cette intégration de la partie applicative et de l’intergiciel est renforcée par l’élaboration d’un modèle de composants hiérarchique dédié aux applications asynchrones, et par l’utilisation d’un langage de description d’architectures. Les ADL sont utilisés pour permettre une structuration des applications et le développement d’outils facilitant la gestion du cycle de vie d’une application. Nous avons présenté un outil de déploiement permettant d’instancier, de lier et d’activer les composants intervenant dans une application. Cet article montre que cet outil présente le triple avantage d’être asynchrone, hiérarchique et fiable. La technologie qui est à l’origine de la plate-forme présentée dans ce papier a été conçue initalement dans le cadre du GIE Dyade (GIE entre l’INRIA et Bull). La plate-forme est aujourd’hui industrialisée par une jeune société ScalAgent Distributed Technologies, fondée par des membres de l’équipe initiale. Les usages de cette plateforme sont multiples. On citera plus particulièrement la collecte de données d’usage pour la facturation Telecom, la télésurveillance d’équipements de distribution électriques, l’analyse de logs de sécurité dans un réseau privé virtuel.

Remerciements Les auteurs tiennent à remercier les membres du projet Sardes et de la société ScalAgent qui ont contribué à ce travail. Ils tiennent également à remercier Sacha Krakowiak et Jacques Mossière pour leurs précieux commentaires sur cet article.

272

RSTI - TSI – 23/2004. Composants et adaptabilité

6. Bibliographie

[AGH 86] AGHA G. A., Actors : A Model of Concurrent Computation in Distributed Systems, Cambridge, MA, 1986. [ALL 97] A LLEN R., G ARLAN D., D OUENCE R., « Specifying Dynamism in Software Architectures », Proceedings of the Workshop on Foundations of Component-Based Software Engineering, Zurich, Switzerland, September 1997. [BAN 99] BANAVAR G., C HANDRA T., S TROM R., S TURMAN D., « A Case for Message Oriented Middleware », Lecture Notes in Computer Science, vol. 1693, Bratislava, Slovak Republic, September 1999, Distributed Computing 13th International Symposium, p. 1-18. [BAU 02] BAUDE F., C AROMEL D., H UET F., M ESTRE L., VAYSSIÈRE J., « Interactive and Descriptor-based Deployment of Object-Oriented Grid Applications », Proceedings of the 11th International Symposium on High Performance Distributed Computing (HPDC’02), Edinburgh, Scottland, July 2002, p. 93-102. [BEL 99] B ELLISSARD L., DE PALMA N., F REYSSINET A., H ERRMANN M., L ACOURTE S., « An Agent Plateform for Reliable Asynchronous Distributed Programming », Symposium on Reliable Distributed Systems (SRDS’99), Lausanne, Switzerland, October 1999. [BEL 00] B ELLISSARD L., DE PALMA N., F ÉLIOT D., « The Olan Architecture Definition Language », rapport no 24, 2000, C3DS. [BRU 02] B RUNETON E., C OUPAYE T., S TEFANI J.-B., « Recursive and Dynamic Software Composition with Sharing », Proceedings of the 7th ECOOP International Workshop on Component-Oriented Programming (WCOP’02), Malaga, Spain, June 10th-14th 2002. [BUC 03] B UCHMANN A., « Event-Based Middleware », IEEE Distributed Systems Online, , 2003. [C3D00] « C3DS project, Control and Coordination of Complex Distributed Services », 2000, http ://www.newcastle.research.ec.org/c3ds/. [CAR 01] C ARZANIGA A., ROSENBLUM D., W OLF A., « Design and Evaluation of a WideArea Event Notification Service », ACM Transactions on Computer Systems, vol. 19, no 3, 2001, p. 332-383. [DER 76] D E R EMER F., K RON H., « Programming in-the-Large Versus Programming in-theSmall », IEEE Transactions on Software Engineering, vol. 2, no 2, 1976, p. 80-86. [EJB02] « Enterprise JavaBeansTM Specification, Version 2.1 », August 2002, Sun Microsystems, http ://java.sun. om/produ ts/ejb/. [GEI 01] G EIHS K., « Middleware Challenges Ahead », IEEE Computer Magazine, vol. 6, no 34, 2001. [HAL 99] H ALL R., H EIMBIGNER D., W OLF A., « A Cooperative Approach to Support Software Deployment Using the Software Dock », Proceedings of the 21st International Conference on Software Engineering (ICSE’99), Los Angeles, CA, May 1999, p. 174-183. [ISS 98] I SSARNY V., B IDAN C., S ARIDAKIS T., « Achieving Middleware Customization in a Configuration-Based Development Environment : Experience with the Aster Prototype », Proceedings of the 4th International Conference on Configurable Distributed Systems, Annapolis, Maryland, USA, May 1998, p. 207-214. [JMS02] « Java Message Service Specification Final Release 1.1 », March 2002, Sun Microsystems, http ://java.sun.com/products/jms/docs.html.

La plate-forme à composants ScalAgent

273

[KAL 02] K ALIBERA T., T UMA P., « Distributed Component System Based On Architecture Description : the SOFA Experience », Proceedings of the 4th International Symposium on Distributed Objects and Applications (DOA’02), Irvine, CA, October 2002. [LUC 95] L UCKHAM D. C., K ENNEY J. J., AUGUSTIN L. M., V ERA J., B RYAN D., M ANN W., « Specification and Analysis of System Architecture Using Rapide », IEEE Transactions on Software Engineering, Special Issue on Software Architecture, vol. 21, no 4, 1995, p. 336-355. [MAF 97] M AFFEIS S., « iBus : The Java Intranet Software Bus », rapport, February 1997, Softwired A.G. [MAG 89] M AGEE J., K RAMER J., S LOMAN M., « Constructing Distributed Systems in Conic », IEEE Transactions on Software Engineering, vol. 15, no 6, 1989, IEEE Computer Society. [MAG 93] M AGEE J., D ULAY N., K RAMER J., « Structuring Parallel and Distributed Programs », IEE Software Engineering Journal, vol. 8, no 2, 1993, p. 73-82. [MED 99] M EDVIDOVIC N., ROSENBLUM D. S., TAYLOR R. N., « A Language and Environment for Architecture-Based Software Development and Evolution », Proceedings of the 21st International Conference on Software Engineering (ICSE’99), 1999, p. 44-53. [MER 01] M ERLE P., Ed., CORBA 3.0 New Components Chapters, OMG TC Document ptc/2001-11-03, November 2001. [MSM02] « Microsoft Message Queuing (MSMQ) », 2002, Microsoft, http ://www.microsoft.com/msmq/. [PAL 00] DE PALMA N., B ELLISSARD L., F ÉLIOT D., F REYSSINET A., H ERRMANN M., L ACOURTE S., « The AAA Agent-Based Message Oriented Middleware », rapport no 30, 2000, C3DS. [PAL 01a] DE PALMA N., « Service d’Administration d’Applications Réparties », PhD thesis, UJF - Grenoble, 2001. [PAL 01b] DE PALMA N., L AUMAY P., B ELLISSARD L., « Ensuring Dynamic Reconfiguration Consistency », The Sixth International Workshop on Component-Oriented Programming (WCOP’01), in association with ECOOP, Budapest, June 2001. [QUE 02] Q UEMA V., B ELLISSARD L., « Configuration de Middleware Dirigée par les Applications », Actes des Journées sur les Systèmes à Composants Adaptables et Extensibles, Grenoble, France, 17-18 octobre 2002. [RIV 02] R IVEILL M., « Programmation par Composition et Déploiement d’Applications Réparties », l’Objet, numéro spécial sur la coopération dans les systèmes à objets, vol. 8, no 3, 2002, p. 91-107. [RUT 02] RUTHERFORD M., A NDERSON K., C ARZANIGA A., H EIMBIGNER D., W OLF A., « Reconfiguration in the Enterprise JavaBean Component Model », Proceedings of the IFIP/ACM Working Conference on Component Deployment (CD’02), Berlin, Germany, June 2002, p. 67-81. [SCA02] « Remote Supervision of Power Supply Devices », 2002, ScalAgent Distributed Technologies, White Paper, http ://www.scalagent.com. [SHA 95] S HAW M., D E L INE R., K LEIN D. V., ROSS T. L., YOUNG D. M., Z ELESNIK G., « Abstractions for Software Architecture and Tools to Support Them », Software Engineering, vol. 21, no 4, 1995, p. 314-335.

274

RSTI - TSI – 23/2004. Composants et adaptabilité

[SHA 96] S HAW M., G ARLAN D., Software Architecture : Perspectives on an Emerging Discipline, Prentice Hall, 1996. [SON02] « sonicMQ », 2002, Sonic software, http ://www.sonicsoftware.com/. [STR 98] S TROM R., BANAVAR G., C HANDRA T., K APLAN M., M ILLER K., M UKHER JEE B., S TURMAN D., WARD M., « Gryphon : An Information Flow Based Approach to Message Brokering », International Symposium on Software Reliability Engineering (ISSRE’98), fast abstract, Paderborn, Germany, November 1998. [TUR 93] T URNER K., Using Formal Description Techniques - An Introduction to Estelle, LOTOS and SDL, Wiley, 1993.

Vivien Quéma a obtenu un diplôme d’ingénieur en télécommunications de l’INP Grenoble en 2002. Actuellement en thèse à l’INP Grenoble, il mène ses travaux de recherche dans le projet SARDES (INRIA, LSR-IMAG). Ses recherches portent sur les intergiciels réflexifs, le déploiement d’applications réparties, et la gestion de ressources dans les systèmes à composants. Roland Balter a obtenu un diplôme d’ingénieur de l’ENSIMAG en 1970, et un doctorat d’état en informatique de l’Université Joseph Fourier (Grenoble 1) en 1985. Après avoir occupé divers postes dans la société Bull, il devient professeur à l’Université Joseph Fourier en 1993. Depuis 2002, il est directeur scientifique de la société ScalAgent Distributed Technologies. Luc Bellissard a obtenu un diplôme d’ingénieur de l’ENSIMAG en 1993, et un doctorat en informatique de l’INP Grenoble en 1997. Maître de conférences à l’INP Grenoble depuis 1998, ses recherches portent sur les intergiciels et les architectures logicielles distribuées. Depuis 2002, il est directeur produits et services de la société ScalAgent Distributed Technologies. David Féliot a obtenu un diplôme d’ingénieur de l’ENSIMAG en 1998. Il est actuellement en charge des projets de recherche et développement au sein de la société ScalAgent Distributed Technologies. Il était auparavant ingénieur dans la société Bull et à l’INRIA où il a travaillé sur les intergiciels asynchrones et les architectures logicielles à composants. André Freyssinet a obtenu un doctorat en informatique de l’Université Joseph Fourier (Grenoble 1) en 1991. Il a occupé différentes fonctions de développement et d’expertise technique au sein de la société Bull, dans le domaine des systèmes d’exploitation et des intergiciels. Depuis septembre 2002, il est directeur technique de la société ScalAgent Distributed Technologies. Serge Lacourte a obtenu un diplôme d’ingénieur de l’Ecole Polytechnique en 1987, et un doctorat en informatique de l’Université Joseph Fourier (Grenoble 1) en 1991. Après avoir occupé divers postes au sein du département Recherche et Développement de Bull, il devient PDG de la société ScalAgent Distributed Technologies en décembre 2001.

Article reçu le 2 décembre 2002 Version révisée le 16 juin 2003 Rédacteur responsable : Michel Riveill