Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
RMI
Laboratorio de Informática Distribuida -2-
El nivel de aplicación se apoya como es lógico sobre este modelo de tres capas. Los límites
entre cada nivel están definidos por una interfaz y protocolos específicos. Para transmitir
transparentemente objetos de un espacio de memoria a otro se usa la técnica de
"Serialización de Objetos". Cuando un cliente invoca un método de un objeto servidor
remoto, hace uso de un PROXY o STUB para llegar hasta el objeto remoto, dicho STUB se
encarga de enviar las solicitudes de invocación de los métodos a través de la interfaz de
referencia remota. La capa de referencia remota es la responsable de llevar a cabo la
semántica de invocación a los objetos. Por último la capa de transporte es la responsable de:
Estas clases son generadas por el compilador rmic, se obtienen dos nuevas clases en los
ficheros nombreclase_Skel.class y nombreclase_Stub.class, donde nombreclase indica el
nombre de la clase a distribuir
El Stub de un objeto remoto es el proxy del cliente para el objeto remoto, y realiza las
siguientes tareas:
El Skeleton de un objeto remoto es una entidad del servidor que contiene un método que
despacha las llamadas a la implementación del objeto remoto. Sus tareas fundamentales son
las siguientes:
RMI
Laboratorio de Informática Distribuida -3-
Cualquier aplicación debe cumplir una serie de requisitos para todo funcione como es
debido:
Aparte de los requisitos anteriores, para desarrollar una aplicación distribuida con JAVA
RMI son necesario los siguientes pasos:
Una vez realizado los puntos anteriores y para que los métodos del objeto remoto puedan
ser invocados por distintos clientes deberemos:
Pero, ¿que significa realmente la iniciación del registro de objetos remotos?, no es más que
un mecanismo que controle todos los objetos que deseamos hacer exportables, conocido
también como registro de nombres, permitirá conseguir referencias de dichos objetos a los
clientes que lo invoquen. Para realizar esta tarea JAVA dispone del comando rmiregistry,
cuya sintaxis es:
rmiregistry [ port]
RMI
Laboratorio de Informática Distribuida -4-
También debemos hablar de una de las características más importantes que se implementan
en la programación RMI que es la recolección de basura distribuida. Cada objeto exportado
de la JVM mantiene una lista de referencia “Reference list”, que tiene los clientes que
poseen referencias al objeto distribuido, por tanto se podrá, usando métodos como dirty y
clean, mantener el orden y la coherencia en la lista.
12.3 EJEMPLO
Vamos crear la típica aplicación del “HolaMundo” en entorno distribuido, para ello el
primer paso será crear la interfaz remota que en nuestra aplicación será:
public interface I HolaMundo extends java.rmi.Remote {
String Soy ( String nombre) throws java.rmi.RemoteException;
}
Fichero: IHolaMundo.java
El siguiente paso será crear una clase que implemente la interfaz remota que acabamos de
definir. Esta nueva clase será CHolaMundo y el código será el siguiente:
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
try {
RMI
Laboratorio de Informática Distribuida -5-
Fichero: CHolaMundo.java
Ahora podríamos crear las clases stub y skel, utilizando para ello el compilador rmic (rmic
CHolaMundo), el compilador creará los siguientes dos archivos, CholaMundo_Stub.class y
CholaMundo_Skel.class.
La parte final será la creación de la aplicación cliente, el código que escribimos para esta
implementación es el siguiente:
import java.rmi.*;
Fichero: SaludosSoy.java
• Podemos desarrollar una aplicación distribuida sin necesidad de manejar nada que no esté
en el compilador JDK.
RMI
Laboratorio de Informática Distribuida -6-
RMI