La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "RMI (Remote Method Invocation) Programación Distribuida Año 2004."— 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. 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 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 Elementos principales Elementos principales Interfaces remotas Interfaces remotas Objetos remotos Objetos remotos Objetos serializables Objetos serializables Stubs Stubs Servicio de nombres Servicio de nombres

5 Interfaces remotas Interfaz acordada entre servidor y cliente Interfaz acordada entre servidor y cliente Métodos que el cliente puede invocar 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. 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 objeto se convierte en remoto implementando un interface remoto, que tenga estas características. Un interface remoto desciende del interface java.rmi.Remote. 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. 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) 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 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. 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. 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 Actúan como referencias a objetos remotos en el cliente Clase usada por el cliente en sustitución de la remota Clase usada por el cliente en sustitución de la remota Su clase es generada automáticamente a partir de la interfaz Su clase es generada automáticamente a partir de la interfaz Implementa la interfaz remota 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 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 Retransmiten llamadas desde el cliente hacia el servidor Es transparente al código del cliente. 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 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 Permite asociar nombres lógicos a objetos Servidor: asocia un nombre a un objeto Servidor: asocia un nombre a un objeto Cliente: obtiene una referencia al objeto a partir del nombre (stub) Cliente: obtiene una referencia al objeto a partir del nombre (stub) Objetivo: transparencia de localización 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: 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 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. 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 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: Si son remotos: Estará tipado con una clase que extiende de UnicastRemoteObject Estará tipado con una clase que extiende de UnicastRemoteObject Se pasan por referencia Se pasan por referencia Los objetos remotos se convierten en stubs al pasar del servidor al cliente 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): 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) 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) Deben implementar java.io.Serializable (de lo contrario se produce una excepción) Son pasados por valor. Son pasados por valor. RMI se ocupa de la serialización de forma transparente para el desarrollador 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 Interfaces Java que derivan de la interfaz java.rmi.Remote Todos los métodos deben declarar java.rmi.RemoteException Todos los métodos deben declarar java.rmi.RemoteException Argumentos que pueden tomar los métodos: Argumentos que pueden tomar los métodos: Tipos primitivos Java Tipos primitivos Java Stubs y objetos remotos Stubs y objetos remotos Objetos locales serializables (implementan la clase java.io.Serializable) 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 Subclase de java.rmi.server.UnicastRemoteObject que implemente la interfaz remota Implementar todos los métodos de la interfaz remota Implementar todos los métodos de la interfaz remota

18 Ejemplo: RMI Programa Servidor Crea instancias de las clases remotas y las registra en el servidor de nombres 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 Declara objetos de la interfaz remota y obtiene stubs del servidor de nombres Invoca métodos sobre los objetos Invoca métodos sobre los objetos

19 Ejemplo: RMI Java RMI define un servicio de nombres muy sencillo Java RMI define un servicio de nombres muy sencillo El esquema de nombrado sigue la sintaxis de una URL //máquina:puerto/nombreDeObjeto, siendo El esquema de nombrado sigue la sintaxis de una URL //máquina:puerto/nombreDeObjeto, siendo nombreDeObjeto un nombre simple nombreDeObjeto un nombre simple máquina y puerto hacen referencia a la máquina en la que corre el programa servidor de nombres 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 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 Aplicación que contiene un objeto que implementa el interfaz java.rmi.registry.Registry No es persistente 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 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 La clase java.rmi.Naming Naming.rebind (String, Remote) Naming.rebind (String, Remote) Naming.unbind (Remote) Naming.unbind (Remote) Naming.lookup (String) Naming.lookup (String) Asignación de nombres Localización de objetos

23 Ejemplo: RMI(Ejecución) Arrancar el servidor de nombres (rmiregistry) Arrancar el servidor de nombres (rmiregistry) Correr la clase servidor Correr la clase servidor Correr el (los) cliente(s) Correr el (los) cliente(s) En el momento de la ejecución, el cliente debe disponer en su máquina de: En el momento de la ejecución, el cliente debe disponer en su máquina de:.class de cada interfaz remota.class de cada interfaz remota.class de cada clase stub correspondiente.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; 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 implements StringerInterface{ private String str = "DEFAULT"; private String str = "DEFAULT"; public Stringer(String s) throws RemoteException public Stringer(String s) throws RemoteException { super(); super(); str = s; str = s; }

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

27 Ejemplo: RMI(Servidor) name = "//localhost/StringerInterface"; try try { robject = new Stringer("Hi\n"); robject = new Stringer("Hi\n"); Naming.rebind(name, robject); Naming.rebind(name, robject); System.out.println("Stringer bounded"); System.out.println("Stringer bounded"); } catch (Exception e) catch (Exception e) { System.err.println( System.err.println( "************ ComputeEngine exception: ***********" + "************ ComputeEngine exception: ***********" + e.getMessage()); e.getMessage()); //e.printStackTrace(); //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) if (args.length < 1) { System.out.println(Necesita el hostname"); System.out.println(Necesita el hostname"); System.exit(0); System.exit(0); } if (System.getSecurityManager() == null) if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); System.setSecurityManager(new RMISecurityManager()); }

29 Ejemplo: RMI(Cliente) try { String name = "//" + args[0] + "/StringerInterface"; String name = "//" + args[0] + "/StringerInterface"; StringerInterface robject = (StringerInterface) Naming.lookup(name); StringerInterface robject = (StringerInterface) Naming.lookup(name); String result = robject.getString(); String result = robject.getString(); System.out.println(result); System.out.println(result); } catch (Exception e) catch (Exception e) { System.err.println(" ********** Problemas en la invocacion: *************" + System.err.println(" ********** Problemas en la invocacion: *************" + e.getMessage()); e.getMessage()); e.printStackTrace(); 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. 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. 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. 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. 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) Programación Distribuida Año 2004."

Presentaciones similares


Anuncios Google