Académique Documents
Professionnel Documents
Culture Documents
TP Sysrep
TP Sysrep
Socket
Prenons un premier exemple, où l'on retourne une valeur Serializable: il va s'agir d'un ``Hello World'' distribué.
• Définissons d'abord l'interface de l'objet distant:
import java.rmi.*;
public interface HelloInterface extends Remote {
public String say() throws RemoteException; }
• Son unique méthode say est celle qui va afficher à l'écran du client ``Hello World‘’.
Son implémentation est:
import java.rmi.*;
import java.rmi.server.*;
public class Hello extends UnicastRemoteObject implements HelloInterface {
private String message;
public Hello(String msg) throws RemoteException
{ message = msg; }
public String say() throws RemoteException
{ return message; } }
• On peut compiler ces deux sources JAVA:
javac HelloInterface.java →HelloInterface.class
javac Hello.java → Hello.class
• le serveur - c'est-à-dire la classe sur laquelle seront répercutées les demandes d'un client:
import java.rmi.*;
public class HelloServer {
public static void main(String[] argv) {
try {
Naming.rebind("rmi://localhost:4300/RMI",new Hello("Hello, world!"));
System.out.println("Hello Server is ready.");
} catch(Exception e) { System.out.println("Hello Server failed: "+e); } } }
• On peut maintenant compiler et démarrer le serveur en faisant bien attention au CLASSPATH (qui doit
au moins contenir . et/ou les répertoires contenant les .class nécessaires, accessibles de toutes les
machines sous NFS).
• Pour exécuter les programmes client et serveur, il faut démarrer le registre (ou serveur)
rmiregistry 4300
Puis :
java CalculServer
java CalculClient
Sans JNDI
Server.java
Avec JNDI
Jndi.propretis
java.naming.factory.initial = com.sun.jndi.rmi,registry.RegistryContextFactory
java.naming.provider.url = rmi://localhost:1099
Server.java
Context ctx = new InitialContext();
BanqueInterface bi = new BanqueImpl();
ctx.rebind(’’Banque’’, bi);
JNDI (Java Naming and Directory Interface)
CORBA
IIOP:Internet Inter-ORB Protocol
3- Compilation IDL