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