JORAM bénéficie directement de la technologie de pointe utilisée pour mettre en œuvre la plate-forme. Cette technologie et la façon dont elle est utilisé dans JORAM sont brièvement présentées dans cette section.
L’expérience tirée de nombreuses années de recherche en informatique distribuée nous a conduit à adopter une approche basée sur l’intelligence distribuée pour la conception d’applications distribuées. Manipuler les données à proximité de leurs sources permet d’équilibrer la charge de calcul entre les ressources disponibles sur le réseau, et de réduire la bande passante puisque seules les données pertinentes pré-traitées sont transportées sur le réseau. Ce principe de conception de base est mis en œuvre à travers un modèle de programmation et de l’environnement d’exécution décrits ci-dessous.
Modèle de programmation à agents
Les agents sont des objets Java distribués qui communiquent par passage de messages. Le corps d’un agent est défini par une classe Java qui hérite d’une classe pré-définie Agent
(cette classe définit le comportement générique d’un objet agent).
Les agents respectent un modèle de programmation “Evénement/Réaction”. Un “événement” est la notification d’un message typé qui entraine l’exécution d’une méthode de la classe d’objet (la « réaction »). Cette méthode peut à son tour générer de nouveaux événements à destination d’autres agents. Une « réaction » est atomique (propriété « tout ou rien ») et l’état d’un agent est persistant.
Environnement d’exécution : Agent Server
Les agents sont des entités légères hébergées par une structure d’accueil nommée “Agent Server”. Les “Agent Server” sont des structures d’exécution configurables qui peuvent mettre en œuvre des politiques différentes pour le comportement des agents (par exemple, l’atomicité et la persistance).
Au cœur du serveur d’agent le moteur d’exécution contrôle le flot d’exécution des agents. Ce flot unique est constitué d’une boucle qui exécute les réactions successives de façon atomique.
Le composant Channel
est responsable de la transmission d’événements sur les serveurs agent cibles. Le bus de messages distribué est implanté par la coopération des composants Channel
de chaque serveur. Ce bus fournit la voie de communication entre les agents, s’exécutant dans un même serveur ou hébergés par des serveurs différents (sur la même machine ou sur des machines différentes).
Chaque bus local est constitué de deux parties : un composant Channel
et un ensemble de composants Network
.
- Le composant
Channel
réalise l’interface entre le moteur d’exécution et les composantsNetwork
. - Un composant
Network
permet la communication entre des serveurs d’agents au travers d’un protocole donné (des composants sont disponibles pour TCP/IP, HTTP, SOAP, SSL, etc.).
JORAM une plateforme JMS à base d’agents
La technologie à base d’agents de ScalAgent D.T. a été largement expérimenté pour construire et déployer des applications distribuées dans différents domaines. La plateforme JORAM est un exemple d’une telle application.
Un serveur JORAM, la plateforme qui gère les objets JMS, est une application à agents structurées comme suit :
- Les destinations JMS, Queue et Topic, sont des agents persistants.
- Un agent persistant “proxy” est créé pour chaque utilisateur enregistré sur le serveur. Cet agent gère le canal de communication pour les clients JMS associés à cet utilisateur. La propriété dite de “Store and Forward” est réalisée de manière très naturelle en utilisant les propriétés de persistance et d’atomicité de la plateforme.
- Les souscriptions durables et la persistance des messages sont implantés directement par la plateforme. En outre, la garantie de délivrance des messages est également offerte par le MOM
La flexibilité globale de la plateforme JORAM bénéficie directement de la capacité de configuration des serveurs agent. Ces paramètres de configuration peuvent évoluer dynamiquement et permettent d’adapter la structure d’une plateforme JORAM à l’évolution des besoins (nouveau serveur, la migration des destinations Queue et Topic, modification des paramètres de sécurité, etc.).