Documente Academic
Documente Profesional
Documente Cultură
Contenido
Introduccin Implementacin
Diseo de la interfaz remota. Implementacin de la interfaz remota. Obtencin de las clases Stub y Skeleton. Aplicacin del Servidor. Aplicacin del Cliente.
Ejecucin
Registro de objetos remotos Iniciar el Servidor
Iniciar el Cliente.
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Introduccin
Cliente
Cliente
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Introduccin
Stub
Capa Proxy
Skeleton
Capa de Transporte
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Introduccin
Arquitectura RMI Cliente Servidor Interface Remota Stub Implementacin Interface Remota Aplicacin Servidor
Aplicacin Cliente
Skeleton
Registra Objetos
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Introduccin
Implementacin Diseo y compilacin de la interfaz remota. Implementacin de la interface remota en una clase y su compilacin. Obtencin de las clases Stub y Skeleton a partir de la interface remota. Desarrollo y Compilacin de la Aplicacin del Servidor. Desarrollo y Compilacin de la Aplicacin del Cliente. Ejecucin Registro de objetos remotos Iniciar el Servidor Establecer la poltica de seguridad Iniciar el Cliente. Durante la explicacin realizaremos un ejemplo tipo Hola, Mundo!.
I.T. Informtica Programacin Concurrente
Universidad de Huelva
Implementacin
Compilacin
javac <nombInterfaceRemota>.java <nombInterfaceRemota>.class
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Implementacin
Compilacin
javac <nombClase>.java <nombClase>.class
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Implementacin
Las clases Stub y Skeleton // ojo slo versiones anteriores a jdk 1.5
Las clases Stub y Skeleton son obtenidas a partir de la clase anterior. Compilador de Java RMI: rmic rmic <nombClase>
Crear un fichero .jar con las clases jar cvf <ficheroClass>.jar *.class
$ InterfaceRemota.class
nombClase.class nombClase_Stub.class nombClase_Skel.class
En nuestro Ejemplo
saludo.jar
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Implementacin
// Establecer el gestor de seguridad System.setSecurityManager(new RMISecurityManager()); // Instancias de Objetos Remotos // Registros de Objetos Remotos try { nombClase <objRemoto> = new nombClase(); Naming.rebind(<url>\<nomObj>, <objRemoto>); } catch (Exception ex) { System.err.println(Error: " + ex.getMessage()); e.printStackTrace(); }
<apServidor>.class
Programacin Concurrente
Universidad de Huelva
Implementacin
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Implementacin
<apCliente>.class
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Implementacin
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
El Classpath debe estar disponible donde se encuentren las clases en la maquina servidora y cliente (caso de que sean distintas)
c:\rmi>set CLASSPATH = . o set CLASSPATH = Directorio donde estan los .class En nuestro ejemplo set CLASS PATH = c:\rmi
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Ejecucin
Fichero para la poltica de seguridad grant { permission java.net.SocketPermission "*:1024-65535", "connect,accept"; permission java.net.SocketPermission "*:80", "connect"; };
Si queremos permitir todo, el fichero puede ser slo esta lnea: grant { permission java.security.AllPermission; };
Iniciar el Cliente:
java <apCliente>
I.T. Informtica Programacin Concurrente
Universidad de Huelva
Registrar Objetos:
start rmiregistry
Iniciar Cliente
java apCliente
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Productor - Consumidor
Interface Remota
public interface IBuffer extends java.rmi.Remote { void poner(int num) throws java.rmi.RemoteException; int coger() throws java.rmi.RemoteException; }
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Productor - Consumidor
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Productor - Consumidor
Cliente productor
import java.rmi.*; class CProductor { IBuffer obj; void producir() { try { obj = (IBuffer) Naming.lookup("//localhost/ObjBuffer"); } catch (Exception e) { System.out.println("Excepcion: " + e.getMessage()); } for(int i=1;i<=10;i++) { System.out.println("Quiero Escribir"); try { obj.poner(d); } catch (Exception e) { System.out.println("Excepcion: " + e.getMessage()); } System.out.println("Puesto: " + i); } } public static void main(String args[]) { CProductor c = new CProductor(); c.producir(); } }
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Productor - Consumidor
Cliente Consumidor
import java.rmi.*; class CConsumidor { IBuffer obj;int d; void consumir() { try { obj = (IBuffer)Naming.lookup("//localhost/ObjBuffer"); } catch (Exception e) { System.out.println("Excepcion: " + e.getMessage());} do { System.out.println("Quiero leer"); try { d = obj.coger(); } catch (Exception e) { System.out.println("Excepcion: " + e.getMessage()); } System.out.println("Leido: " + d); }while(d!=10); } public static void main(String args[]) { CConsumidor c = new CConsumidor(); c.consumir(); } }
Universidad de Huelva
I.T. Informtica
Programacin Concurrente
Java RMI