Deuxième partie
Spécification et réalisation
Chapitre 5
Communication inter Aglets
5.1 Introduction
La "communication" est le processus de transmission
d'informations. Ce terme provient du latin « communicare » qui
signifie « mettre en commun ». La communication peut donc être
considérée comme un processus pour la mise en commun
d'informations et de connaissances.
Une propriété importante des aglets est qu'ils
peuvent communiquer entre eux via un environnement dans lequel les aglets qui
ne connaissent pas peuvent échanger des messages. C'est-à- dire,
un aglet doit être capable de coopérer avec des aglets
développés par d'autres développeurs.
Dans cette partie, nous allons décrire les
différentes techniques de communication par messages entre aglets.
Plusieurs moyens de communication inter aglets sont supportés; ainsi
qu'une description des failles da la plateforme Aglets au niveau de la
communication sera donnée.
5.2 Types de communication
Les aglets d'IBM fournissent un modèle d'interface pour
la communication plus flexible, et plus extensible que l'invocation normale de
méthodes.
L'aglet supporte un environnement de communication (Figure4.1)
qui est:
· extensible
· indépendant de la localisation
· synchrone / asynchrone
_ _
_ _
___ ___
_ _
Message Object
Agletcontext Communication
AgletAglet message
Figure 4.1 L'environnement Aglet.
5.2.1 Communication simple
Le principal moyen pour les aglets de communiquer est l'envoi
de messages. La méthode d'appel du service de messagerie dans la classe
Aglet s'appelle handleMessage(). Ce n'est pas une méthode à
utiliser directement pour envoyer un message à un aglet, les
méthodes sendMessage() ou sendAsyncMessage() sont utilisées
à la place. Ces 2 méthodes ont l'avantage d'abstraire
l'emplacement de l'aglet. Ce qui signifie que peu importe où se trouve
l'aglet, l'interface (sendMessage) reste identique.
5.2.2 Communication synchrone
La communication synchrone entre aglet est assurée par
la fonction getReply(). Après avoir envoyé un message, on peut
attendre la réponse du destinataire par cette fonction. Cette
dernière reste bloquante jusqu'à ce que la réponse soit
retournée (Figure 4.2). La méthode sendMessage (Message msg)
permet l'envoi de messages synchrones. Elle est bloquante car elle retourne la
réponse du destinataire. Ensuite 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
: Agl et.handleMessage (Message msg). Puis la méthode
Message.sendReply() permet de retourner une réponse à
l'émétteur. Elle supporte plusieurs constructions (Figure 4.2)
:
public void Message.sendReply ()
public void Message.sendReply (boolean reply)
public void Message.sendReply (Object reply)
handleMessage(Message msg) getReplyØ handleMessage(Message
msg)
sendMessage(Message msg) sendMessage(Message msg)
Figure 4.2 Communications synchrones.
5.2.3 Communication asynchrone
Dans le cas d'une communication asynchrone, 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 (Figure 4.3).
handleMessage(Message msg)
sendMessage(Message msg) sendMessage(Message msg)
Figure 4.3 Communications Asynchrones.
Ce type de communication est implémenté
grâce à la notion de future Objet.Un ensemble de méthodes
de la classe FutureReply concernent la recherche de la réponse d'un
message. La transmission non bloquante ou asynchrones des messages permet de
poursuivre l'exécution jusqu'à ce que la réponse soit
arrivée.
public FutureReply AgletProxy. sendFutureMessage (Message msg) La
classe FutureReply offre des méthodes pour la récupération
des messages.
public boolean FutureReply.isAvailable() Vérifie si la
réponse est arrivée ou non.
public void FutureReply. waitForReply(long duration) Attente de
l'arrivée de la réponse pour la durée duration.
public void FutureReply. waitForReply() Blocage en attente de
l'arrivée de la réponse. public Object FutureReply. getReply()
Récupère la réponse.
Un agent peut avoir besoin de communiquer avec son
propriétaire, avec d'autres agents (locaux ou distants), ou avec des
services. La communication avec le propriétaire, identifiée
dans les attributs de l'agent, doit être asynchrone.
Dans le cas de communication avec un agent ou un service distant, le choix
entre la communication distante et la migration sur le site distant est un
problème complexe (compromis entre le coût de communication et le
coût de migration) dont la résolution est laissée au
programmeur dans les systèmes actuels.
|