Les Aglets dIBM Cours IFT 6802 02102020 BETTAHAR
Les Aglets d’IBM Cours IFT 6802 02/10/2020 BETTAHAR Aoued
Introduction n Mobilité : Faculté de se déplacer n Agent Mobile n Avantages Réduction de la charge Réseau u Déplacer le Code vers les données u Plus sur et meilleure tolérance u
Aglet ? n Agent Applet Objet java mobile qui peut se déplacer d’une machine à une autre n Histoire Laboratoire de recherche d’IBM Tokyo – 1995 n But : Plate-forme pour agents mobiles dans environnement hétérogène (Internet)
Architecture n Aglet : Objet Java Autonome et réactif n Proxy : Objet représentant l’Aglet n n Contexte : environnement d‘Exécution et de Contrôle des Aglets. Hôte : machine capable d'héberger plusieurs contextes. L'hôte est généralement un nœud dans un réseau.
Aglet et Proxy Monde Extérieur Interactions Proxy Aglet
Aglet et Contexte Aglets Ressources Contexte
Contexte et Hôte Contexte A Contexte B Moteur (Engine) Contexte C
Cycle de vie n Création n Clonage n Déportation (dispatching) n Récupération (retracting) n Désactivation et réactivation. n Libération ou Destruction
Cycle de vie (2) Clonage Contexte A Agle t Fichiers. Class Déportation Contexte B Agle t Récupération Désactivation Activation Mémoire de masse Libération
Création de l’Aglet n méthode create. Aglet() Public abstract Aglet. Proxy create. Aglet(URL code. Base, String code, Object init) Retourne le proxy associé au nouvel Aglet create. Aglet() on. Creation() run()
Création de l’Aglet (2) n Exemple : 1> import aglet. *; 2> 3> public class Creation. Example extends Aglet { 4> public void run() { 5> try { 6> get. Aglet. Context(). create. Aglet(get. Code. Base(), 7> "Creation. Child", 8> null); 9> } 10> catch (Exception e) 11> {System. out. println(e. get. Message()); } 12> } 13> }
Le modèle événementiel de l'aglet n n Programmation basée sur la gestion des évènements. Implémentation d’écouteurs (Listener) Notifications de clonage Clone. Listener u Notifications de mobilité Mobility. Listener u Notifications de Persistance Persistency. Listener u
Clonage Public void on. Cloning(Clone. Event event) Annonce de clonage de l'aglet. La surcharge de cette méthode donne la possibilité d'exécuter les actions en conséquence. Après le clonage. . L'original reçoit un événement de type : Public void on. Cloned(Clone. Event event) Et le clone reçoit l'événement : Public void on. Clone(Clone. Event event) run() on. Cloning() Original on. Cloned() on. Clone() run() Clone
Exemple de clonage 1> public class Cloning. Example extends Aglet { 2> boolean the. Clone = false; 3> public void on. Creation(Object o) { 4> add. Clone. Listener(new Clone. Adapter() { 5> public void on. Cloning(Clone. Event e) {} 6> public void on. Clone(Clone. Event e) 7> {the. Clone = true; } 8> public void on. Cloned(Clone. Event e) {} 9> }); 10> } 11> public void run() { 12> if(!the. Clone) { 13> try {clone(); } 14> catch(Exception e ) { … }} 15> else { … } 16> } 17> }
Mobilité n Dispatching public void dispatch(URL destination) déporte un aglet vers autre contexte. Si appliquée au proxy, cette méthode retourne le nouveau proxy associé a l'aglet. public void on. Dispatching(Mobility. Event event) Annonce la déportation prochaine de l'aglet. (a surcharger) Public void on. Arrival(Mobility. Event event) Annonce l'arrivée à destination run() dispatch() Origine on. Dispatching() on. Arrival() run() Destination
Mobilité (2) n Récupération retract. Aglet(URL context. Address, Aglet. ID aid) permet de ramener un aglet vers son contexte d'origine. L’aglet reçoit alors les notifications suivantes : public void on. Reverting(Mobility. Event event) Annonce le retour vers le contexte d'origine. La surcharge de cette méthode donne la possibilité d'exécuter les actions en conséquence. public void on. Arrival(Mobility. Event event) Annonce la fin du transfert. retract. Aglet() on. Arrival() run() on. Reverting() Local Distant
Persistance deactivate(long duration) désactive un aglet. Il est stocké sur un support de masse. public void on. Deactivating(Persistency. Event event) La surcharge de cette méthode donne la possibilité d'exécuter les actions en conséquence. activate() réactive un aglet "endormi". Cela a pour effet de générer la notification suivante : Public void on. Activation(Persistency. Event event) run() deactivate() on. Deactivating() on. Activation() run() Avant Après
L'interface Context n n n Un aglet peut accéder aux informations relatives à son contexte d'exécution et communiquer avec son environnement grâce à l'interface Aglet. Context. Le contexte est crée par un serveur d'aglets qui n'est rien d'autre qu'une application permettant de gérer des aglets. Les principales méthodes offertes par Aglet. Context sont : Public Aglet. Proxy create. Aglet(URL codebase, String code, Object init) n Le paramètre init de type Object est transmis à l'aglet nouvellement crée. Ce dernier le récupère dans sa méthode on. Creation(Object init. (
Accès au Proxy public abstract Enumeration get. Aglet. Proxies() Enumération de tous les proxy du contexte courant. La liste englobe les proxy des aglets désactivés. public abstract Aglet. Proxy get. Aglet. Proxy(Aglet. ID aid) Accès au proxy d'un aglet dont l'identificateur aid est connu. public abstract Aglet. Proxy get. Aglet. Proxy( URL context Aglet. ID aid) Accès au proxy d'un aglet distant dont l'identificateur aid est connu.
Modèle de Communication n Basée sur l’échange d’Objet de Classe Message. Le proxy reçoit les messages et les transmet a son Aglet associé. La Classe Message : Message msg = new Message("hello"); Message msg = new Message("Mon nom", "Alice"); Message msg = new Message("Age", 50); Le premier paramètre est appelé kind. Il est obligatoire.
Messages synchrones n send. Message(Message msg) permet l'envoi de messages synchrones. Elle est bloquante car elle retourne la réponse du destinataire. n n public Object send. Message(Message message) Envoi message et attend la réponse. n n n … Le destinataire du message doit implémenter un gestionnaire des messages reçus. Cette fonctionnalité est rendue possible par la surcharge de la méthode Aglet. handle. Message(Message msg). La méthode Message. send. Reply permet de retourner une réponse a l'envoyeur. Elle supporte plusieurs constructions : public void Message. send. Reply () public void Message. send. Reply (boolean reply) public void Message. send. Reply (Object reply)
Exemple d’Echange de messages synchrones: 1> public class Simple. Message. Example extends Aglet { 2> public void run() { 3> try { 4> Aglet. Proxy proxy = get. Aglet. Context(). create. Aglet(get. Code. Base(), 5> "Simple. Message. Child", null); 6> try { proxy. send. Message(new Message("How are you? ") ); } 7> catch (Not. Handled. Exception e){ } 8> }catch (Exception e ) {} //Failed to create the child. 9> } 10> { 1> public class simple. Message. Child extends Aglet { 2> public boolean handle. Message(Message msg) { 3> if (msg. same. Kind("How are you? ") ) { 4> msg. send. Reply("I'm fine. thanks"); // Respond to message 5> return true; } 6> else 7> return false; // No, I did not handle this message. 8> } 9> }
Messages Asynchrones n n Implémenté grâce à la notion de future Objet. Après avoir envoyé le message, l’aglet doit vérifier régulièrement s’il y a eu réponse ou non. L’envoi est non bloquant. public Future. Reply Aglet. Proxy. send. Future. Message(Message msg) Classe Future. Reply offre des méthodes pour la récupération des messages. public boolean Future. Reply. is. Available() Vérifie si la réponse est arrivée ou non. public void Future. Reply. wait. For. Reply(long duration) Attente de l'arrivée de la réponse pour la durée duration. public void Future. Reply. wait. For. Reply() Blocage en attente de l'arrivée de la réponse. public Object Future. Reply. get. Reply() récupère la réponse.
Exemple d’Echange de messages asynchrones: 1> public class Future. Example extends Aglet { 2> public void run() { 3> try { 4> Aglet. Proxy proxy=get. Aglet. Context(). create. Aglet( 5> get. Code. Base(), "Future. Child", null); 6> try { 7> Future. Reply future = proxy. send. Future. Message( 8> new Message("Please reply") ); 9> while ( ! future. is. Available() ) 10> { // doincrement(); }; 11> String reply = (String) future. get. Reply(); 12> } catch ( Not. Handled. Exception e ) {} 13> } catch (Exception e) {} //Failed create the child. 14> } 15> } 16> {
Multicast n Possibilité pour un Aglet de s’abonner à un groupe. public void subscribe. Message(String kind) public boolean unsubscribe. All. Message() Envoi de Message : public Reply. Set multicast. Message(Message msg) n
Pour conclure n n n Agent Transfert Protocol Gabaris de Conception Aspect Sécurité
Merci. .
- Slides: 27