Comunicación entre Procesos Objetos Remotos

Anuncio
4/22/2008
Comunicación entre
Procesos
Objetos Remotos
Objetos Distribuidos
Estado: encapsula los datos
z Métodos: operaciones sobre los
datos
z Interface:
se utiliza
I t f
tili para la
l
disponibilidad de los métodos
z
1
4/22/2008
Objetos Remotos
Objetos Distribuidos
Objetos Remotos
Tipos de Objetos
z Compile-Time: dependientes del
lenguaje de programación
z Runtime: independientes del lenguaje
de programación
z
Object adapter
2
4/22/2008
Objetos Remotos
Tipos de Objetos
z Persistentes: perduran en el tiempo.
No depende del proceso servidor
z Transitorios: perdura mientras esté
activo el proceso servidor.
Objetos Remotos
Binding un Cliente a un Objeto
(A) Un ejemplo con binding implícito utilizando
solamente referencias globales.
Distr_object* obj_ref;
//Declaración de una referencia a un
// objeto del sistema (systemwide)
obj_ref
obj ref = …;;
//
//
//
//
obj_ref-> do_something();
Inicialización de la referencia al
objeto ditribuido
Bind implícito e invocación a un
métdodos.
3
4/22/2008
Objetos Remotos
g un Cliente a un Objeto
j
Binding
(B) Un ejemplo con binding explícito utilizando
referencias globales y locales.
Distr_object objPref;
Local_object* obj_ptr;
obj_ref = …;
obj_ptr = bind(obj_ref);
obj_ptr -> do_something();
//Declaración de una referencia a un
//objeto del sistema (systemwide)
//Declaración de un puntero a un
//objeto local
//Inicialización de la referencia al
//objeto distribuido.
//Bind explícito y obtención de un
// puntero al proxy local.
//Invocación de un método en el proxy
// local.
Objetos Remotos
Referencia a un Objeto
j
Dirección de red de la máquina,
dirección de Internet
z Identificación del servidor (puerto)
z Tiempo
z Identificación del objeto
z Interface del Objeto Remoto
z
4
4/22/2008
Objetos Remotos
j
Referencia a un Objeto
32 bits
Dir Internet
32 bits
Nro. puerto
32 bits
32 bits
tiempo
Nro.objeto
interface del
Objeto remoto
Objetos Remotos
Forma de Invocación
z
z
Estática
Dinámica
p. ej
Fobjeto.append(int)
Invoke(objeto, método, param entrada, param salida)
Invoke(fobjeto, id(append), int)
5
4/22/2008
Objetos Remotos
Pasaje de Parámetros
RMI
Invocación de Métodos
Locales y Remotos
invocación
remota
A
B
local
C
E
invocación local
invocación
local
invocación
D
remota
invocación
F
6
4/22/2008
RMI
Objeto Remoto e Interfaces
objeto remoto
remota
interface
{
Datos
m1
m2
m3
implementación
De métodos
m4
m5
m6
RMI
Arquitectura y Componentes
servidor
cliente
objeto A proxy de B
Request
remoto
skeleton
objeto B
& dispatcher
Para clase B’s
Reply
módulo de
Remote
Comunicación
reference módulo
módulo de
Comunicación
Remote reference
módulo
7
4/22/2008
RMI
Java RMI
• Java Remote Method Invocation (Java RMI) permite crear
aplicaciones distribuidas utilizando la tecnología basada en
Java, permitiendo que los métodos de objetos remotos
puedan ser invocados desde otra máquina virtual Java,
ubicada posiblemente en otro nodo.
• RMI utiliza serialización de objetos para realizar el marshal y
parámetros y no truncar tipos,
p , soportando
p
unmarshal de los p
el 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).
RMI
Java RMI
z
Pasos para realizar una aplicación
distribuida
1.
2.
3.
4.
Diseñar la interface remota
Diseñar el programa servidor
Diseñar el programa cliente
Compilar los fuente y generar los stubs
8
4/22/2008
RMI
j
p
Java RMI - Ejemplo
1.‐ Diseñar la Interface Remota
ReceiveMessageInterface.java
import java.rmi.*;
public interface ReceiveMessageInterface extends
Remote
{
void receiveMessage(String x) throws
RemoteException;
}
RMI
Java RMI - Ejemplo
2 Diseñar el programa servidor
2.‐
Diseñar el programa servidor
RmiServer.java
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
import java.net.*;
public class RmiServer extends java.rmi.server.UnicastRemoteObject
implements ReceiveMessageInterface
{
int
thisPort;;
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);
}
9
4/22/2008
RMI
public RmiServer() throws RemoteException
{
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);
}
}
}
10
4/22/2008
RMI
Java RMI - Ejemplo
3.‐ Diseñar el programa cliente
RmiClient.java
import java.rmi.*;
import java.rmi.registry.*;
import java.net.*;
public class RmiClient
{
static public void main(String args[])
{
ReceiveMessageInterface rmiServer;
Registry registry;
String serverAddress=args[0];
String serverPort=args[1];
String text=args[2];
System.out.println("sending "+text+" to "+serverAddress+":"+serverPort);
RMI
try{
}
// get the “registry”
registry=LocateRegistry.getRegistry(serverAddress,
(new Integer(serverPort)).intValue()
);
// look up the remote object
rmiServer=
(ReceiveMessageInterface)(registry.lookup("rmiServer"));
// call the remote method
rmiServer.receiveMessage(text);
}
catch(RemoteException e){
e.printStackTrace();
}
catch(NotBoundException e){
e.printStackTrace();
}
}
11
4/22/2008
RMI
Java RMI - Ejemplo
4.‐ Compilar los fuentes y generar los stubs
z
z
z
javac RmiServer.java
ReceiveMessageInferface.java
javac RmiClient.java
ReceiveMessageInterface.java
rmic –classpath . RmiServer
RmiServer_Skel.class
RmiServer_Stub.class
12
Descargar