Université Kasdi Merbeh Ouargla F-NTIC/ Département Informatique
SD1/M1-ASR /2016-2017
TP6 : JAVA RMI
L'exemple servant à illustrer le fonctionnement de Java RMI traite de manipulation de
rectangles. Voici le code Java de chacune des classes définies dans cet exemple :
import [Link];
import [Link];
public class Serveur
{
public static void main(String argv[])
{
try
{
Registry r= [Link](1099);
// on instancie normalement l'objet implémentant les services
RectangleImpl rect = new RectangleImpl();
// on l'enregistre auprès du registry local sous le nom "opRect",
[Link]("opRect", rect);
// si l'enregistrement s'est bien déroulé, cet objet est prêt
// à recevoir des requêtes d'appels de services
}
catch (Exception e)
{
[Link](e);
}
}
}
-------------------------------------------------------------------------------------------------------------------------------------------
import [Link];
import [Link];
public class Client
{
public static void main(String argv[])
{
try
{ Registry reg = [Link]("localhost");
// création de rectangles pour l'appel des services
Rectangle r1, r2;
r1 = new Rectangle(10, 10, 20, 30);
// on récupère une référence sur l'objet distant nommé "opRect" via
// le registry de la machine sur laquelle il s'exécute
IRectangle opRectangle = (IRectangle) [Link]("opRect");
// on appelle les services sur cet objet
int surface = [Link](r1);
r2 = [Link](r1, 15, 10);
[Link](" surface de r1 = "+surface);
[Link](" position de r2 = "+r2);
}
catch (Exception e)
{
[Link](e);
}
} }
1/2
Université Kasdi Merbeh Ouargla F-NTIC/ Département Informatique
SD1/M1-ASR /2016-2017
---------------------------------------------------------------------------------------------------------------------------------------
import [Link];
import [Link];
public interface IRectangle extends Remote
{ public int calculSurface(Rectangle rect) throws RemoteException;
public Rectangle decalerRectangle(Rectangle rect, int x, int y) throws RemoteException;
}
----------------------------------------------------------------------------------------------------------------------------
/**
* Classe définissant un rectangle.
* (x1,y1) et (x2, y2) représentent 2 coins opposés du rectangle.
*
* Cette classe implémente Serializable car lors de l'appel à distance des
* opérations, des instances de cette classe transitent via le réseau et sont
* donc sérialisées.
*
* Note : pour simplifier l'utilisation de cette classe dans les opérations,
* tous les attributs sont publics.
*/
public class Rectangle implements [Link]
{
public int x1, x2, y1, y2;
public Rectangle(int x1, int y1, int x2, int y2)
{
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
public String toString()
{
return "("+x1+","+y1+")("+x2+","+y2+")";
}
}
-------------------------------------------------------------------------------------------------------------------------------------
import [Link];
import [Link];
public class RectangleImpl implements IRectangle
{
// on implémente les services comme des opérations Java standard
public int calculSurface(Rectangle rect) throws RemoteException
{
return ( (rect.x2 - rect.x1) * (rect.y2 - rect.y1));
}
public Rectangle decalerRectangle(Rectangle rect, int x, int y) throws RemoteException
{
return new Rectangle(rect.x1 + x, rect.y1 + y, rect.x2 + x, rect.y2 + y);
}
public RectangleImpl() throws RemoteException
{
[Link](this,0);
}}
2/2