Java Rmi

3,810 views
3,726 views

Published on

Descripción paso a paso de un ejemplo muy sencillo de Java RMI sobre una misma máquina Windows local

Published in: Technology
1 Comment
1 Like
Statistics
Notes
  • Me encanta, buena explicación (y)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
3,810
On SlideShare
0
From Embeds
0
Number of Embeds
68
Actions
Shares
0
Downloads
159
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

Java Rmi

  1. 1. MEMORIA: UN EJEMPLO SENCILLO DE JAVA RMI EN WINDOWS TECNO ACADEMY tecnoacademy.blogspot.com Salvador Fernández Fernández
  2. 2. EL EJEMPLO <ul><li>El proceso servidor hace un eco de la entrada de teclado enviada por el proceso cliente. </li></ul><ul><li>Por sencillez, ejecutaremos tanto el servidor como el cliente en la máquina local . </li></ul><ul><li>El sistema operativo es Windows </li></ul><ul><li>El jdk utilizado es 1.5.0 </li></ul>
  3. 3. Código Fuente <ul><li>Creamos en C: una carpeta para ubicar el código fuente del servidor. En mi caso, he creado una carpeta denominada rmi4 </li></ul><ul><li>Para no mezclar el código del cliente, dentro de rmi4 , creo una carpeta a la que llamo cliente . </li></ul><ul><li>Utilizaremos dos ventanas de línea de comandos : una para las acciones sobre el código de servidor y otra para las operaciones del cliente. </li></ul>
  4. 4. Clases del servidor <ul><li>Las ubicamos en la carpeta c: mi4 </li></ul><ul><li>Son: EcoRMI.java (interfaz remota), EcoRMISirviente.java (implementación de la interfaz remota) y Servidor.java (la aplicación remota) </li></ul>
  5. 5. EcoRMI.java <ul><li>public interface EcoRMI extends java.rmi.Remote </li></ul><ul><li>{ </li></ul><ul><li>public String eco(String mensaje) </li></ul><ul><ul><ul><li>throws java.rmi.RemoteException ; </li></ul></ul></ul><ul><li>} </li></ul>
  6. 6. EcoRMISirviente.java (1/2) <ul><li>import java.rmi.*; </li></ul><ul><li>import java.rmi.server.UnicastRemoteObject; </li></ul><ul><li>public class EcoRMISirviente extends UnicastRemoteObject </li></ul><ul><li>implements EcoRMI </li></ul><ul><li>{ </li></ul><ul><li>public EcoRMISirviente(String nombre) throws RemoteException </li></ul><ul><li>{ </li></ul><ul><li>super(); </li></ul><ul><li>try </li></ul><ul><li>{ </li></ul><ul><li>Naming.rebind(nombre, this); </li></ul><ul><li>} catch (Exception e) { </li></ul><ul><li>System.out.println(&quot;Excepcion: &quot; + e.getMessage()); </li></ul><ul><li>e.printStackTrace(); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  7. 7. <ul><li>public String eco(String mensaje) throws RemoteException </li></ul><ul><li>{ </li></ul><ul><li>System.out.println(&quot;Recibido: &quot; + mensaje); </li></ul><ul><li>return mensaje; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>EcoRMISirviente.java (2/2) // Implementación del método remoto
  8. 8. <ul><li>import java.rmi.*; </li></ul><ul><li>import java.rmi.server.*; </li></ul><ul><li>public class EcoRMIServidor </li></ul><ul><li>{ </li></ul><ul><li>public static void main(String args[]) </li></ul><ul><li>{ </li></ul><ul><li>// Crea e instala el gestor de seguridad </li></ul><ul><li>System.setSecurityManager(new RMISecurityManager()); </li></ul><ul><li>try </li></ul><ul><li>{ </li></ul><ul><li>EcoRMISirviente miEco = new </li></ul><ul><li>EcoRMISirviente(&quot;//:4000/mi-EcoRMI&quot;); </li></ul><ul><li>System.out.println(&quot;Servidor de EcoRMI listo.&quot;); </li></ul><ul><li>} catch (Exception e) { </li></ul><ul><li>System.out.println(&quot;Excepcion: &quot; + e.getMessage()); </li></ul><ul><li>e.printStackTrace(); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>EcoRMIServidor.java
  9. 9. java.policy <ul><li>En c: mi4 (servidor) necesitamos un archivo de política de seguridad java.policy . Lo más simple es habilitar todos los permisos. También lo necesita el cliente; no obstante, basta con darle la ruta en el momento de ejecutarlo posteriormente. </li></ul><ul><li>grant { </li></ul><ul><li>permission java.security. AllPermission ; </li></ul><ul><li>}; </li></ul>
  10. 10. Compilar en el servidor <ul><li>Desde la línea de comandos, compilamos todas las clases en c: mi4 (servidor): </li></ul><ul><ul><li>> cd c: mi4 </li></ul></ul><ul><ul><li>c: mi4> javac *.java </li></ul></ul>
  11. 11. Generar stub <ul><li>En la misma línea de comandos, generamos el archivo de stub: </li></ul><ul><ul><li>c: mi4> rmic EcoRMISirviente </li></ul></ul><ul><li>Se genera un archivo llamado EcoRMISirviente_stub.class . Es importante , acordarse de copiarlo en la carpeta cliente. </li></ul><ul><li>También debemos copiar en la carpeta cliente los archivos EcoRMI.java y EcoRMI.class </li></ul>
  12. 12. Clases en el cliente <ul><li>Además de los archivos EcoRMISirviente.class , EcoRMI.java y EcoRMI.class que hemos copiado en pasos previos, debemos guardar en c: mi4cliente el código fuente del cliente al que denominaremos EcoRMICliente.java </li></ul>
  13. 13. <ul><li>import java.io.*; </li></ul><ul><li>import java.rmi.*; </li></ul><ul><li>import java.rmi.registry.*; </li></ul><ul><li>import java.rmi.server.*; </li></ul><ul><li>public class EcoRMICliente </li></ul><ul><li>{ </li></ul><ul><li>public static void main(String args[]) </li></ul><ul><li>{ </li></ul><ul><li>String mensajeEnviado; </li></ul><ul><li>String mensajeRecibido; </li></ul><ul><li>DataInputStream dataIn = new DataInputStream(System.in); </li></ul><ul><li>BufferedReader in = </li></ul><ul><li>new BufferedReader(new InputStreamReader(dataIn)); </li></ul><ul><li>// Crea e instala el gestor de seguridad </li></ul><ul><li>System.setSecurityManager(new RMISecurityManager()); </li></ul><ul><li>try { </li></ul>EcoRMICliente.java (1/2)
  14. 14. <ul><li>EcoRMI miEco = (EcoRMI)Naming.lookup(&quot;rmi://&quot; </li></ul><ul><li>+ args[0] + &quot;:4000/&quot; + &quot;mi-EcoRMI&quot;); </li></ul><ul><li>// hace un bucle hasta el fin de la entrada </li></ul><ul><li>System.out.print(&quot;Eco> &quot;); </li></ul><ul><li>while ((mensajeEnviado = in.readLine()) != null) { </li></ul><ul><li>mensajeRecibido = miEco.eco(mensajeEnviado); </li></ul><ul><li>System.out.println(mensajeRecibido); </li></ul><ul><li>System.out.print(&quot;Eco> &quot;); </li></ul><ul><li>} </li></ul><ul><li>} catch(Exception e) { </li></ul><ul><li>System.err.println(&quot;Excepcion de Sistema: &quot; + e); </li></ul><ul><li>} </li></ul><ul><li>System.exit(0); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>EcoRMICliente.java (2/2)
  15. 15. Compilar el cliente <ul><li>Desde una nueva línea de comandos, compilamos la clase cliente en c: mi4cliente : </li></ul><ul><ul><li>> cd c: mi4cliente </li></ul></ul><ul><ul><li>c: mi4cliente> javac EcoRMICliente.java </li></ul></ul>
  16. 16. Lanzar el rmiregistry <ul><li>Aprovechamos la línea de comandos en la que compilamos las clases del servidor y generamos previamente el archivo de stub para lanzar el registro de RMI en el puerto 4000 (en mi caso, el puerto por defecto 1099 estaba ocupado y no lo podía usar). Es importante advertir que ese es el puerto que he utilizado en el código de Servidor y del Cliente; si usaseis otro deberíais cambiar también el código: </li></ul><ul><ul><li>c: mi4> start rmiregistry 4000 </li></ul></ul><ul><li>(Debe abrirse una ventana de línea de comandos vacía y permanecer abierta. Si se cierra es que algo va mal) </li></ul>
  17. 17. Lanzar el servidor <ul><li>Desde la misma línea de comandos en la que estoy ejecuto el servidor: </li></ul><ul><ul><li>c: mi4> java –Djava.security.policy=file:///c:/rmi4/java.policy EcoRMIServidor </li></ul></ul>
  18. 18. Lanzar el cliente <ul><li>Desde la misma línea de comandos en la que compilé la clase del cliente, ejecuto el proceso cliente: </li></ul><ul><ul><li>c: mi4cliente> java –Djava.security.policy=file:///c:/rmi4/java.policy EcoRMICliente localhost </li></ul></ul>
  19. 19. La ejecución <ul><li>Una vez lanzados todos los procesos sólo hay que escribir algo en el prompt de la ventana de comandos del cliente y observar cómo efectivamente se produce el eco de lo escrito en las dos ventanas </li></ul>Cliente Servidor

×