Semana 13 ejemplo del uso del rmi

3

Click here to load reader

Transcript of Semana 13 ejemplo del uso del rmi

Page 1: Semana 13   ejemplo del uso del rmi

Ejemplo del uso del RMI

Se hará una impresión de "Mi Biblioteca" en versión cliente/servidor Los archivos necesarios serán:

Biblio.java (Una interface con lo básico) BiblioImpl.java (El objeto servidor en sí mismo, con método main para poder

ejecutarse) BiblioClient.java (El cliente java)

Estos 3 archivos componen la parte servidora (objetos en el lado del servidor) Biblio.java import java.rmi.Remote;

import java.rmi.RemoteException;

public interface Biblio extends Remote {

String mensaje() throws RemoteException;

}

BiblioImpl.java

import java.rmi.Naming;

import java.rmi.RemoteException;

import java.rmi.RMISecurityManager;

import java.rmi.server.UnicastRemoteObject;

public class BiblioImpl extends UnicastRemoteObject implements Biblio {

public BiblioImpl() throws RemoteException {

super();

}

public String mensaje() {

return "Esta es Mi Biblioteca.";

}

public static void main(String args[]) {

// Create and install a security manager

if (System.getSecurityManager() == null) {

System.setSecurityManager(new RMISecurityManager());

}

try {

BiblioImpl obj = new BiblioImpl();

// Bind this object instance to the name "BiblioServer"

Naming.rebind("//192.168.0.18/BiblioServer", obj);

System.out.println("BiblioServer bound in registry");

} catch (Exception e) {

Page 2: Semana 13   ejemplo del uso del rmi

System.out.println("BiblioImpl err: " + e.getMessage());

e.printStackTrace();

}

}

}

policy

grant {

// Allow everything for now

permission java.security.AllPermission;

};

Este es para la parte cliente BiblioClient.java

import java.rmi.Naming;

import java.rmi.RemoteException;

public class BiblioClient {

static String message = "blank";

static Biblio obj = null;

public static void main(String args[]) {

try {

obj = (Biblio)Naming.lookup("//192.168.0.18" + "/BiblioServer");

message = obj.mensaje();

} catch (Exception e) {

System.out.println("BiblioApplet exception: " + e.getMessage());

e.printStackTrace();

}

System.out.println("MENSAJE: " + message);

}

}

Page 3: Semana 13   ejemplo del uso del rmi

Compilamos y generamos los proxys para que el cliente remoto pueda acceder al objeto

servidor (que simplemente devuelve un mensaje).

javac Biblio.java BiblioImpl.java

rmic BiblioImpl

Lo cual nos genera los .class de Biblio.java y BiblioImpl.java. Además de esto, el

comando rmic, genera unos proxys para copiar en el lado cliente son:

BiblioImpl_Stub.class y BiblioImpl_Skel.class

El archivo policy lo necesitamos en el lado del servidor para dar seguridad al acceso a

nuestro objeto. Ejecutamos el rmiregistry que levanta un servidor escuchando en el

puerto 1099, Este programa se encarga de recibir peticiones de Clientes que intentan

localizar objetos servidores y les indica donde se encuentran físicamente.

Una vez que tenemos levantado el rmiregisty , Levantamos nuestro objeto de lado del

servidor:

java -Djava.security.policy=$HOME/Programacion/java/rmi/policy BiblioImpl

haciendo referencia al archivo policy antes creado.

En el lado cliente compilamos BiblioClient.java y copiamos el Stub y el Skel generados

en el servidor, de modo que tengamos:

BiblioClient.class

BiblioImpl_Skel.class

BiblioImpl_Stub.class

y ejecutamos : java BiblioClient , que como resultado debería dar:

hp@hp:rmi$ java BiblioClient

MENSAJE: Esta es Mi Biblioteca.