Está en la página 1de 5

INSTITUTO TECNOLGICO SUPERIOR DE COATZACOALCOS

Itesco
REA:

Ingeniera Informtica
MA T E R I A:
Programacin en Ambiente C/S
T E M A:
Aplicaciones practicas RMI
DOCENTE:
L.S.C. Lizbeth Hernndez Olan
ALUMNA:

Gabriela Martnez Martnez

COATZACOALCOS VERACRUZ

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.

Figura: Secuencia de pasos para programar aplicaciones RMI


La secuencia indicada en la figura A.1 es la siguiente theenumialph@enumi theenumi)
1. En primer lugar se escribe la interfaz remota del servidor, que en este caso se llamar ejecutor.
Toda interfaz remota debe declararse como public y debe extender la interfazjava.rmi.Remote.
Adems, esta interfaz debe definir los mtodos que sern accesibles remotamente. Por ltimo
cada uno de estos mtodos debe manejar la excepcinjava.rmi.RemoteException. La segunda
interfaz necesitada para este ejemplo define el tipo Tarea. Este tipo es utilizado como un
argumento del mtodo ejecutar del interfazejecutor. Esta segunda interfaz permite definir desde el
lado cliente la tarea (Tarea) que debe realizar el servidor y ser pasada dinmicamente como
argumento
del
mtodo
remoto.
Observamos
que
la
interfaz Tarea extiende
el
interfaz java.io.Serializable. RMI utiliza el mecanismo de serializacin de objetos para transportar
objetos entre mquinas virtuales. Tarea no es un objeto accesible remotamente, sino que es
enviada por el cliente como argumento al servidor. En definitiva el objeto ejecutor del lado servidor
queda a disposicin de ejecutar tareas Tarea que le soliciten los clientes.
El cdigo de la interfaz remota ejecutor es el siguiente:
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 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.
Este servicio se inicia en entornos Linux:
rmiregistry &
En entornos Windows:
start rmiregistry
La aplicacin rmiregistry crea un objeto Registry, que escucha por un puerto, a la espera de
peticiones de procesos clientes que busquen objetos remotos en el registro RMI. Cabe destacar
que, cara al servidor de registro RMI, todos los procesos actan como clientes, tanto los servidores
de objetos remotos como los clientes. Un servidor que va a registrar sus objetos remotos debe
estar en el mismo host que ejecuta el servidor de registro RMI.

18. Se inicia un proceso servidor y se registra en el rmiregistry. Una vez compilada y ejecutada, queda
registrada.
El cdigo para la implementacin del servidor es el siguiente:
package callback;
import java.rmi.*;
public class servidor {
private servidor(){
try{
if (System.getSecurityManager()==null)
System.setSecurityManager(new RMISecurityManager());
ejecutor imp=new ejecutor_Imp();
Naming.rebind("rmi://192.168.2.2/Motor_Computo",imp);
}catch(Exception e){
System.out.println("Error: "+e.getMessage());
e.printStackTrace();
}
}
public static void main(String args[]){
System.out.println("Levantando el servidor...");
servidor server=new servidor();
}
}
El servidor, en primer lugar, instala un gestor de seguridad. A continuacin crea un objeto de la
clase que implementa la interfaz remota y lo publica.
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.

Figura: Proceso servidor en ejecucin

Figura: Proceso cliente en ejecucin

También podría gustarte