Академический Документы
Профессиональный Документы
Культура Документы
(REMOTE METHOD
INVOCATION)
Java
Java RMI
24/10/2005
Java
Java RMI
Java
Java RMI
24/10/2005
Java
Java RMI- objeto remoto
z Implementacin del Objeto Remoto y del Servidor
(fichero HelloImpl.java)
24/10/2005
package examples.hello;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.server.UnicastRemoteObject;
public class HelloImpl extends UnicastRemoteObject
implements Hello {
public HelloImpl() throws RemoteException {
super();
}
public String sayHello() throws RemoteException{
return "Hello World!";
... Continua en ->
}
6
}
7
private
privatestatic
staticvoid
voidcreateRegistry(int
createRegistry(inthostport){
hostport){
try{
try{
LocateRegistry.createRegistry(hostport);
LocateRegistry.createRegistry(hostport);
}catch(RemoteException
}catch(RemoteExceptione){
e){
try{
try{
LocateRegistry.getRegistry(hostport);
LocateRegistry.getRegistry(hostport);
}catch(RemoteException
}catch(RemoteExceptionerr){
err){
System.out.println("Error
System.out.println("Error......""++err.getMessage());
err.getMessage());
err.printStackTrace();
err.printStackTrace();
}}
}}
try{
try{
System.out.println("Activating
System.out.println("ActivatingJava
JavaRmiRegistry.............");
RmiRegistry.............");
java.lang.Thread.sleep(2000);
java.lang.Thread.sleep(2000);
}catch(java.lang.InterruptedException
}catch(java.lang.InterruptedExceptionerr1){
err1){
System.out.println("Error...
"
+
err1.getMessage());
System.out.println("Error... " + err1.getMessage());
err1.printStackTrace();
err1.printStackTrace();
}}
}}
24/10/2005
Java
Java RMI - cliente
z Implementacin del programa Cliente (fichero HelloClient.java)
package examples.hello;
import java.applet.Applet;
import java.awt.Graphics;
import java.rmi.Naming;
import java.rmi.RemoteException;
public class HelloClient {
String message = "blank";
// "obj" is the identifier that we'll use to refer to the remote object that implements the "Hello" interface
Hello obj = null;
public HelloClient() {
try {
obj = (Hello)Naming.lookup("//1HelloServer");
message = obj.sayHello();
System.out.println(Message +message);
} catch (Exception e) {}
24/10/2005
Java
Java RMI Compilacin
-d . *.java
-d .-classpath . examples.hello.HelloImpl
};
10
Java
24/10/2005
11
Java
Java RMI
z Especificacin del sistema RMI de Java
{ Clases e Interfaces del sistema RMI
z Interfaz java.rmi.Remote
z Clases java.rmi.RemoteException, java.rmi.server.RemoteObject,
java.rmi.server.RemoteServer, java.rmi.server.UnicastRemoteObject y
java.rmi.activation.Activatable
12
Java
Java RMI
24/10/2005
13
Java
Java RMI
z Clases e Interfaces del sistema RMI
{ Una interfaz remota debe extender la interfaz
java.rmi.Remote
{ Pero puede adems extender otra interfaz que no sea remota
pero cuyos mtodos estn declarados como mtodos
remotos, como se muestra en el siguiente ejemplo:
z La interfaz Beta
public interface Alpha {
public final String okay = "constants are okay too";
public Object foo(Object obj) throws java.rmi.RemoteException;
public void bar() throws java.io.IOException;
public int baz() throws java.lang.Exception;
}
24/10/2005
14
Java
Java RMI
24/10/2005
15
Java
Java RMI
z Clase Annotation
{ El descriptor de la clase de un objeto se asocia con los parmetros o valor de retorno
enviados en la invocacin remota para poder descargar el cdigo de la clase de forma
dinmica durante la ejecucin en caso de que no se encuentren de forma local
24/10/2005
16
Java
Java RMI
17
Java
Java RMI
Clase Naming
package java.rmi;
public final class Naming {
public static Remote lookup(String url)
throws NotBoundException,
java.net.MalformedURLException,
RemoteException;
public static void bind(String url,
Remote obj)
throws AlreadyBoundException,
java.net.MalformedURLException,
RemoteException;
public static void rebind(String url,
Remote obj)
throws RemoteException,
java.net.MalformedURLException;
public static void unbind(String url)
throws RemoteException,
NotBoundException,
java.net.MalformedURLException;
public static String[] list(String url)
throws RemoteException,
java.net.MalformedURLException;
}
24/10/2005
18
Java
Java RMI
Inicia una conexin con la JVM remota que contiene el objeto remoto
Escribe (serializa) y transmite los parmetros a la JVM remota
Espera los resultados de la invocacin remota
Lee (deserializa) el valor de retorno o las excepciones devueltas
Devuelve el valor al objeto que inici la llamada
24/10/2005
19
Java
Java RMI
z Skeleton: En la JVM remota, cada objeto remoto tiene
su correspondiente esqueleto.
{ Es responsable de enviar la llamada a la implementacin del
objeto remoto
{ Los pasos que realiza son:
z Lee (deserializa) los parmetros del mtodo remoto
z Invoca el mtodo en la implementacin del objeto remoto
z Escribe (serializa) y transmite el resultado
20
Java
Java RMI
Registro de Java Interfaz Registry y clase LocateRegistry
z Interfaz Registry y clase LocateRegistry proporcionan un servicio
que permita registrar y recuperar objetos mediante su nombre.
z No es necesario iniciar explcitamente el registro desde la lnea de
comando con el comando rmiregistry.
z Registro: Objeto remoto que establece una relacin entre nombres y
objetos remotos. Cualquier proceso servidor puede soportar su
propio registro o puede usarse un solo registro para cada mquina.
z Los mtodos de la clase LocateRegistry se usan para obtener un
registro que opere en una mquina particular o una mquina y un
puerto. Los mtodos de la clase java.rmi.Naming vista
anteriormente hacen llamadas a un objeto remoto que implementa
la interfaz Registry usando el mtodo LocateRegistry.getRegistry.
24/10/2005
21
Java
Java RMI
Interfaz java.rmi.Registry
z Proporciona mtodos para:
{ Registrar un objeto remoto
{ Eliminar el registro de un objeto remoto
{ Buscar la referencia asociada a un nombre de objeto
{ Listar los objetos registrados en un registro determinado
Clase java.rmi.LocateRegistry
z Define dos tipos de mtodos
z getRegistry(): Para obtener un registro ya existente en la mquina. En caso
de que no exista ste mtodo no devolver ningn error.
{ createRegistry(): Para crear un registro en la mquina.