La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

RMI (Remote Method Invocation)

Presentaciones similares


Presentación del tema: "RMI (Remote Method Invocation)"— Transcripción de la presentación:

1 RMI (Remote Method Invocation)
Programación Distribuida Año 2004

2 Introducción a las Aplicaciones RMI
Las aplicaciones RMI normalmente comprenden dos programas separados: un servidor y un cliente. Una aplicación servidor típica crea un montón de objetos remotos, hace accesibles unas referencias a dichos objetos remotos, y espera a que los clientes llamen a estos métodos u objetos remotos. Una aplicación cliente típica obtiene una referencia remota de uno o más objetos remotos en el servidor y llama a sus métodos.

3 Introducción a las Aplicaciones RMI
RMI proporciona el mecanismo por el que se comunican y se pasan información del cliente al servidor y viceversa. Cuando es una aplicación algunas veces nos referimos a ella como Aplicación de Objetos Distribuidos

4 Objetos distribuidos: Elementos principales
Interfaces remotas Objetos remotos Objetos serializables Stubs Servicio de nombres

5 Interfaces remotas Interfaz acordada entre servidor y cliente
Métodos que el cliente puede invocar Las clases de los parámetros y del resultado han de ser serializables (en Java simplemente implementando una interfaz) o remotos.

6 Interfaces remotas Un objeto se convierte en remoto implementando un interface remoto, que tenga estas características. Un interface remoto desciende del interface java.rmi.Remote. Cada método del interface declara que lanza una java.rmi.RemoteException además de cualquier excepción específica de la aplicación.

7 Objetos Remotos Objetos cuyos mensajes pueden ser invocados remotamente (desde objetos corriendo en otro proceso. En el caso de java sería desde otra JVM) Los objetos remotos deben implementar uno o varios interfaces remotos La clase del objeto remoto podría incluir implementaciones de otros interfaces (locales o remotos) y otros métodos (que sólo estarán disponibles localmente). Si alguna clase local va a ser utilizada como parámetro o cómo valor de retorno de alguno de esos métodos, también debe ser implementada.

8 Objetos Serializables
El RMI utiliza el mecanismo de serialización de objetos para transportar objetos entre máquinas virtuales. Implementar Serializable hace que la clase sea capaz de convertirse en un stream de bytes auto-descriptor que puede ser utilizado para reconstruir una copia exacta del objeto serializado cuando el objeto es leído desde el stream.

9 Stubs Actúan como referencias a objetos remotos en el cliente
Clase usada por el cliente en sustitución de la remota Su clase es generada automáticamente a partir de la interfaz Implementa la interfaz remota La implementación de cada operación envía un mensaje a la máquina virtual que ejecuta el objeto remoto y recibe el resultado

10 Stubs Retransmiten llamadas desde el cliente hacia el servidor
Es transparente al código del cliente. Cuando un cliente invoca una operación remota que devuelve una referencia a un objeto remoto, obtiene una instancia del stub correspondiente

11 Servicio de nombres Permite asociar nombres lógicos a objetos
Servidor: asocia un nombre a un objeto Cliente: obtiene una referencia al objeto a partir del nombre (stub) Objetivo: transparencia de localización

12 Pasaje de Objetos El intercambio de objetos en la ejecución de un método en un objeto remoto puede ocurrir cuando: Un cliente pasa objetos como parámetro pues así lo requiere el signature del método. El server recibe y puede manipular esos objetos El servidor responde a la ejecución de un método a partir de un objeto. El cliente puede utilizar ahora ese objeto que recibe como respuesta. Cualquiera de estos objetos (parámetros o respuesta) deben ser remotos y si no lo son deben ser serializables

13 Pasaje de Objetos Si son remotos:
Estará tipado con una clase que extiende de UnicastRemoteObject Se pasan por referencia Los objetos remotos se convierten en stubs al pasar del servidor al cliente

14 Pasaje de Objetos Si no son objetos que se pueden acceder de manera remota (deben al menos ser serializables): No están tipados con un clase que extienda UnicastRemoteObject (o alguna que indique que es remoto) Deben implementar java.io.Serializable (de lo contrario se produce una excepción) Son pasados por valor. RMI se ocupa de la serialización de forma transparente para el desarrollador

15 Ejemplo:RMI

16 Ejemplo: RMI Interfaces Java que derivan de la interfaz java.rmi.Remote Todos los métodos deben declarar java.rmi.RemoteException Argumentos que pueden tomar los métodos: Tipos primitivos Java Stubs y objetos remotos Objetos locales serializables (implementan la clase java.io.Serializable)

