Académique Documents
Professionnel Documents
Culture Documents
En este apartado se explicar, con un ejemplo concreto, los pasos seguidos para elaborar
una aplicacin con objetos distribuidos RMI. Esta aplicacin ejemplo proporcionar un
servicio que acepta peticiones de tareas concretas especificadas por parte de los clientes.
Es decir, cada cliente puede especificar la tarea que desea que el servidor le realice,
utilizando para ello el paso de objetos serializados.
La figura A.1 muestra un esquema del proceso paso por paso en la elaboracin de una
aplicacin RMI.[6]
pg. 1
package callback;
import java.rmi.*;
public interface ejecutor
extends Remote{
public String ejecutar(Tarea t) throws RemoteException;
}
El cdigo de la interfaz Tarea es el siguiente:
package callback;
import java.io.Serializable;
public interface Tarea extends Serializable{
public String recado();
}
La interfaz ejecutor contiene un nico mtodo ejecutar, que recibe como argumento
un objeto de la clase Tarea, que es la interfaz definida por el cliente. De esta forma
el cliente implementa la tarea (de clculo, por ejemplo) que desea realice el servidor.
Para ello define el mtodo recado.
2. Se implementa la interfaz remota. La clase que la implementa debe heredar
de RemoteServer y lo habitual es hacerlo heredando de UnicastRemoteObject. El
cdigo de la implementacin ejecutor_Imp es el siguiente:
3. package callback;
4. import java.rmi.*;
5. import java.rmi.server.*;
6.
7. public class ejecutor_Imp extends UnicastRemoteObject
8.
implements ejecutor {
9.
protected ejecutor_Imp() throws RemoteException {
10.
super();
11.
}
12.
public String ejecutar(Tarea t) throws RemoteException {
13.
return t.recado();
14.
}
15. }
sta es la implementacin desde el lado servidor de la interfaz ejecutor. Utiliza el
constructor de la clase de la que hereda, UnicastRemoteObject y define el
mtodoejecutar(Tarea t), que devuelve la resolucin del mtodo recado() del
objeto Tarea que ha sido pasado como parmetro.
16. Se generan los archivos stub y skeleton a partir de la clase que implementa la
interfaz remota. Para ello se utiliza el compilador rmic. Para ejecutarlo hacemos rmic
nombre_claseo bien rmic -d directorio nombre_clase para especificar una ubicacin
destino concreta.
Como resultado de esta operacin se obtienen dos archivos:
o
pg. 2
ejecutor_Imp_Stub.class
o ejecutor_Imp_Skel.class
17. Se inicia el servicio de registro RMI, rmiregistry. Un host que quiera exportar
referencias remotas a sus mtodos de modo que los stubs puedan acceder a ellos,
debe estar ejecutando un servidor de registro RMI.
pg. 3
En el ejemplo que nos ocupa estamos suponiendo que las clases necesarias residen
en las mquinas implicadas, por lo que no sera necesario el uso de un gestor de
seguridad.
19. Se escribe la clase cliente. En esta parte se incluye la implementacin de la
interfaz Tarea vista previamente, que utilizar el cliente para solicitar la ejecucin de
una tarea determinada.
El cdigo de la clase que implementa la interfaz Tarea es el siguiente:
package callback;
public class tarea_Imp implements Tarea{
public String recado() {
return "Hello World";
}
}
El cdigo para la implementacin del cliente es el siguiente:
package callback;
import java.rmi.*;
public class cliente {
public static void main(String args[]){
try{
if (System.getSecurityManager()==null)
System.setSecurityManager(new RMISecurityManager());
ejecutor ej=(ejecutor)
Naming.lookup("rmi://192.168.2.2/Motor_Computo");
Tarea tarea=new tarea_Imp();
String respuesta=ej.ejecutar(tarea);
System.out.println(respuesta);
}catch(Exception e){
System.out.println("Error: "+e.getMessage());
}
}
}
La clase Tarea_Imp implementa la interfaz Tarea, vista anteriormente. En este
caso, define el mtodo recado() como un simple "Hello World". Es decir, la tarea que
el cliente quiere que realice el servidor es devolverle la frase "Hello World".
Al igual que en el lado servidor, el cliente empieza creando e instalando un gestor
de seguridad. A continuacin localiza el objeto remoto y crea un objeto de la
clase Tarea_Imppara solicitar al servidor que ejecute esa tarea.
20. Se compila la clase cliente
21. Se inicia un proceso cliente.
pg. 4
pg. 5