View
3
Download
0
Category
Preview:
Citation preview
4/22/2008
1
Comunicación entre Procesos
Objetos Remotos
Objetos Distribuidos
Estado: encapsula los datosMétodos: operaciones sobre los datosI t f tili l
Objetos Distribuidos
Interface: se utiliza para la disponibilidad de los métodos
4/22/2008
2
Objetos Remotos
Objetos DistribuidosObjetos Distribuidos
Tipos de Objetos
Objetos Remotos
Compile-Time: dependientes del lenguaje de programación
Runtime: independientes del lenguajeRuntime: independientes del lenguaje de programación
Object adapter
4/22/2008
3
Tipos de Objetos
Objetos Remotos
Persistentes: perduran en el tiempo. No depende del proceso servidor
Transitorios: perdura mientras estéTransitorios: perdura mientras esté activo el proceso servidor.
Binding un Cliente a un Objeto
Objetos Remotos
Binding un Cliente a un Objeto
Distr_object* obj_ref; //Declaración de una referencia a un // objeto del sistema (systemwide)
obj ref ; // Inicialización de la referencia al
(A) Un ejemplo con binding implícito utilizando solamente referencias globales.
obj_ref = …; // Inicialización de la referencia al // objeto ditribuido
obj_ref-> do_something(); // Bind implícito e invocación a un // métdodos.
4/22/2008
4
Binding un Cliente a un Objeto
Objetos Remotos
g j
Distr_object objPref; //Declaración de una referencia a un //objeto del sistema (systemwide)
Local_object* obj_ptr; //Declaración de un puntero a un //objeto local
(B) Un ejemplo con binding explícito utilizando referencias globales y locales.
obj_ref = …; //Inicialización de la referencia al //objeto distribuido.
obj_ptr = bind(obj_ref); //Bind explícito y obtención de un // puntero al proxy local.
obj_ptr -> do_something(); //Invocación de un método en el proxy // local.
Referencia a un Objeto
Objetos Remotos
Dirección de red de la máquina, dirección de InternetIdentificación del servidor (puerto)Tiempo
j
TiempoIdentificación del objetoInterface del Objeto Remoto
4/22/2008
5
Referencia a un Objeto
Objetos Remotos
Dir Internet Nro. puerto tiempo Nro.objeto interface del Objeto remoto
32 bits 32 bits 32 bits 32 bits
j
Forma de Invocación
Objetos Remotos
Estática
Forma de Invocación
Fobjeto.append(int)p. ej
Dinámica
Invoke(objeto, método, param entrada, param salida)
Invoke(fobjeto, id(append), int)
4/22/2008
6
Pasaje de Parámetros
Objetos Remotos
Pasaje de Parámetros
Invocación de Métodos
RMI
Locales y Remotos
remota invocacióninvocación
invocaciónremota
locallocal
localinvocación
A B
CE
Flocal
invocaciónA
D
4/22/2008
7
Objeto Remoto e Interfaces
RMI
Objeto Remoto e Interfaces
interfaceremota Datos
remotoobjeto
interfacem1m2m3
m4m5m6
implementación{ De métodos
Arquitectura y Componentes
RMI
Arquitectura y Componentes
objeto A objeto BskeletonRequest
proxy de B
Para clase B’s & dispatcher
remotocliente servidor
Reply
ComunicaciónRemote Remote referenceComunicaciónmódulo demódulo de
reference módulo módulo
4/22/2008
8
Java RMI
RMI
• Java Remote Method Invocation (Java RMI) permite crearaplicaciones distribuidas utilizando la tecnología basada en Java, permitiendo que los métodos de objetos remotospuedan ser invocados desde otra máquina virtual Java, ubicada posiblemente en otro nodo.
• RMI utiliza serialización de objetos para realizar el marshal y unmarshal de los parámetros y no truncar tipos, soportandop y p , pel polimorfismo de la orientación a objetos.
• Releases de Java RMI– Java RMI está disponible para la Plataforma Java 2,
Standard Edition (J2SE) y la Plataforma Java 2, Micro Edition (J2ME).
Java RMI
RMI
Pasos para realizar una aplicación distribuida1. Diseñar la interface remota2. Diseñar el programa servidor3. Diseñar el programa cliente4. Compilar los fuente y generar los stubs
4/22/2008
9
Java RMI - Ejemplo
RMI
import java.rmi.*;public interface ReceiveMessageInterface extends
Remote
j p
ReceiveMessageInterface.java
1.‐ Diseñar la Interface Remota
Remote{
void receiveMessage(String x) throws RemoteException;
}
Java RMI - Ejemplo2 Diseñar el programa servidor
RMI
import java.rmi.*;import java.rmi.registry.*;import java.rmi.server.*;import java.net.*;public class RmiServer extends java.rmi.server.UnicastRemoteObjectimplements ReceiveMessageInterface{
int thisPort;
2.‐ Diseñar el programa servidorRmiServer.java
;String thisAddress;Registry registry; // rmi registry for lookup the remote objects.// This method is called from the remote client by the RMI.// This is the implementation of the “ReceiveMessageInterface”.
public void receiveMessage(String x) throws RemoteException{
System.out.println(x);}
4/22/2008
10
public RmiServer() throws RemoteException{
RMI
try{// get the address of this host.thisAddress= (InetAddress.getLocalHost()).toString();
}catch(Exception e){
throw new RemoteException("can't get inet address.");}
thisPort=3232; // this port(registry’s port)System.out.println("this address="+thisAddress+",port="+thisPort);t {try{// create the registry and bind the name and object.registry = LocateRegistry.createRegistry( thisPort );registry.rebind("rmiServer", this); }catch(RemoteException e){throw e;}
}
RMI
static public void main(String args[]){
try{RmiServer s=new RmiServer();
} catch (Exception e) {
e.printStackTrace();System.exit(1);
}}}
}
4/22/2008
11
Java RMI - Ejemplo
RMI
import java.rmi.*;import java.rmi.registry.*;import java.net.*;
public class RmiClient{
static public void main(String args[]){
3.‐ Diseñar el programa cliente RmiClient.java
{ReceiveMessageInterface rmiServer;Registry registry;String serverAddress=args[0];String serverPort=args[1];String text=args[2];System.out.println("sending "+text+" to "+serverAddress+":"+serverPort);
try{
RMI
// get the “registry” registry=LocateRegistry.getRegistry(serverAddress,
(new Integer(serverPort)).intValue());// look up the remote objectrmiServer=
(ReceiveMessageInterface)(registry.lookup("rmiServer"));// call the remote methodrmiServer.receiveMessage(text);
}}catch(RemoteException e){
e.printStackTrace();}catch(NotBoundException e){
e.printStackTrace();}
}}
4/22/2008
12
Java RMI - Ejemplo
RMI
javac RmiServer.java ReceiveMessageInferface.javajavac RmiClient.java ReceiveMessageInterface.java
4.‐ Compilar los fuentes y generar los stubs
rmic –classpath . RmiServer
RmiServer_Skel.classRmiServer_Stub.class
Recommended