17 Ejemplo: RMI Implementación de Objetos Remotos
Subclase de java.rmi.server.UnicastRemoteObject que implemente la interfaz remota Implementar todos los métodos de la interfaz remota

18 Ejemplo: RMI Programa Servidor Programa Cliente
Crea instancias de las clases remotas y las registra en el servidor de nombres Programa Cliente Declara objetos de la interfaz remota y obtiene stubs del servidor de nombres Invoca métodos sobre los objetos

19 Ejemplo: RMI Java RMI define un servicio de nombres muy sencillo
El esquema de nombrado sigue la sintaxis de una URL //máquina:puerto/nombreDeObjeto, siendo nombreDeObjeto un nombre simple máquina y puerto hacen referencia a la máquina en la que corre el programa servidor de nombres Por defecto, máquina = localhost y puerto = 1099

20 Ejemplo: RMI Servicio de nombres: rmiregistry

21 Ejemplo: RMI(servicio de nombres)
Aplicación que contiene un objeto que implementa el interfaz java.rmi.registry.Registry No es persistente Por motivos de seguridad, la implementación de rmiregistry prohíbe que se invoquen los métodos bind, rebind y unbind de su objeto Registry desde otra máquina

22 Ejemplo: RMI(servicio de nombres)
La clase java.rmi.Naming Naming.rebind (String, Remote) Naming.unbind (Remote) Naming.lookup (String) Asignación de nombres Localización de objetos

23 Ejemplo: RMI(Ejecución)
Arrancar el servidor de nombres (rmiregistry) Correr la clase servidor Correr el (los) cliente(s) En el momento de la ejecución, el cliente debe disponer en su máquina de: .class de cada interfaz remota .class de cada clase stub correspondiente

24 Ejemplo: RMI(Interface)
package rmi_sample; import java.rmi.Remote; import java.rmi.RemoteException; public interface StringerInterface extends Remote { String getString() throws RemoteException; }

25 Ejemplo: RMI(Servidor)
package rmi_sample; import java.rmi.*; import java.rmi.server.*; import java.rmi.RemoteException; public class Stringer extends UnicastRemoteObject implements StringerInterface { private String str = "DEFAULT"; public Stringer(String s) throws RemoteException super(); str = s; }

26 Ejemplo:RMI(Servidor)
public String getString() throws RemoteException { return str; } public static void main(String[] args) String name; StringerInterface robject; if (System.getSecurityManager() == null) System.setSecurityManager(new RMISecurityManager());

27 Ejemplo: RMI(Servidor)
name = "//localhost/StringerInterface"; try { robject = new Stringer("Hi\n"); Naming.rebind(name, robject); System.out.println("Stringer bounded"); } catch (Exception e) System.err.println( "************ ComputeEngine exception: ***********" + e.getMessage()); //e.printStackTrace();

28 Ejemplo: RMI(Cliente)
package rmi_sample; import java.rmi.*; public class StrClient { public static void main(String args[]) { if (args.length < 1) System.out.println(“Necesita el hostname"); System.exit(0); } if (System.getSecurityManager() == null) System.setSecurityManager(new RMISecurityManager());

29 Ejemplo: RMI(Cliente)
try { String name = "//" + args[0] + "/StringerInterface"; StringerInterface robject = (StringerInterface) Naming.lookup(name); String result = robject.getString(); System.out.println(result); } catch (Exception e) System.err.println(" ********** Problemas en la invocacion: *************" + e.getMessage()); e.printStackTrace();

30 Conclusión RMI es un sistema que nos permite el intercambio de objetos, el cual se realiza de manera transparente de un espacio de direcciones a otro, puesto que utiliza una técnica de serealización. Además nos permite el llamado de los métodos remotamente, sin tener la necesidad de tener los métodos localmente.

31 Conclusión Debido a que los sistemas necesitan manejo de datos en sist. distribuidos cuando estos residen en direcciones de distintos host, los métodos de invocación remota son una buena alternativa para solucionar estas necesidades. RMI es un sist. de programación para la distribución e intercambio de datos entre distintas aplicaciones existentes en un entorno distribuido.

32 Conclusión Se debe tener en cuenta que es mas lento porque los objetos tiene que serializarse y luego deserailizarse, se debe chequear la seguridad, los paquetes tiene que ser ruteados a través de switches. Esto trae como conclusión que, lamentablemente, el diseño de un sistema distribuido, no es solamente tomar un conjunto de objetos y ponerlos en otro proceso para balancear la carga.


Descargar ppt "RMI (Remote Method Invocation)"

Presentaciones similares


Anuncios Google