1. Ejemplo del uso del RMI<br />Se hará una impresión de quot;
Mi Bibliotecaquot;
en versión cliente/servidor<br />Los archivos necesarios serán:<br />Biblio.java (Una interface con lo básico)<br />BiblioImpl.java (El objeto servidor en sí mismo, con método main para poder ejecutarse)<br />BiblioClient.java (El cliente java)<br />Estos 3 archivos componen la parte servidora (objetos en el lado del servidor)<br />Biblio.java<br />import java.rmi.Remote;import java.rmi.RemoteException; public interface Biblio extends Remote { String mensaje() throws RemoteException; }<br /> <br />BiblioImpl.java<br /> 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 quot;
Esta es Mi Biblioteca.quot;
; } 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 quot;
BiblioServerquot;
Naming.rebind(quot;
//192.168.0.18/BiblioServerquot;
, obj); System.out.println(quot;
BiblioServer bound in registryquot;
); } catch (Exception e) { System.out.println(quot;
BiblioImpl err: quot;
+ e.getMessage()); e.printStackTrace(); } } }<br />policy<br />grant { // Allow everything for now permission java.security.AllPermission;};<br />Este es para la parte clienteBiblioClient.java<br />import java.rmi.Naming;import java.rmi.RemoteException;public class BiblioClient { static String message = quot;
blankquot;
; static Biblio obj = null; public static void main(String args[]) { try { obj = (Biblio)Naming.lookup(quot;
//192.168.0.18quot;
+ quot;
/BiblioServerquot;
); message = obj.mensaje(); } catch (Exception e) { System.out.println(quot;
BiblioApplet exception: quot;
+ e.getMessage()); e.printStackTrace(); } System.out.println(quot;
MENSAJE: quot;
+ message); }}<br />Compilamos y generamos los proxys para que el cliente remoto pueda acceder al objeto servidor (que simplemente devuelve un mensaje).<br />javac Biblio.java BiblioImpl.java<br />rmic BiblioImpl<br />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<br />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.<br />Una vez que tenemos levantado el rmiregisty , Levantamos nuestro objeto de lado del servidor:<br />java -Djava.security.policy=$HOME/Programacion/java/rmi/policy BiblioImpl<br />haciendo referencia al archivo policy antes creado.<br />En el lado cliente compilamos BiblioClient.java y copiamos el Stub y el Skel generados en el servidor, de modo que tengamos:<br />BiblioClient.classBiblioImpl_Skel.classBiblioImpl_Stub.classy ejecutamos : java BiblioClient , que como resultado debería dar:<br />hp@hp:rmi$ java BiblioClient<br />MENSAJE: Esta es Mi Biblioteca.<br />