Professional Documents
Culture Documents
operations
tutto con il paradigma OO
S1 instance
C1 Stub S1 Skeleton
// Costruttore
Definizione dell’interfaccia del servizio public EchoRMIServer()
throws java.rmi.RemoteException
{ super(); }
public interface EchoInterface
extends java.rmi.Remote // Implementazione del metodo remoto
{ dichiarato nell'interfaccia
public String getEcho(String echo)
String getEcho(String echo) throws java.rmi.RemoteException
throws java.rmi.RemoteException; { return echo; }
}
public static void main(String[] args){
// Registrazione del servizio
try
{
EchoRMIServer serverRMI =
new EchoRMIServer();
Naming.rebind("EchoService", serverRMI);
}
catch (Exception e)
{e.printStackTrace(); System.exit(1); }
}
}
try
{ Client
// serializzazione del valore di ritorno
ObjectOutput objectoutput =
remotecall.getResultStream(true); L’invocazione di un metodo remoto implica una connessione
objectoutput.writeObject(message1);
} TCP (Socket stream) con l’oggetto remoto
catch(IOException ioexception)
{
throw new MarshalException("error Condivisione delle connessioni tra la JVM client e la
marshalling return", ioexception); JVM server:
}
break;
richiesta di connessione per una stessa JVM
default:
throw new UnmarshalException("invalid ...");
- se c’è una connessione aperta Ö riuso
} - se non c’è una connessione aperta Ö nuova
}
… Al completamento di una operazione la connessione
} viene liberata e rimane attiva fino allo scadere di un
intervallo di timeout
Chi genera i thread che devono operare
sull’oggetto server, se non lo skeleton?
RMI permette a più thread clienti di accedere ad uno stesso
Questo si lega al fatto che skeleton e stub oggetto server gestendo in modo automatico la
concorrenza delle operazioni
sono generati non come sorgenti, ma come Ö l’implementazione del cliente non deve preoccuparsi
class?
In caso di richieste da parte della stessa JVM, il canale di
comunicazione unico può produrre effetti di
sequenzializzazione (era ciò che accadeva nelle prime
implementazioni)
...
Ma…
• Tutti i registry si trovano sulla stessa macchina
dove è attivato il primary registry
• Lato client devo gestire una duplice
interrogazione
• RMI registry non supporta in alcun modo la
negoziazione dei servizi
c:\…\ServerDir\ c:\…\ClientDir\
File System