Publicado el 14 de Enero del 2017
958 visualizaciones desde el 14 de Enero del 2017
335,8 KB
38 paginas
Creado hace 16a (02/12/2008)
PROGRAMACION CONCURRENTE Y DISTRIBUIDA
VII.1: RMI: Remote Method Invocation
José M. Drake
Notas:
Posibilidades que ofrece Java para la comunicación en red: Socket,RMI y URL.
1
Sistemas distribuidos basados en middleware
Client
RPC
Server
Middleware
Estilo RPC
(Remote Procedure Call)
Node local
Node remote
Client
Middleware
Estilo DOO
(Distributed Object Oriented)
Server
Node local
Node remote
Procodis’07: VII.1- RMI: Remote Method Invocation
José M. Drake
2
Notas:
2
Modelos de infraestructura para sistemas distribuidos
Las aplicaciones distribuidas requieren que componentes que se ejecutan
en diferentes procesadores se comuniquen entre sí.
Modelos:
Sockets: Facilitan la generación dinámica de canales de comunicación. Es
actualmente la base de la comunicación. Pero al ser de muy bajo nivel de
abstracción, no son adecuados a nivel de aplicación.
Remote Procedure Call (RPC): Abstrae la comunicación a nivel de
invocación de procedimientos. Es adecuada para programación estructurada
basada en librerías.
Invocación remota de objetos: Abstrae la comunicación a la invocación de
métodos de objetos que se encuentran distribuidos por el sistema distribuido.
Los objetos se localizan por su identidad. Es adecuada para aplicaciones
basadas en el paradigma OO.
RMI (Remote Method Invocation) es
comunicación de objetos Java distribuidos.
Solución simple (Fácil de uso)
Solución natural (Se comporta como se espera que haga)
la solución Java para
Procodis’07: VII.1- RMI: Remote Method Invocation
José M. Drake
la
3
Notas:
3
Objetivos de RMI
Proporcionar un middelware para el desarrollo de aplicaciones
distribuida manteniendo un estilo Java puro y ortodoxo:
Facilita la interacción de objetos instanciados en diferente JVM
mediante el paradigma de invocación de métodos de los objetos.
Integra el modelo de objetos distribuidos en el lenguaje Java de una
forma natural y manteniendo la semántica que le es propia.
Capacita para escribir aplicaciones distribuidas tan simple como sea
posible.
Mantiene y preserva en aplicaciones distribuidas el tipado fuerte propio
de Java.
Proporciona diferentes modelos de persistencia de objetos distribuidos
(objetos vivos, objetos persistentes, objetos con activación débil) para
conseguir la escalabilidad de las aplicaciones.
Introduce los niveles de seguridad necesarios para garantizar la
integridad de las aplicaciones distribuidas.
Procodis’07: VII.1- RMI: Remote Method Invocation
José M. Drake
4
Notas:
4
Ventajas e inconvenientes de RMI
Ventaja:
Permite distribuir una aplicación de forma muy transparente, es decir,
sin que el programador tenga que modificar apenas el código.
Las invocaciones remotas son más eficientes que las peticiones vía
http que se usan con los CGIs o los Servlets.
Inconvenientes:
El paso de parámetros por valor implica tiempo para hacer la
serialización, enviar los objetos serializados a través de la red y luego
volver a recomponer los objetos en el destino.
Procodis’07: VII.1- RMI: Remote Method Invocation
José M. Drake
5
Notas:
5
Componentes de aplicaciones distribuidas RMI
Las aplicaciones RMI se componen de:
Clientes: Conducen el flujo de la aplicación. Localizan e invocan
métodos ofertados como remotos por los servidores.
Servidores: Conjunto de objetos que ofrecen interfaces remotas
públicas cuyos métodos pueden ser invocados clientes de cualquier
procesador de la plataforma.
Registro: Servicio estático que se establece en cada nudo, en el que se
registran los servidores con un nombre, y donde los clientes los
localizan por él.
Procesador local
Cliente
Invoca
(RMI)
Localiza
(RMI)
Interfaz
remota
Procesador remoto
Servidor
Registro
Registra
(RMI)
Procodis’07: VII.1- RMI: Remote Method Invocation
José M. Drake
6
Notas:
6
Servicios que ofrece RMI
Localizar objetos remotos: Hay dos metodos de localizar un objeto
remoto:
En el rmiRegistry se pueden registrar objetos con un nombren. Otros pueden
buscar su referencia a través del mismo nombre.
Un objeto puede pasar como parámetro u obtener como retorno de la
invocación de un método repoto, la referencia a un tercer objeto, y luego
usarlo para comunicarse con él.
Comunicar con objetos remotos: Un objeto que disponga de la referencia
remota (stub) de un objeto que ofrezca una interfaz remota, puede invocar
los métodos remotos sobre él, en una forma similar a la invocación de
cualquier método públicos.
Descargar objetos remotos: RMI ofrece mecanismos para transferir por
valor los objetos que se pasan como parámetro de los métodos que se
invocan. Esta transferencia incluye la transferencia de su código
(bytecodes) y de su estado.
Procodis’07: VII.1- RMI: Remote Method Invocation
José M. Drake
7
Notas:
7
Invocaciones distribuidas y localizadas
Semejanzas:
Una referencia a un objeto remoto puede ser pasado como parámetro de un
método, y devuelto como resultados de los métodos.
El tipo de una referencia a un objeto remoto puede ser transformado por
operaciones de casting siempre que sean compatibles con sus relaciones de
herencias.
A las referencias remotas se les puede aplicar el método instanceof() para
identificar dinámicamente las interfaces que soporta.
Diferencias:
Los clientes interaccionan con los objetos remotos a través de las interfaces
remotas, no a través de implementaciones o interfaces estándares.
Los objetos que se pasan como parámetros de métodos que no son remotos se
pasan por copia (valor) y nunca por referencia.
Los objetos que se pasan como parámetros de métodos que se referencian por
sus interfaces remotas se pasan por referencia y nunca por valor.
La semántica de los métodos heredados de Object es especializada para los
objetos remotos.
Las invocaciones de objetos remoto pueden lanzar excepciones adicionales
que son propias de los mecanismos de comunicación,
Procodis’07: VII.1- RMI: Remote Method Invocation
José M. Drake
8
Notas:
8
Interfaces y clases raíces definidas en RMI
<<interface>>
Remote
<<abstract class>>
RemoteObject
<<abstract class>>
RemoteSever
<<exceptionClass>>
IOException
<<exceptionClass>>
RemoteException
<<abstract class>>
Activatable
<<class>>
UnicastRemoteServer
Procodis’07: VII.1- RMI: Remote Method Invocation
José M. Drake
9
Notas:
9
Arquitectura de RMI
Client
Server
Stub
Skeleton
RMI reference layer
RMI transport layer
TCP/IP
javac
Client
Stub
Skeleton
Server
Versión 1.5
Client
Stub
rmic
javac
RMI
Server
Skeleton
Procodis’07: VII.1- RMI: Remote Method Invocation
José M. Drake
10
Notas:
10
Arquitectura básica de RMI
1.
2.
3.
4.
5.
6.
7.
8.
El servidor debe registrarse (bind) en eñ
registry bajo un nombre.
El cliente localiza (lookup) la referencia
de servidor en el registry por su nombre.
El cliente crea un stub que referencia al
skeleton
El cliente invoca localmente el stub.
El stub transfiere como un mensaje la
invocación al skeleton.
El skeleton invocamente localmente el
método del servidor.
El skeleton transfiere al stub como
mensaje los resultados obtenidos de la
invocación.
El stub finaliza la invocación del cliente
retornándole los resultados.
Remote Machine
bind
Registry
RMI Server
skeleton
return
call
lookup
stub
RMI Client
Local Machine
Procodis’07: VII.1- RMI: Remote Method Invocation
José M. Drake
11
Notas:
11
Stub y skeleton
RMI Client
b
u
t
S
call
return
s
k
e
l
e
t
o
n
RMI Server
1. Uncliente invoca un método remoto invocando localmente el mismo método en el
stub.
2. The stub genera un mensaje que contiene: la referencia al método y un stream de
bytes que resulta de secuencializar los parámetros del método.
3. El stub crea dinámicamente un socket y establece la conexión con el skeleton.
4. El skeleton recibe el mensaje los decodifica y delega en un thread la invocación
del método del servidor. Quedando dispuesto de nuevo a la recepción de un nuevo
mensaje (no siempre es multithread).
5. El thread genera un mensaje con el stream de bytes que corresponde a la
secuencilización de los resultados de la invocación.
6. El thread envía por el socket abierto el mensaje de retorno.
7. El stub decodifica el mensaje y concluye la invocación inicial retornando los
resultados al cliente.
Procodis’07: VII.1- RMI: Remote Method Invocation
José M. Drake
12
Notas:
12
Pasos para desarrollar una aplicación distribuida RMI
1. Se define la interfaz remota
2. Se desarrolla el servidor que implementa la interfaz remota.
3. Se desarrolla el cliente.
4. Se compilan los ficheros Java fuentes.
5. Se ejecuta el RMI Registry en el procesador remoto.
6. Se ejecuta el servidor en el procesador remoto.
7. Se ejecuta el cliente en el procesador local.
Procodis’07: VII.1- RMI: Remote Method Invocation
José M. Drake
13
Notas:
13
Ejemplo HolaMundo
ClienteHola
+ main()
elServidor
<<RemoteInterface>>
Hola
di_hola()
ServidorHola
rmiRegistry
+ di_hola()
+ bind()
+ lookup()
Procodis’07: VII.1- RMI: Remote Method Invocation
José M. Drake
14
Notas:
14
1- HolaMundo: Interfaz remota fichero Hola.java
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Hola extends Remote {
String di_hola() throws RemoteException;
}
Es una interfaz remota porque extiende a la interfaz Remote
Todos los métodos de la interfaz remota deb
Comentarios de: PROGRAMACION CONCURRENTE Y DISTRIBUIDA - VII.1: RMI: Remote Method Invocation (0)
No hay comentarios