RMI : Remote Method Invocation

publicité
RMI : Remote Method Invocation
permet la communication entre
machines virtuelles Java (JVM) qui
peuvent se trouver physiquement sur la
même machine ou sur deux machines
distinctes ( espace d’adressage différents)
.
Un but primaire pour les concepteurs de
RMI était de permettre à des
programmeurs de développer des
programmes distribués de Java avec la
mêmes syntaxe et sémantique utilisées
pour des programmes non-distribués.
#Présentation
RMI est un système d’objets distribués
constitué uniquement d’objets java ;
. RMI est une Application Programming
Interface (intégrée au JDK 1.1 et plus) ;
. Développé par JavaSoft ;
#Objectifs
Rendre transparent l’accès à des objets
distribués sur un réseau
Faciliter la mise en œuvre et l’utilisation
d’objets distants Java
Préserver la sécurité (inhérent à
l’environnement Java)
-RMISecurityManager
-Distributed Garbage Collector (DGC)
Exemple de code…
public interface Calculator
extends java.rmi.Remote {
public long add(long a, long b)
throws java.rmi.RemoteException;
public long sub(long a, long b)
throws java.rmi.RemoteException;
public long mul(long a, long b)
throws java.rmi.RemoteException;
public long div(long a, long b)
throws java.rmi.RemoteException; }
----------------------------------------------------public class CalculatorImpl
extendsjava.rmi.server.UnicastRemoteObj
ect
implements Calculator {
public CalculatorImpl()
throws java.rmi.RemoteException {
super();
}
public long add(long a, long b)
throws java.rmi.RemoteException {
return a + b;
}
-----------------------------------------------------
##Stub/ Skeleton
Les amorces ( Stub/ Skeleton)
.Elles assurent le rôle d’adaptateurs pour le
transport des appels distants
.El réalisen lé apel sur la couch réseau
.Elles réalisent l’assemblage et le désassemblage
des paramètres (marshalling, unmarshalling)
.Les amorces sont créées par le générateur rmic.
#Les Stubs
. Représentants locaux 2l’objet distribué
. Initient une connexion avec la JVM distante en
transmettant l’invocation distante à la couche des
références d’objets ;
. Assemblent les paramètres pour leur transfert à la
JVM distante ;
. Attendent les résultats de l’invocation distante ;
. Désassemblent la valeur ou l’exception renvoyée ;
. Renvoient la valeur à l’appelant ;
S’appuient sur la sérialisation.
il les transforme en un flot de données (flux de
pliage) transmissible sur le réseau
les objet doivent implémenter l’interface
java.io.Serializable ou
java.io.Externalizable
public long sub(long a, long b)
throws java.rmi.RemoteException {
return a - b;
}
public long mul(long a, long b)
throws java.rmi.RemoteException {
return a * b;
}
public long div(long a, long b)
throws java.rmi.RemoteException {
return a / b;
}
}
--------------------------------------------------import java.rmi.Naming;
public class CalculatorServer {
public CalculatorServer() {
try {
Calculator c = new CalculatorImpl();
Naming.rebind("rmi://localhost:1099/CalculatorServi
ce", c);
} catch (Exception e) {
System.out.println("Trouble: " + e);
}
}
public static void main(String args[]) {
new CalculatorServer();
}
}
-----------------------------------------------------
#Les squelettes
. Désassemblent les
paramètres pour la
méthode distante ;
. Font appel à la méthode
demandée ;
. Assemblage du résultat
(valeur renvoyée ou
exception) à destination
de l.appelant.
---Client--import java.rmi.Naming;
import
java.rmi.RemoteException;
import java.net.*;
import
java.rmi.NotBoundExceptio
n;
public class
CalculatorClient {
public static void
main(String[] args) {
try {
Calculator c =
(Calculator)
Naming.lookup(
"rmi://localhost
/CalculatorService");
System.out.println(
c.sub(4, 3) );
System.out.println(
c.add(4, 5) );
System.out.println(
c.mul(3, 6) );
System.out.println( c.div(9,
3) );
…
…
Téléchargement