RMI: Introduccion Y Ejemlo
Enviado por didieroxp • 11 de Noviembre de 2013 • 1.517 Palabras (7 Páginas) • 379 Visitas
Remote Method Invocation (RMI)
de Java
Concurrencia y Distribuci´on
Programaci´on Avanzada
Posgrado en Ciencia e Ingenier´ıa de la Computaci´on, UNAM
1. Introducci´on
El mecanismo RMI (Remote Method Invocation) permite que una apli-
caci´on o applet se comunique con objetos que residen en programas que
se ejecutan en m´aquinas remotas. En esencia, en lugar de crear un objeto,
el programador liga el objeto remoto con un representante local, conocido
como stub. Los mensajes dirigidos al objeto remoto se env´ıan al stub local,
como si fuera el objeto real. El stub acepta los mensajes que se le env´ıen, y
a su vez, los env´ıa al objeto remoto, el cual invoca sus m´etodos apropiados.
El resultado de la invoaci´on de los m´etodos en el objeto remoto se env´ıa de
regreso al stub local, que los remite al emisor original de la llamada.
Aparte de ligar el stub con el objeto remoto, el c´odigo escrito por el
programador para comunicar con el objeto remoto es igual al c´odigo que se
utilizar´ıa si el objeto se encontrara en una aplicaci´on o applet local.
2. Resumen del proceso
La Figura 1 muestra una aplicaci´on cliente ejecut´andose en una m´aquina
A, que env´ıa un mensaje a un objeto remoto contenido en una aplicaci´on
servidor que se ejecuta en una m´aquina B.
Cuando la aplicaci´on cliente env´ıa un mensaje al stub local del objeto
remoto, la petici´on se transmite a la m´aquina que contiene al objeto real,
donde el m´etodo es invocado y cualquier resultado retornado al stub local,
de modo que la aplicaci´on cliente puede obtener la respuesta apropiada.
1
Objeto
Remoto
Computadora A
Programa
Cliente
Computadora B
Programa
Servidor
Mensaje STUB
Figura 1: Enviando un mensaje a un objeto remoto.
2.1. La clase java.rmi.Naming
La clase Naming contiene los siguientes m´etodos est´aticos que permiten
el acceso a objetos remotos utilizando un URL para especificar el nombre y
lugar del objeto remoto.
M´etodo Responsabilidad
bind(url,object) Liga un nombre a un objeto remoto. El nombre
se especifica como un URL.
list(url) Retorna un arreglo de cadenas representando los
URLs en el registro.
lookup(url) Retorna un objeto remoto (un stub) asociado con
el URL.
rebind(url, object) Similar al bind(), pero reemplaza la asociaci´on
hecha.
unbind(url) Remueve la asociaci´on entre el objeto remoto
y el URL.
El URL se presenta en la forma rmi://host:port/objectName, donde:
Componente Valor por defecto Especificaci´on
rmi rmi El m´etodo de acceso
(debe ser rmi).
host localhost La m´aquina servidor
(host).
port 1099 El puerto utilizado.
objectName - El nombre del objeto remoto.
2
2.2. La aplicaci´on rmiregistry
La aplicaci´on servidor rmiregistry se utiliza para:
Registrar un nombre y un lugar de un objeto remoto. Esto se realiza
a partir de un servidor que contiene un objeto remoto. El c´odigo en el
servidor es de la forma:
Naming.rebind("rmi://host/name", object);
Donde rmi://host/name es el lugar donde se encuentra el objeto re-
moto y object es el objeto que se llama remotamente. Adem´as la
aplicaci´on rmiregistry debe estarse ejecutando en la misma m´aquina
servidor que la aplicaci´on servidor que contiene el objeto remoto.
Permitir a un cliente ligar un stub local que le de acceso al objeto
remoto contenido en la aplicaci´on servidor. La aplicaci´on cliente se
liga al objeto remoto mediante el m´etodo lookup(), que retorna un
objeto que permite el acceso v´ıa un stub al objeto remoto. El c´odigo
en la aplicaci´on cliente debe ser de la forma:
Naming.lookup("rmi://host/name");
En esencia, la aplicaci´on rmiregistry act´ua como un registro de objetos
que pueden ser accesados remotamente. Los objetos se registran y ligan a
un stub local usando los m´etodos de la clase Naming, del paquete java.rmi.
2.3. El proceso completo
La Figura 2 muestra el proceso completo, con una aplicaci´on cliente
ejecut´andose en la m´aquina A, que accesa a un objeto remoto que se ejecuta
en una aplicaci´on servidor en una m´aquina B.
La secuencia de pasos se realiza como sigue:
1. Inicializaci´on:
Se ejecuta la aplicaci´on rmiregistry en la computadora B.
La aplicaci´on servidor que contiene al objeto remoto se inicia en
la computadora B.
3
Objeto
Remoto
Computadora A
Programa
Cliente
Computadora B
Programa
Servidor
Mensaje STUB
bind()
rmiregistry
lookup()
Figura 2: Resumen del accdeso a un objeto remoto utilizando rmiregistry.
La aplicaci´on servidor liga (usando bind() ´o rebind()) al objeto
remoto con la aplicaci´on rmiregistry.
La aplicaci´on cliente se inicia en la computadora A.
La aplicaci´on cliente busca (lookup()) al objeto remoto y lo liga
a un stub local.
2. Acceso:
Los mensajes se env´ıan al stub local en la computadora A, que
son re-enviados al servidor donde se encuentra el objeto real. El
m´etodo correspondiente al mensaje se invoca, y el resultado se
retorna.
N´otese que la aplicaci´on rmiregistry debe estar ejecut´andose en la mis-
ma computadora donde se ejecuta la aplicaci´on servidor que contiene al
objeto remoto.
Una clase importante utilizada en el proceso RMI es la clase Naming,
cuyas responsabilidades son:
4
M´etodo Responsabilidad
bind(str,o) Liga el nombre str con el objeto remoto o.
lookup(str) Retorna un stub asociado con el nombre str.
El objeto remoto se accesa mendiante enviar mensajes al stub.
rebind(str,o) Similar al bind(), pero reemplaza la asociaci´on.
unbind(str) Remueve la asociaci´on entre el objeto remoto
y el nombre str.
3. La implementaci´on – acceso remoto a una cuen-
ta de banco
Desarrolle la aplicaci´on de acceso remoto a una cuenta bancaria, en forma
de una relaci´on cliente-servidor, donde la aplicaci´on
...