Systèmes distribués avec Java RMI

Transcription

Systèmes distribués avec Java RMI
Systèmes distribués avec
Java RMI
Vania Marangozova-Martin
[email protected]
ibd.forge.imag.fr
Pourquoi Java RMI?
u 
A plus bas niveau nous avons le mécanisme de sockets
v 
“A socket is one end-point of a two-way communication link between two
programs running on the network”
V.Marangozova-Martin
IBD
2
Les sockets…
+  Simple
-  Visent uniquement la transmission de données
-  Ne considèrenet pas la sémantique des données
-  Les protocoles qui prennent en compte la sémantique
des données sont à implémenter au niveau de
l’application
-  L’implémentation est souvent complexe, longue et source
d’erreurs
V.Marangozova-Martin
IBD
3
L’idée de Java RMI
u 
Dans OO, les objets reflètent la sémantique des traitements et
des données
v 
u 
Java RMI
v 
v 
u 
Dans les applications, les objets comuniquent à l’aide de méthodesIn
local applications, objects communicate via methods
Permet l’utilisaton du paradigme OO dans le contexte distribué
Définit les mécanismes pour l’accès aux objets et l’appel des méthodes
à distance
RMI = Remote Method Invocation mechanism
V.Marangozova-Martin
IBD
4
RMI versus RPC
u 
u 
RPC = Remote Procedure Call
La technologie RPC a été développée dans les années 80
v 
v 
u 
RPC gère les problèmes d’appels de procédures connues
dans des espaces d’adressage différents
v 
v 
u 
Appel de procédure à distance
En dehos du paradigme OO
Même machine
Machine différente
Les problèmes gérés par le RPC
v 
v 
Accès à des espaces d’adressage différents
Gestion de l’hétérogénéité
V.Marangozova-Martin
IBD
5
RPC
Machine 1
Machine 2
0xAB04
Execution
Appel de
fonction
avec des
arguments
(x)
f(?)
0xAB12
? f(x)
Système de communication
V.Marangozova-Martin
IBD
6
RPC (2)
Machine 1
Machine 2
0xAB04
Execution
(x)
0xAB12
f(?)
0xAB12
? f(x)
u 
Lors d’une distribution
v  Le paramètre doit être passé par valeur
i.e envoyer une copie
V.Marangozova-Martin
IBD
7
RPC (3)
u 
Problème de hétérogénéité
v 
La représentation des données n’est pas la même entre
différentes machines
§ 
La copie de la valeur x peut ne pas être bien interprêtée
Machine 1
Machine 2
Execution
f(
)
0xAB12
? f(x)
V.Marangozova-Martin
IBD
8
RPC (4)
u 
Pour un appel à distance, les données doivent être converties dans un
format qui ne dépend pas
de la plate-forme
v 
u 
e.g. XDR – eXtensible Data Representation)
Les données reçues lors d’un appel à distance doivent être converties dans
le représentation interne du destinataire
V.Marangozova-Martin
IBD
9
Planning
1. 
Motivations
2. 
Présentation générale des applications RMI
3. 
L’exemple du “Hello World”
4. 
Comment développer les applications RMI
5. 
Architecture de RMI
6. 
L’exemple étape par étape
V.Marangozova-Martin
IBD
10
Présentation générale
u 
Les applications RMI sont basées sur l’architecture client-serveur
v 
v 
Un programme Java client
Un programme Java serveur
JVM
JVM
Serveur
Client
O3
O1
Appels
de méthodes à distance
O2
Objets accessibles à distance
V.Marangozova-Martin
IBD
11
Présentation générale (2)
u  RMI
fournit les mécanismes pour que le client
et le serveur communiquent
JVM
JVM
Serveur
Client
O3
O1
Appels
de méthodes à distance
O2
Objets accessibles à distance
V.Marangozova-Martin
IBD
12
Enchainement dans les applications RMI
u 
Le client localise les objets distants sur un serveur
v 
Différents mécanismes pour récupérer les références
§ 
§ 
u 
Le client communique avec les objets distants
v 
Les appels de méthodes distantes sont identiques aux appels
locaux
§ 
u 
Utiliser un service de nomage comme RMI registry (
Retourner une référence comme un résultat d’un appel à distance
Les détails de la communication à distance sont gérés par RMI et sont transparents
Chargement des classes des objets
v 
Comme les objets se “baladent”, RMI fournit les mécanismes
pour le chargement dynamique des classes correspondantes
V.Marangozova-Martin
IBD
13
Vue schématique
2
rmiregistry
1
RMI client
V.Marangozova-Martin
3
IBD
RMI server
14
Les objets distants
u 
u 
Ce sont des objets qui ont des méthodes qui peuvent être
invoquées à
An objet devient distant en implémentant une interface
distante
v 
Une interface distante étend java.rmi.Remote
v 
Chaque méthode d’une telle interface doit ajouter à sa
déclaration java.rmi.RemoteException comme exception possible
V.Marangozova-Martin
IBD
15
Planning
1. 
Motivations
2. 
Présentation générale des applications RMI
3. 
L’exemple du “Hello World”
4. 
Comment développer les applications RMI
5. 
Architecture de RMI
6. 
L’exemple étape par étape
V.Marangozova-Martin
IBD
16
“Hello World”
Remote object – Interface definition
import java.rmi.*;
public interface Hello
extends Remote {
// A method provided by the
// remote object
public String sayHello()
throws RemoteException;
}
V.Marangozova-Martin
IBD
17
Exemple (2)
Remote object – Interface definition
Remote object – Class implementation
import java.rmi.*;
import java.rmi.*;
import java.rmi.server.*;
public interface Hello
extends Remote {
public class HelloImp
implements Hello {
// A method provided by the
// remore object
public String sayHello()
throws RemoteException;
private String message;
public Hello(String s) {
message = s ;
}
}
public String sayHello ()
throws RemoteException {
return message ;
}
}
V.Marangozova-Martin
IBD
18
Exemple (3)
Server
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
public class HelloServer {
public static void
main(String [] args){
try {
// Create a Hello remote object
HelloImp h =
new HelloImp ("Hello world !");
Hello h_stub = (Hello)
UnicastRemoteObject.exportObject(h, 0);
// Register the remote object in RMI
// registry with a given identifier
Registry registry=
LocateRegistry.getRegistry();
registry.bind("Hello1”, h_stub);
System.out.println ("Server ready");
} catch (Exception e) {
System.err.println("Error on
server :"
+ e) ;
e.printStackTrace();
return;
}
V.Marangozova-Martin
IBD
19
Exemple (4)
Client
Server
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.rmi.*;
import java.rmi.registry.*;
public class HelloClient {
public static void main(String [] args) {
public class HelloServer {
public static void main(String [] args){…
try {
// Create a Hello remote object
HelloImp h =
new HelloImp ("Hello world !");
Hello h_stub = (Hello)
UnicastRemoteObject.exportObject(h, 0);
try {
if (args.lenght < 1) {
System.out.println("Usage:
java HelloClient <server host>");
return;
}
String host = arg[0];
// Register the remote object in RMI
// registry with a given identifier
Registry registry=
LocateRegistry.getRegistry();
registry.bind("Hello1”, h_stub);
// Get remote object reference
Registry registry =
LocateRegistry.getRegistry(host);
Hello h = (Hello)
registry.lookup("Hello1");
System.out.println ("Server ready");
// Remote method invocation
String res = h.sayHello();
} catch (Exception e) {
System.err.println("Error on
server :"
+ e) ;
e.printStackTrace();
return;
}…
V.Marangozova-Martin
System.out.println(res);
} catch (Exception e)
{
System.err.println("Error on
client: " + e) ;
}…
IBD
20
Planning
1. 
Motivations
2. 
Présentation générale des applications RMI
3. 
L’exemple du “Hello World”
4. 
Comment développer les applications RMI
5. 
Architecture de RMI
6. 
L’exemple étape par étape
V.Marangozova-Martin
IBD
21
Etapes lors du développement
d’une application RMI
1.  Concevoir et implémenter les composants
(code sources) de l’application
2.  Compiler les sources.
3.  Rendre les classes accessibles
à travers le réseau
4.  Démarrer l’application
V.Marangozova-Martin
IBD
22
1/ Conception et implémentation
u 
Définir l’architecture de l’application = décider
v 
v 
v 
u 
Quels objets sont locaux
Lesquels sont distants
Qui est serveur (createur d’objets distants) et qui est client (utilisation
d’objets distants)
Définir les interfaces distantes
v 
v 
Quelles méthodes devraient être appelables à distance
Quels sont les paramètres et les résultats
§ 
§ 
Quels types
Quelles classes
§ 
v 
Définir de nouvelles classes/interfaces sinécessaire
Principe de base
§ 
§ 
Se détacher des implémentations mais utiliser des interfaces
Les clients accèdent à des interfaces, non à des implémentations
V.Marangozova-Martin
IBD
23
1/ Conception et implémentation (2)
Implémenter les objets distants
u 
v 
v 
v 
Les objets distants implémentent une ou plusieurs interfaces distantes
Les objets distants peuvent aussi implémenter des interfaces/
méthodes locales
Toutes les classes locales qui sont utilisées dans les paramètres/
résultats des appels distants doivent être implémentées aussi
Implémenter les serveurs
u 
v 
v 
Les serveurs sont ceux qui créent et qui rendent disponibles des objets
distants
Ils sont impplémentées après les objets distants
Implémenter les clients
u 
v 
Les clients peuvent être implémentées une fois que les interfaces
distantes sont définies
V.Marangozova-Martin
IBD
24
Etapes lors du développement
d’une application RMI
1.  Concevoir et implémenter les composants
(code sources) de l’application
2.  Compiler les sources.
3.  Rendre les classes accessibles
à travers le réseau
4.  Démarrer l’application
V.Marangozova-Martin
IBD
25
Etape 2/ Compilation des sources
u 
Utilisation du compilateur standard javac
u 
Les sources incluent
v  la déclaration des interfaces distantes
v  leurs implémentations
v  les classes serveur
v  les classes client
u 
Avant Java Platform, Standard Edition 5.0
v  il était nécessaire d’effectuer une étape supplémentaire
v  avec le compilateur rmic
v  pour créer les stubs/squelettes pour la communication distante
v  ce n’est plus nécessaire
V.Marangozova-Martin
IBD
26
RMI Stubs and Skeletons
u 
« RMI uses a standard mechanism (employed in RPC systems) for
communicating with remote objects: stubs and skeletons. »
v 
http://docs.oracle.com/javase/7/docs/platform/rmi/spec/rmi-arch2.html
Client
Serveur
O3
O1
O2
V.Marangozova-Martin
IBD
27
Etapes lors du développement
d’une application RMI
1.  Concevoir et implémenter les composants
(code sources) de l’application
2.  Compiler les sources.
3.  Rendre les classes accessibles
à travers le réseau
4.  Démarrer l’application
V.Marangozova-Martin
IBD
28
Etape 3/ Rendre les classes accessibles
u 
u 
Classes? Accessibles?
Classes
v 
v 
v 
« Compiled code to be executed by the Java Virtual Machine
is represented using a hardware- and operating systemindependent binary format, …known as the class file format. »
The class file format precisely defines the representation of a
class or interface, including details such as byte ordering that
might be taken for granted in a platform-specific object file
format.
Bytecode
0: bipush
2: istore_0
i=5;
V.Marangozova-Martin
IBD
5
29
Existence des classes au sein de la JVM
Source: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html
u 
The Java Virtual Machine dynamically loads, links and
initializes classes and interfaces.
v 
v 
v 
u 
Loading is the process of finding the binary representation of a
class or interface type with a particular name and creating a class
or interface from that binary representation.
Linking is the process of taking a class or interface and
combining it into the run-time state of the Java Virtual Machine so
that it can be executed.
Initialization of a class or interface consists of executing the class
or interface initialization method <clinit>
Dans la JVM, les classes sont représentées par des
objets
V.Marangozova-Martin
IBD
30
Chargement de classes: ClassLoader
C’est où?
Credit: http://geekrai.blogspot.fr/2013/05/class-loading-and-unloading-in-jvm.html
V.Marangozova-Martin
IBD
31
Codebase
u  Codebase
= un emplacement où on peut
trouver des définitions de classes
v 
v 
CLASSPATH = emplacement local
Possibilité d’avoir des emplacements distants
§ 
§ 
accessibles par le réseau
HTTP ou FTP
V.Marangozova-Martin
IBD
32
Etapes lors du développement
d’une application RMI
1.  Concevoir et implémenter les composants
(code sources) de l’application
2.  Compiler les sources.
3.  Rendre les classes accessibles
à travers le réseau
4.  Démarrer l’application
V.Marangozova-Martin
IBD
33
Etape 4/ Démarrer l’application
u  Démarrer
le service de gestion (nommage,
enregistrement) d’objets RMI
v 
Outil rmiregistry
u  Démarrer
v 
le serveur
Outil java
u  Démarrer
v 
1. rmiregistry
le client
3. RMI client
2. RMI server
Outil java
V.Marangozova-Martin
IBD
34
Planning
1. 
Motivations
2. 
Présentation générale des applications RMI
3. 
L’exemple du “Hello World”
4. 
Comment développer les applications RMI
5. 
Architecture de RMI
6. 
L’exemple étape par étape
V.Marangozova-Martin
IBD
35
Premier objectif de RMI
u  Cacher
v 
v 
la distribution
Après l’initialisation/récupération de références
des objets distants
Les appels aux objets distants sont identiques
aux appels locaux
V.Marangozova-Martin
IBD
36
Transparence RMI (2)
Client
Server
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.rmi.*;
import java.rmi.registry.*;
public class HelloServer {
public class HelloClient {
public static void main(String [] args) {
public static void
...
main(String [] args){
try {
if (args.lenght < 1) {
System.out.println("Usage:
java HelloClient <server host>"); return;
}
String host = arg[0];
// Get remote object reference
Registry registry =
LocateRegistry.getRegistry(host);
Hello h = (Hello) registry.lookup("Hello1");
try {
// Create a Hello remote object
HelloImp h =
new HelloImp ("Hello world !");
Hello h_stub = (Hello)
UnicastRemoteObject.exportObject(h, 0);
// Register the remote object in RMI
// registry with a given identifier
Registry registry= LocateRegistry.getRegistry();
registry.bind("Hello1”, h_stub);
// Remote method invocation
String res = h.sayHello();
System.out.println(res);
} catch (Exception e) {
System.err.println("Error on
client: " + e) ;
}
System.out.println ("Server ready");
} catch (Exception e) {
System.err.println("Error on server :"
+ e) ;
e.printStackTrace();
return;
}
}
}
}
V.Marangozova-Martin
}
IBD
37
Transparence RMI (3)
u 
Le serveur et le client RMI
v 
Sont des objets Java normaux
v 
Le serveur fournit une spécification de l’interface distante
v 
A partir de cette spécification, sont générées des classes
additionnelles
v 
Ce sont ces classes qui s’occupent de la communication à
distance entre le client et le serveur
v 
Ces classes représentent le Stub (client) and le Skeleton
(serveur)
V.Marangozova-Martin
IBD
38
RMI Stub et Skeleton (rappel)
Serveur
Client
O3
O1
O2
V.Marangozova-Martin
IBD
39
Couches RMI
Client
Server
Stub
Skeleton
RMI reference layer
RMI transport layer
TCP/IP
V.Marangozova-Martin
IBD
40
Architecture RMI (4)
u 
Couche stub and skeleton
v 
v 
Stub
§  Objet de référence qui a la même
interface que l’objet distant
§  Intercepte l’appel
§  Prépare les arguments
Client
Server
Stub
Skeleton
RMI reference layer
RMI transport layer
TCP/IP
Skeleton
§  Reçoit l’appel
§  Récupère les infos d’objet/méthode/arguments
§  Redirige vers l’objet serveur
§  Attend le résultat (modèle client-serveur)
§  Envoie le résultat au stub
V.Marangozova-Martin
IBD
41
Architecture RMI (5)
u  Couche
v 
S’occupe de la sémantique de l’invocation de la
méthode
§ 
Une invocation ou plusieurs
§ 
v 
référence RMI
objet unique ou plusieurs objets dupliqués
Sémantique de la référence serveur
§ 
Activation du serveur
Client
Server
Stub
Skeleton
RMI reference layer
RMI transport layer
TCP/IP
V.Marangozova-Martin
IBD
42
Architecture RMI (6)
u 
La couche transport RMI
v 
v 
v 
v 
v 
v 
Client
Server
Connexions aux sites distants
Stub
Skeleton
Gestion connexions.
RMI reference layer
RMI transport layer
Monitoring de l’état des connexions
TCP/IP
Ecoute d’appels rentrants
Table des objets accessible à distance
géré localement
Connexions avec les sites qui appellent les objets
serveur locaux
V.Marangozova-Martin
IBD
43
Outline
1. 
Motivations
2. 
Overview of RMI-based distributed applications
3. 
A simple example
4. 
Methodology to build distributed applications using RMI
5. 
The architecture of RMI
6. 
A detailed example step by step
V.Marangozova-Martin
IBD
44
Planning
1. 
Motivations
2. 
Présentation générale des applications RMI
3. 
L’exemple du “Hello World”
4. 
Comment développer les applications RMI
5. 
Architecture de RMI
6. 
L’exemple étape par étape
V.Marangozova-Martin
IBD
45
Les étapes de l’exemple
Server side
Client side
Define the remote interface provided by the remote object
Implement the remote object
Implement the server program
Implement the client program
Compile the source files
Compile the source files
Start the RMI regsitry
Start the server
V.Marangozova-Martin
Start the client
IBD
46
L’exemple en détail (2)
u 
Define the remote interface provided by the remote object:
v 
v 
v 
Extends java.rmi.Remote
Defines the set of methods that can be called remotely
Each method must declare java.rmi.RemoteException
import java.rmi.Remote;
Import java.rmi.RemoteException;
public interface Hello extends Remote {
// A method provided by the remore object
public String sayHello() throws RemoteException;
}
V.Marangozova-Martin
IBD
47
L’exemple en détail (3)
u 
Implement the remote object in a class:
v 
v 
v 
Declare the remote interface being implemented
Implement the set of methods that can be called remotely
Implement any other local method that can not be invoked remotely
Import java.rmi.RemoteException;
public class HelloImp implements Hello {
private String message;
public Hello(String s) {
message = s ;
}
public String sayHello () RemoteException {
return message ;
}
}
V.Marangozova-Martin
IBD
48
L’exemple en détail (4)
u 
Implement the remote object in a class – Passing objects in RMI
v 
Arguments to remote methods or return values from remote methods
can be of any type
§ 
§ 
§ 
v 
Non remote objects passed to or returned from r
emote methods must be serializable
§ 
v 
Primitive data types (e.g. int, float, etc.)
Remote objects
Local objects
They must implement the java.io.Serializable interface
Some object types do not meet any of these criteria; they cannot be
passed to or returned from remote methods
§ 
§ 
Most of these objects, such as threads or file descriptors, encapsulate
information that makes sense only within a single address space
Many of the core classes (e.g. classes in the packages java.lang and java.util)
implement the Serializable interface
V.Marangozova-Martin
IBD
49
Invocation de méthode distante
JVM
Client
local object
should be
remote object
primitive=>type
Serializable
= Serializable
Serveur
O3
refO3.meth(10, localO, refO2)
O1
Appels
de méthodes à distance
O2
localO
V.Marangozova-Martin
Objets accessibles à distance
IBD
50
L’exemple en détail (5)
u 
Passage d’arguments et de résultats
v 
Objets distants : par référence
§ 
§ 
§ 
v 
La référence est le stub
Le stub est un proxy/intercepteur
Cela veut dire que tout changement sur ‘objet distant sont réperutés sur le
serveur initial
Objets locaux : par valeur (copies)
§ 
§ 
§ 
§ 
Avec la sérialization
Tout est copié sauf les attributs static ou transient
La manière dont un objet est sérialisé peut etre modifiée
Le destinataire reçoit une copie et tous les changements restent locaux, sur
cette copie
V.Marangozova-Martin
IBD
51
L’exemple en détail (6)
u 
Implement the server program:
v 
v 
v 
Create and install a security manager
Create and export remote objects
Register remote objects with the RMI registry
import java.rmi.server.UnicastRemoteObject;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class HelloServer {
public static void main(String [] args){
try {
if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager());}
HelloImp h = new HelloImp ("Hello world !");
Hello h_stub = (Hello) UnicastRemoteObject.exportObject(h, 0);
Registry registry= LocateRegistry.getRegistry();
registry.bind("Hello1”, h_stub);
System.out.println ("Server ready");
} catch (Exception e) {
System.err.println("Error on server :" + e) ; e.printStackTrace(); return;
}
}
}
V.Marangozova-Martin
IBD
52
SecurutyManager
u 
u 
u 
u 
A security manager is an object that defines a security policy for an application.
This policy specifies actions that are unsafe or sensitive.
Any actions not allowed by the security policy cause a SecurityException to be thrown.
An application can also query its security manager to discover which actions are
allowed.
u 
A security manager determines whether downloaded code has access to the local file
system or can perform any other privileged operations
u 
If an RMI program does not install a security manager, RMI will not download classes
(other than from the local class path) for objects received as arguments or return values
of remote method invocations
u 
This restriction ensures that the operations performed by downloaded code are subject
to a security policy
V.Marangozova-Martin
IBD
53
SecurutyManager (2)
SecurityManager sm = System.getSecurityManager();
if (sm != null) context = sm.getSecurityContext();
if (sm != null) sm.checkPermission(permission, context);
u 
Permissions fall into these categories:
v 
u 
The classes managing these various permission categories are
v 
u 
u 
File, Socket, Net, Security, Runtime, Property, AWT, Reflect, and Serializable.
java.io.FilePermission, java.net.SocketPermission,
java.net.NetPermission, java.security.SecurityPermission,
java.lang.RuntimePermission, java.util.PropertyPermission,
java.awt.AWTPermission, java.lang.reflect.ReflectPermission,
and java.io.SerializablePermission.
http://docs.oracle.com/javase/7/docs/technotes/guides/security/permissions.html
http://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html
V.Marangozova-Martin
IBD
54
Exemples de fichiers de securité (3)
u 
Policy files
grant codeBase "file:/home/ann/src/" {
permission java.security.AllPermission;
};
grant codeBase "file:/home/sysadmin/" {
permission java.io.FilePermission "/tmp/abc", "read";
};
grant codeBase "file://f:/derby/lib/derby.jar" {
permission java.lang.RuntimePermission "createClassLoader";
permission java.util.PropertyPermission "derby.*", "read";
permission.java.io.FilePermission "${derby.system.home}","read";
permission java.io.FilePermission "${derby.system.home}${/} -",
"read,write,delete";
permission java.util.PropertyPermission
"derby.storage.jvmInstanceId", "write";
};
V.Marangozova-Martin
IBD
55
A detailed example step by step (8)
u 
Implement the client program:
v 
v 
v 
Create and install a security manager
Get a remote object reference
Perform remote method invocations on the remote object
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class HelloClient {
public static void main(String [] args) {
if (args.lenght < 1) { System.out.println("Usage: java HelloClient <server host>"); return; }
try {
if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); }
String host = arg[0];
Registry registry = LocateRegistry.getRegistry(host);
Hello h = (Hello) registry.lookup("Hello1");
String res = h.sayHello(); System.out.println(res);
} catch (Exception e) {
System.err.println("Error on client: " + e); e.printStackTrace(); return;
}
}
}
V.Marangozova-Martin
IBD
56
L’exemple en détail (9)
u 
Compiler les sources
v 
Dans cette exemple nous séparons
§ 
§ 
§ 
§ 
v 
Compile the remote interface and build a jar file that contains it
§ 
§ 
v 
The remote interface
The remote object implementation class
The server program class
The client program class
javac –d classes –classpath .:classes src/Hello.java
jar cvf lib/Hello.jar classes/Hello.class
Compile the remote object implementation class and build a jar file that contains
it
§ 
§ 
javac –d classes –classpath .:classes:lib/Hello.jar src/HelloImp.java
jar cvf lib/HelloImp.jar classes/HelloImp.class
V.Marangozova-Martin
IBD
57
A detailed example step by step (10)
u 
Compile and run server-side and client-side programs:
v 
Server-side
§ 
Compile the server program
§ 
§ 
Start RMI registry
§ 
§ 
rmiregistry &
Start the server
§ 
v 
javac –d classes –classpath .:classes:lib/Hello.jar:lib/HelloImp.jar src/
HelloServer.java
java –classpath .:classes:lib/Hello.jar:lib/HelloImp.jar HelloServer
Client-side
§ 
Compile the client program
§ 
§ 
javac –d classes –classpath .:classes:lib/Hello.jar src/HelloClient.java
Start the client
§ 
java –classpath .:classes:lib/Hello.jar HelloClient
V.Marangozova-Martin
IBD
58
Références
u 
u 
u 
u 
u 
Oracle. Trail: RMI.
http://docs.oracle.com/javase/tutorial/rmi/
M. Boger. Java in Distributed Systems: Concurrency,
Distribution and Persistence. Wiley, 2001.
Lectures given by Sacha Krakowiak,
http://sardes.inrialpes.fr/people/krakowia/
http://www.securingjava.com/chapter-two/chaptertwo-7.html
https://www.prologin.org/docs/java/technotes/guides/rmi/
codebase.html
V.Marangozova-Martin
IBD
59
V.Marangozova-Martin
IBD
60