Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Aplicaciones Practicas
Aplicaciones Practicas
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:
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.
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.