You are on page 1of 2

FIT 4 [INF443] 2011/12

Systmes et applications rpartis


Vincent Labatut
Universit Galatasaray

TP 8

serveur de calcul avec RMI

1 Introduction
Luniversit dispose dun rseau comportant de nombreux ordinateurs de faible puissance, appels terminaux, et dun seul ordinateur trs puissant, appel calculateur. Les utilisateurs des terminaux ont des calculs effectuer, qui ncessitent une grande puissance. Pour raliser ces calculs, ils aimeraient bien pouvoir utiliser le calculateur. Le problme est que tout le monde voudrait lutiliser en permanence : comment partager le temps de calcul ? Une solution consiste transformer le calculateur en serveur de calcul, c'est--dire en machine qui : reoit des calculs effectuer de la part de machines clientes. effectue ces calculs. renvoie les rsultats aux machines concernes. Lensemble des applications excutes sur le calculateur et les terminaux constituent une application rpartie, que nous allons dfinir en utilisant Java RMI.

2 Architecture
Chaque utilisateur a des besoins diffrents et veut donc effectuer des calculs diffrents. Par consquent, le code correspondant au calcul effectuer est compltement indpendant du serveur de calcul. En dautres termes : larchitecture utilise dans notre application distribue doit permettre au serveur de calcul deffectuer nimporte quel traitement dfini par un client. Pour cela, nous allons utiliser un objet qui reprsentera la tche et sera transmis par le client au serveur. Cet objet contiendra : le traitement effectuer dcrit sous forme de code Java. les paramtres de ce traitement sous forme de champs. Le serveur excutera le code contenu dans lobjet, et renverra le rsultat par retour de fonction. Comme ce rsultat peut tre nimporte quoi (le rsultat dpend de la tche demande), ce rsultat sera de type Object.
client tche tche client tche serveur de calcul tche 2) excution client rsultat 3) retour serveur de calcul 1) invocation serveur de calcul

Systmes et applications rpartis

FIT 4 [INF443] 2011/12

TP 8 1/2

serveur de calcul avec RMI

3 Objet tche
Exercice 1
Dans le package task de votre projet, dfinissez une interface TaskInterface contenant une mthode Object execute(). Cette mthode sera utilise par le serveur de calcul lorsquil devra excuter la tche. Linterface doit-elle tendre Remote ? Expliquez pourquoi.

Exercice 2
Dans le mme package, vous trouverez une classe Pi contenant les mthodes BigDecimal computePi(int digits) et BigDecimal arctan(int inverseX, int scale). La mthode computePi utilise arctan pour raliser une approximation de avec un nombre digits de dcimales. La classe BigDecimal permet de reprsenter un rel de manire adapte ce type de calcul. On veut utiliser cette classe comme une tche : un objet sera transmis au serveur qui excutera son code pour calculer le nombre avec un certain nombre de dcimales. Compltez la classe Pi de manire pouvoir lutiliser comme tche : prcisez les interfaces qui doivent tre implments. rajoutez le ou les champs manquants pour reprsenter le ou les paramtres. rajoutez les mthodes manquantes : o dfinition du ou des paramtres : setParams. o autres mthodes ?

4 Ct serveur
Exercice 3
Le serveur de calcul sera implment par la classe EngineImpl. Dans le package engine, dfinissez tout dabord linterface Engine, qui doit tendre Remote. Cette interface contient la seule mthode invocable distance : Object executeTask, qui demande au moteur dexcuter une tche qui est passe en paramtre de cette mthode. Implmentez ensuite la classe du moteur, sans oublier quil sagit dun objet invocable distance.

Exercice 4
Crez une classe EngineLauncher, qui ne contiendra quun programme principal soccupant du service denregistrement, du gestionnaire de scurit, de lenregistrement

5 Ct client
Exercice 5
Dans le package task, dfinissez la classe TaskLauncher, qui ne contiendra quun programme principal soccupant du gestionnaire de scurit, de rcuprer le proxy du moteur de calcul, de crer la tche consistant calculer (avec un nombre de dcimales tir au hasard), de lancer son excution distante, et dafficher son rsultat.

Exercice 6
Crez une autre tche CleanText implmentant TaskInterface. Cette tche utilise deux chanes de caractres text et chars, et consiste supprimer de text tous les caractres apparaissant dans chars. exemple : pour text="blableblibloblu" et chars="bi", le rsultat est "lalellolu". Aprs avoir dfini la classe, modifiez votre client pour la tester. Normalement, vous ne devriez pas avoir besoin de modifier le serveur (ce qui tait le but du TP !).
FIT 4 [INF443] 2011/12 TP 8 2/2

Systmes et applications rpartis