MEMORIA: UN EJEMPLO SENCILLO DE JAVA RMI EN WINDOWS TECNO ACADEMY tecnoacademy.blogspot.com Salvador Fernández Fernández
EL EJEMPLO El proceso servidor hace un eco de la entrada de teclado enviada por el proceso cliente. Por sencillez, ejecutaremos tanto el servidor como el cliente en la  máquina local . El sistema operativo es  Windows El  jdk  utilizado es  1.5.0
Código Fuente Creamos en  C:\  una carpeta para ubicar el código fuente del servidor. En mi caso, he creado una carpeta denominada  rmi4 Para no mezclar el código del cliente, dentro de  rmi4 , creo una carpeta a la que llamo  cliente . 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.
Clases del servidor Las ubicamos en la carpeta  c:\rmi4 Son:  EcoRMI.java  (interfaz remota),  EcoRMISirviente.java  (implementación de la interfaz remota) y  Servidor.java  (la aplicación remota)
EcoRMI.java public interface EcoRMI  extends java.rmi.Remote  {  public String eco(String mensaje)  throws java.rmi.RemoteException ;   }
EcoRMISirviente.java (1/2) import java.rmi.*;  import java.rmi.server.UnicastRemoteObject;  public class EcoRMISirviente  extends UnicastRemoteObject  implements EcoRMI   {  public EcoRMISirviente(String nombre)  throws RemoteException   {  super();  try  {  Naming.rebind(nombre, this);  } catch (Exception e) {  System.out.println("Excepcion: " + e.getMessage());  e.printStackTrace();  }  }
public String eco(String mensaje) throws RemoteException   {  System.out.println("Recibido: " + mensaje);  return mensaje;  }  }  EcoRMISirviente.java (2/2) // Implementación del método remoto
import java.rmi.*;  import java.rmi.server.*;  public class EcoRMIServidor  {  public static void main(String args[])  {  // Crea e instala el gestor de seguridad   System.setSecurityManager(new RMISecurityManager());  try  {  EcoRMISirviente miEco =  new  EcoRMISirviente("//:4000/mi-EcoRMI");   System.out.println("Servidor de EcoRMI listo.");  } catch (Exception e) {  System.out.println("Excepcion: " + e.getMessage());  e.printStackTrace();  }  }  }   EcoRMIServidor.java
java.policy En  c:\rmi4  (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. grant { permission java.security. AllPermission ; };
Compilar en el servidor Desde la línea de comandos, compilamos todas las clases en c:\rmi4 (servidor): > cd c:\rmi4 c:\rmi4> javac *.java
Generar stub En la misma línea de comandos, generamos el archivo de stub: c:\rmi4> rmic EcoRMISirviente Se genera un archivo llamado  EcoRMISirviente_stub.class . Es  importante , acordarse de copiarlo en la carpeta cliente. También debemos  copiar en la carpeta cliente  los archivos  EcoRMI.java  y  EcoRMI.class
Clases en el cliente Además de los archivos  EcoRMISirviente.class ,  EcoRMI.java  y  EcoRMI.class  que hemos copiado en pasos previos, debemos guardar en  c:\rmi4\cliente  el código fuente del cliente al que denominaremos  EcoRMICliente.java
import java.io.*;  import java.rmi.*;  import java.rmi.registry.*;  import java.rmi.server.*;  public class EcoRMICliente  {  public static void main(String args[])  {  String mensajeEnviado;  String mensajeRecibido;  DataInputStream dataIn = new DataInputStream(System.in);  BufferedReader in =  new BufferedReader(new InputStreamReader(dataIn));  // Crea e instala el gestor de seguridad  System.setSecurityManager(new RMISecurityManager());  try {   EcoRMICliente.java (1/2)
EcoRMI miEco =  (EcoRMI)Naming.lookup("rmi://"  + args[0] + ":4000/" + "mi-EcoRMI");  // hace un bucle hasta el fin de la entrada   System.out.print("Eco> ");  while ((mensajeEnviado = in.readLine()) != null) {  mensajeRecibido =  miEco.eco(mensajeEnviado);   System.out.println(mensajeRecibido);  System.out.print("Eco> ");  }  } catch(Exception e) {  System.err.println("Excepcion de Sistema: " + e);  }  System.exit(0);  }  }  EcoRMICliente.java (2/2)
Compilar el cliente Desde una nueva línea de comandos, compilamos la clase cliente  en  c:\rmi4\cliente : > cd c:\rmi4\cliente c:\rmi4\cliente> javac EcoRMICliente.java
Lanzar el rmiregistry 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: c:\rmi4> start rmiregistry 4000 (Debe abrirse una ventana de línea de comandos vacía y permanecer abierta. Si se cierra es que algo va mal)
Lanzar el servidor Desde la misma línea de comandos en la que estoy ejecuto el servidor: c:\rmi4> java –Djava.security.policy=file:///c:/rmi4/java.policy EcoRMIServidor
Lanzar el cliente Desde la misma línea de comandos en la que compilé la clase del cliente, ejecuto el proceso cliente: c:\rmi4\cliente> java –Djava.security.policy=file:///c:/rmi4/java.policy EcoRMICliente localhost
La ejecución 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 Cliente Servidor

Java Rmi

  • 1.
    MEMORIA: UN EJEMPLOSENCILLO DE JAVA RMI EN WINDOWS TECNO ACADEMY tecnoacademy.blogspot.com Salvador Fernández Fernández
  • 2.
    EL EJEMPLO Elproceso servidor hace un eco de la entrada de teclado enviada por el proceso cliente. Por sencillez, ejecutaremos tanto el servidor como el cliente en la máquina local . El sistema operativo es Windows El jdk utilizado es 1.5.0
  • 3.
    Código Fuente Creamosen C:\ una carpeta para ubicar el código fuente del servidor. En mi caso, he creado una carpeta denominada rmi4 Para no mezclar el código del cliente, dentro de rmi4 , creo una carpeta a la que llamo cliente . 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.
  • 4.
    Clases del servidorLas ubicamos en la carpeta c:\rmi4 Son: EcoRMI.java (interfaz remota), EcoRMISirviente.java (implementación de la interfaz remota) y Servidor.java (la aplicación remota)
  • 5.
    EcoRMI.java public interfaceEcoRMI extends java.rmi.Remote { public String eco(String mensaje) throws java.rmi.RemoteException ; }
  • 6.
    EcoRMISirviente.java (1/2) importjava.rmi.*; import java.rmi.server.UnicastRemoteObject; public class EcoRMISirviente extends UnicastRemoteObject implements EcoRMI { public EcoRMISirviente(String nombre) throws RemoteException { super(); try { Naming.rebind(nombre, this); } catch (Exception e) { System.out.println("Excepcion: " + e.getMessage()); e.printStackTrace(); } }
  • 7.
    public String eco(Stringmensaje) throws RemoteException { System.out.println("Recibido: " + mensaje); return mensaje; } } EcoRMISirviente.java (2/2) // Implementación del método remoto
  • 8.
    import java.rmi.*; import java.rmi.server.*; public class EcoRMIServidor { public static void main(String args[]) { // Crea e instala el gestor de seguridad System.setSecurityManager(new RMISecurityManager()); try { EcoRMISirviente miEco = new EcoRMISirviente("//:4000/mi-EcoRMI"); System.out.println("Servidor de EcoRMI listo."); } catch (Exception e) { System.out.println("Excepcion: " + e.getMessage()); e.printStackTrace(); } } } EcoRMIServidor.java
  • 9.
    java.policy En c:\rmi4 (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. grant { permission java.security. AllPermission ; };
  • 10.
    Compilar en elservidor Desde la línea de comandos, compilamos todas las clases en c:\rmi4 (servidor): > cd c:\rmi4 c:\rmi4> javac *.java
  • 11.
    Generar stub Enla misma línea de comandos, generamos el archivo de stub: c:\rmi4> rmic EcoRMISirviente Se genera un archivo llamado EcoRMISirviente_stub.class . Es importante , acordarse de copiarlo en la carpeta cliente. También debemos copiar en la carpeta cliente los archivos EcoRMI.java y EcoRMI.class
  • 12.
    Clases en elcliente Además de los archivos EcoRMISirviente.class , EcoRMI.java y EcoRMI.class que hemos copiado en pasos previos, debemos guardar en c:\rmi4\cliente el código fuente del cliente al que denominaremos EcoRMICliente.java
  • 13.
    import java.io.*; import java.rmi.*; import java.rmi.registry.*; import java.rmi.server.*; public class EcoRMICliente { public static void main(String args[]) { String mensajeEnviado; String mensajeRecibido; DataInputStream dataIn = new DataInputStream(System.in); BufferedReader in = new BufferedReader(new InputStreamReader(dataIn)); // Crea e instala el gestor de seguridad System.setSecurityManager(new RMISecurityManager()); try { EcoRMICliente.java (1/2)
  • 14.
    EcoRMI miEco = (EcoRMI)Naming.lookup("rmi://" + args[0] + ":4000/" + "mi-EcoRMI"); // hace un bucle hasta el fin de la entrada System.out.print("Eco> "); while ((mensajeEnviado = in.readLine()) != null) { mensajeRecibido = miEco.eco(mensajeEnviado); System.out.println(mensajeRecibido); System.out.print("Eco> "); } } catch(Exception e) { System.err.println("Excepcion de Sistema: " + e); } System.exit(0); } } EcoRMICliente.java (2/2)
  • 15.
    Compilar el clienteDesde una nueva línea de comandos, compilamos la clase cliente en c:\rmi4\cliente : > cd c:\rmi4\cliente c:\rmi4\cliente> javac EcoRMICliente.java
  • 16.
    Lanzar el rmiregistryAprovechamos 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: c:\rmi4> start rmiregistry 4000 (Debe abrirse una ventana de línea de comandos vacía y permanecer abierta. Si se cierra es que algo va mal)
  • 17.
    Lanzar el servidorDesde la misma línea de comandos en la que estoy ejecuto el servidor: c:\rmi4> java –Djava.security.policy=file:///c:/rmi4/java.policy EcoRMIServidor
  • 18.
    Lanzar el clienteDesde la misma línea de comandos en la que compilé la clase del cliente, ejecuto el proceso cliente: c:\rmi4\cliente> java –Djava.security.policy=file:///c:/rmi4/java.policy EcoRMICliente localhost
  • 19.
    La ejecución Unavez 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 Cliente Servidor