Objetos Distribuidos
RMI
Ingeniería de Sistemas Informáticos
Curso 2002/2003
Contenido
Objetos Distribuidos y RMI.
Interface Remota.
Clase Implementación.
Referencias Remotas.
Registro RMI.
Paso de parámetros.
Descarga dinámica de código.
Desarrollo y despliegue.
Limitaciones RMI.
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
1
Objetos Distribuidos
0RWLYDFLyQ:
La escalabilidad se consigue con la distribución.
La distribución se consigue con la fragmentación.
En una aplicación OO, los módulos están definidos por clases.
2EMHWLYR:
Distribuir los objetos de una aplicación de forma transparente.
Solución: 7HFQRORJtDVGH2EMHWRV'LVWULEXLGRV
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
Objetos Distribuidos
'HVDItRV:
7UDQVSDUHQFLDSDUDHOFOLHQWH del objeto distribuido.
7UDQVSDUHQFLDSDUDHOSURJUDPDGRU del objeto.
Extender el concepto de “UHIHUHQFLD” a un entorno
distribuido.
Definir un SURWRFROR de comunicación.
...
([SHULHQFLDSUHYLD:
Llamadas a procedimientos remotos: RPC.
Plataforma más sencilla:
Î 50,
Ejecución en un entorno controlado (JVM) e
interacción entre objetos del mismo lenguaje.
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
2
RMI
Tecnología para la programación con Objetos
Distribuidos en Java.
0RWLYDFLyQ:
Que objetos residentes en máquinas virtuales distintas
puedan colaborar.
6ROXFLyQ:
1RLQWUXVLYD: no se modifica el lenguaje Java.
Basada en LQWHUIDFHV, en el patrón 3UR[\ y %URNHU.
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
Interface Remota
Un objeto distribuido es accesible a través de una ,QWHUIDFH
5HPRWD.
Métodos que pueden ser llamados de forma distribuida.
Es una interface Java con las siguientes restricciones:
Debe extender la interface marca MDYDUPL5HPRWH.
Todas las operaciones deben lanzar al menos la excepción
MDYDUPL5HPRWH([FHSWLRQ
import java.rmi.*;
public interface Contador extends 5HPRWH {
public void inc() throws 5HPRWH([FHSWLRQ;
public void dec() throws RemoteException;
public void set(int valor) throws RemoteException;
public int get() throws RemoteException;
}
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
3
Clase Implementación
Clase que implementa la interface remota.
Ninguna restricción de implementación.
public class ContadorImpl implements Contador {
private int valor = 0;
public void inc () { valor ++; }
public void dec () { valor --; }
public void set (int valor) { this.valor = valor; }
public int get() { return valor; }
}
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
Activación de un Objeto Distribuido
-90:
Actúa de registro de los objetos distribuidos que se
ejecutan en la máquina virtual.
Colabora con otras JVM para la comunicación
Identifica las llamadas a los objetos.
...
Î Patrón %URNHU.
Para que un objeto distribuido pueda recibir
llamadas remotas es necesario DFWLYDUOR:
8QLFDVW5HPRWH2EMHFWH[SRUW2EMHFW(obj);
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
4
Referencias Remotas
Una UHIHUHQFLDUHPRWD es una referencia Java que
permite acceder al objeto distribuido:
Una referencia siempre apunta a un objeto en la JVM.
Una referencia remota apunta a un REMHWRSUR[\.
Proxy (6WXE):
Clase que implementa la interface remota.
Implementa los métodos delegando en el objeto distribuido.
Î 7UDQVSDUHQFLDSDUDHOFOLHQWH.
'HOHJDFLyQ: protocolo JRMP.
El proxy FRGLILFDORVSDUiPHWURV de la llamada.
Indica a la JVM que quiere HQYLDUXQPHQVDMH a un objeto
distribuido (conoce su dirección de transporte e identidad).
(VSHUDODUHVSXHVWD y devuelve el valor de la llamada.
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
Referencias Remotas
5HFHSFLyQ de peticiones:
La JVM destino recibe una petición de acceso a un objeto
distribuido.
Identifica el objeto y delega el procesamiento en su objeto
6NHOHWRQ
La JVM destino devuelve la respuesta a la JVM peticionaria.
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
5
Referencias Remotas
&RPSLODGRU50,:
Genera automáticamente la clase VWXE y VNHOHWRQ
asociada a la LPSOHPHQWDFLyQ de un objeto remoto.
> UPLF ContadorImpl
Trabaja con la clase FRPSLODGD(.class).
Modos de obtener la referencia remota (VWXE):
Utilizar un registro conocido por todos los procesos:
5HJLVWUR50,
El VHUYLGRU almacena la referencia en el registro con un
QRPEUHGHVFULSWLYR.
El FOLHQWH recupera la referencia utilizando el nombre.
Otras alternativas:
Valor de retorno o parámetro de una llamada remota.
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
Registro RMI
Aplicación Java que actúa como registro de referencias.
Utilizado para registrar los REMHWRVLQLFLDOHV de una aplicación.
Accedemos a un registro utilizando la clase:
MDYDUPLUHJLVWU\1DPLQJ
Métodos GHFODVH para:
: Contador c = (Contador) 1DPLQJORRNXS(“contador”);
:
(“contador”, c);
/LVWDUUHJLVWUR: String[] referencias = 1DPLQJOLVW();
&RQVXOWDU
5HJLVWUDU 1DPLQJUHELQG
Lanzar el registro:
5HVWULFFLRQHV:
>
Sólo pueden modificar el registro los procesos de la misma máquina.
El registro no debe poder acceder a los FODVV de los objetos remotos.
[rmi:][//host/]nombre Æ “rmi://dis.um.es/contador”, “//dis.um.es/contador”
UPLUHJLVWU\
85/50,:
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
6
Paso de Parámetros
Distinta semántica para el paso de parámetros y
valores de retorno:
Los WLSRVSULPLWLYRV se pasan por valor.
La referencia a un REMHWRGLVWULEXLGR se pasa por
referencia:
Se envía el VWXE del objeto.
Los REMHWRV QRUPDOHV VHULDOL]DEOHV se pasan por
valor:
Se serializa el objeto y se envía una copia
No hay VHPiQWLFDGHUpSOLFD.
El resto de REMHWRVQRVHULDOL]DEOHV no pueden
pasarse como parámetros.
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
Descarga Dinámica de Código
3UREOHPD:
El cliente accede al OD utilizando una copia del VWXE
(referencia) que depende de la clase implementación.
Î Las clases stub no conviene distribuirlas.
6ROXFLyQ:
Descargar las clases VWXE dinámicamente:
Cuando va instanciarse el proxy de la referencia remota.
&RQVHFXHQFLDV:
Hay que FRQWURODU el código descargado Î instalar un
6HFXULW\0DQDJHU
Disponemos de 50,6HFXULW\0DQDJHU.
Los servidores de objetos deben dejar DFFHVLEOHV sus
FODVHVVWXE utilizando un servidor web o FTP (URL).
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
7
Visión General
2EMHWR
,PSOHPHQWDFLyQ
5HJLVWUR
³HMHPSOR´
2EWLHQHODUHIHUHQFLD
VWXE
5HJLVWUDHOREMHWR
6HUYLGRU
&OLHQWH
-90
VNHOHWRQ
-90
'HVFDUJDHOFODVHVWXE
VWXE
50,
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
Proceso de Desarrollo
1. Definir la LQWHUIDFHUHPRWD
2. Programar la FODVHLPSOHPHQWDFLyQ
3. &RPSLODU la FODVHLPSOHPHQWDFLyQ
4. Ejecutar del FRPSLODGRUGHVWXEV con la clase
compilada: UPLF
5. Arrancar el registro RMI en el servidor:
UPLUHJLVWU\
6. Ejecutar la aplicación VHUYLGRU.
7. Ejecutar la aplicación FOLHQWH.
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
8
Despliegue
6HUYLGRU:
Interface remota.
Clase implementación.
Programa servidor.
Clase VNHOHWRQ.
Clase VWXE (accesible a través de URL)
&OLHQWH
Interface remoto.
Programa cliente.
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
Limitaciones RMI antes de Java 2
Las UHIHUHQFLDV QRVRQSHUVLVWHQWHV:
Si cae el servidor todas las referencias distribuidas
dejan de ser válidas.
7RGRVORVREMHWRV remotos deben estar
LQVWDQFLDGRV en el servidor:
Disminuye el rendimiento cuando se mantienen
muchos objetos.
La FRPXQLFDFLyQ RMI QRHVVHJXUD.
Estos problemas se han solucionado en Java 2 ...
Î Pero, es preferible utilizar &25%$ que el modelo
avanzado RMI.
&XUVR
,QJHQLHUtDGH6LVWHPDV,QIRUPiWLFRV
9