Objetos Distribuidos RMI - Departamento de Informática y Sistemas

Anuncio
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
Descargar