Semana 13 ejemplo del uso del rmi
Click here to load reader
-
Upload
terryjoss -
Category
Technology
-
view
1.437 -
download
0
Transcript of 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) {
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);
}
}
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.