1. MEMORIA:
UN EJEMPLO SENCILLO
DE JAVA RMI EN
WINDOWS
TECNO ACADEMY
tecnoacademy.blogspot.com
Salvador Fernández Fernández
2. EL EJEMPLO
El proceso servidor provoca 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
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.
4. Clases del servidor
Las ubicamos en la carpeta c:rmi4
Son: EcoRMI.java (interfaz remota),
EcoRMISirviente.java (implementación de
la interfaz remota) y EcoRMIServidor.java
(la aplicación remota)
8. import java.rmi.*;
EcoRMIServidor.java
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(quot;//:4000/mi-EcoRMIquot;);
System.out.println(quot;Servidor de EcoRMI listo.quot;);
} catch (Exception e) {
System.out.println(quot;Excepcion: quot; + e.getMessage());
e.printStackTrace();
}
}
}
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 el servidor
Desde la línea de comandos,
compilamos todas las clases en
c:rmi4 (servidor):
>cd c:rmi4
c:rmi4>javac *.java
11. 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
12. 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:rmi4cliente el código fuente del cliente
al que denominaremos
EcoRMICliente.java
13. EcoRMICliente.java (1/2)
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 {
14. EcoRMICliente.java (2/2)
EcoRMI miEco = (EcoRMI)Naming.lookup(quot;rmi://quot;
+ args[0] + quot;:4000/quot; + quot;mi-EcoRMIquot;);
// hace un bucle hasta el fin de la entrada
System.out.print(quot;Eco> quot;);
while ((mensajeEnviado = in.readLine()) != null) {
mensajeRecibido = miEco.eco(mensajeEnviado);
System.out.println(mensajeRecibido);
System.out.print(quot;Eco> quot;);
}
} catch(Exception e) {
System.err.println(quot;Excepcion de Sistema: quot; + e);
}
System.exit(0);
}
}
15. Compilar el cliente
Desde una nueva línea de comandos,
compilamos la clase cliente en
c:rmi4cliente:
>cd c:rmi4cliente
c:rmi4cliente>javac EcoRMICliente.java
16. Lanzar el rmiregistry
Aprovechamos la línea de comandos en la que
compilamos las clases del servidor 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 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
18. Lanzar el cliente
Desde la misma línea de comandos en la
que compilé la clase del cliente, ejecuto el
proceso cliente:
c:rmi4cliente>java –Djava.security.policy=file:///c:/rmi4/java.policy
EcoRMICliente localhost
19. 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