Vous êtes sur la page 1sur 2

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 java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Serveur


{
public static void main(String argv[])
{
try
{
Registry r= LocateRegistry.createRegistry(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",
r.bind("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)
{
System.err.println(e);
}
}
}
-------------------------------------------------------------------------------------------------------------------------------------------
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Client


{

public static void main(String argv[])


{

try
{ Registry reg = LocateRegistry.getRegistry("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) reg.lookup("opRect");
// on appelle les services sur cet objet
int surface = opRectangle.calculSurface(r1);
r2 = opRectangle.decalerRectangle(r1, 15, 10);
System.out.println(" surface de r1 = "+surface);
System.out.println(" position de r2 = "+r2);
}
catch (Exception e)
{
System.err.println(e);
}
} }

1/2
Université Kasdi Merbeh Ouargla F-NTIC/ Département Informatique
SD1/M1-ASR /2016-2017

---------------------------------------------------------------------------------------------------------------------------------------
import java.rmi.Remote;
import java.rmi.RemoteException;

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 java.io.Serializable


{
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 java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

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


{
UnicastRemoteObject.exportObject(this,0);
}}

2/2

Vous aimerez peut-être aussi