Java RMI Remote Method Invocation - PowerPoint PPT Presentation

1 / 19
About This Presentation
Title:

Java RMI Remote Method Invocation

Description:

int coger() throws java.rmi.RemoteException; Universidad de Huelva I.T. ... public synchronized int coger() throws RemoteException ... – PowerPoint PPT presentation

Number of Views:162
Avg rating:3.0/5.0
Slides: 20
Provided by: jose353
Category:

less

Transcript and Presenter's Notes

Title: Java RMI Remote Method Invocation


1
Java RMIRemote Method Invocation
  • Invocación Remota de Métodosen Java

2
Contenido
  • Introducción
  • Implementación
  • Diseño de la interfaz remota.
  • Implementación de la interfaz remota.
  • Obtención de las clases Stub y Skeleton.
  • Aplicación del Servidor.
  • Aplicación del Cliente.
  • Ejecución
  • Registro de objetos remotos
  • Iniciar el Servidor
  • Establecer la política de seguridad
  • Iniciar el Cliente.

3
Introducción
  • Programación Distribuida
  • Modelo cliente-servidor

4
Introducción
  • Arquitectura RMI

Cliente
Servidor
Capa de Aplicación
Stub
Skeleton
Capa Proxy
Capa de Referencia Remota
Capa de Transporte
5
Introducción
  • Arquitectura RMI

Cliente
Servidor
Interface Remota
Aplicación Cliente
Stub
Aplicación Servidor
ImplementaciónInterface Remota
Skeleton
Registra Objetos
6
Introducción
  • Pasos para el desarrollo de aplicaciones
  • Implementación
  • Diseño y compilación de la interfaz remota.
  • Implementación de la interface remota en una
    clase y su compilación.
  • Obtención de las clases Stub y Skeleton a partir
    de la interface remota.
  • Desarrollo y Compilación de la Aplicación del
    Servidor.
  • Desarrollo y Compilación de la Aplicación del
    Cliente.
  • Ejecución
  • Registro de objetos remotos
  • Iniciar el Servidor
  • Establecer la política de seguridad
  • Iniciar el Cliente.
  • Durante la explicación realizaremos un ejemplo
    tipo Hola, Mundo!.

7
Implementación
  • Diseño de la Interface Remota
  • import java.rmi.
  • public interface ltnombInterfaceRemotagt extends
    Remote
  • // prototipos de los métodos remotos que deben
    lanzar // la excepción RemoteException.
  • Compilación
  • javac ltnombInterfaceRemotagt.java ?
    ltnombInterfaceRemotagt.class
  • Interface de nuestro ejemplo IntSaludo.java
  • import java.rmi.
  • public interface IntSaludo extends Remote
  • // Un método remoto que recibe y devuelve una
    cadena
  • String saludo(String soy) throws
    RemoteException

8
Implementación
  • Implementación de la interface remota
  • import java.rmi.
  • import java.rmi.server.
  • class ltnombClasegt extends UnicastRemoteObject
    implements IntSaludo
  • // El constructor debe invocar al constructor
    de UnicastRemoteObject super()
  • // Se deben implementar los métodos remotos de
    la Interface.
  • Compilación
  • javac ltnombClasegt.java ?
    ltnombClasegt.class
  • En nuestro ejemplo ClsSaludo.java
  • import java.rmi.
  • import java.rmi.server.
  • class ClsSaludo extends UnicastRemoteObject
    implements IntSaludo
  • public ClsSaludo() throws RemoteException
    super()
  • public String saludo(String soy) throws
    RemoteException return Hola soy

9
Implementación
  • Las clases Stub y Skeleton
  • Las clases Stub y Skeleton son obtenidas a partir
    de la clase anterior.
  • Compilador de Java RMI rmic
  • rmic ltnombClasegt ? nombClase_Stub.class
  • nombClase_Skel.class
  • Crear un fichero .jar con las clases
  • jar cvf ltficheroClassgt.jar .class
    ? ltficheroClassgt.jar
  • ? InterfaceRemota.class
  • nombClase.class
  • nombClase_Stub.class
  • nombClase_Skel.class
  • En nuestro Ejemplo jar cvf .class saludo.jar ?
    saludo.jar

10
Implementación
  • La aplicación del servidor
  • import java.rmi.
  • public class ltapServidorgt
  • // Establecer el gestor de seguridad
  • System.setSecurityManager(new
    RMISecurityManager())
  • // Instancias de Objetos Remotos
  • // Registros de Objetos Remotos
  • try
  • nombClase ltobjRemotogt new
    nombClase()
  • Naming.rebind(lturlgt\ltnomObjgt,
    ltobjRemotogt)
  • catch (Exception ex)
  • System.err.println(Error "
    ex.getMessage())
  • e.printStackTrace()

11
Implementación
  • La aplicación del servidor de nuestro Ejemplo
  • import java.rmi.
  • public class apServidor
  • public static void main(String arg)
  • // Establecer el gestor de seguridad
  • System.setSecurityManager(new
    RMISecurityManager())
  • // Instancias de Objetos Remotos
  • // Registros de Objetos Remotos
  • try
  • ClsSaludo objRemoto new
    ClsSaludo()
  • Naming.rebind("//localhost/nomObj",
    objRemoto)
  • System.out.println("Objeto
    Registrado")
  • catch (Exception ex)
  • System.err.println("Error "
    ex.getMessage())
  • ex.printStackTrace()

12
Implementación
  • La aplicación del Cliente
  • import java.rmi.
  • public class ltapClientegt
  • // Obtener la referencia del objeto remoto y
    convertirla al tipo interface remota
  • // invocar métodos remotos
  • try
  • obj (ltInterfaceRemotagt)
    Naming.lookup(lturlgt/ltobjRemotogt")
  • obj.metodoRemoto()
  • catch (Exception e)
  • System.out.println("Excep
    cion " e.getMessage())
  • e.printStackTrace()
  • Compilación javac ltapClientegt.java ? ltapClientegt
    .class

13
Implementación
  • La aplicación del Cliente de nuestro ejemplo
  • import java.rmi.
  • public class apCliente
  • public static void main(String arg)
  • // Obtener la referencia del objeto remoto y
    convertirla al tipo interface remota
  • // invocar métodos remotos
  • try
  • IntSaludo obj (IntSaludo)
    Naming.lookup("//localhost/nomObj")
  • System.out.println(obj.saludo("Jose
    Luis"))
  • catch (Exception e)
  • System.out.println("Excep
    cion " e.getMessage())
  • e.printStackTrace()

14
Ejecución
  • Iniciar el registro de objetos rmiregistry
    (Nota es posible establecer un puerto
    específico)
  • rmiregistry ó mejor start rmiregistry
  • Iniciar el servidor. (supongase que el directorio
    de trabajo es c\ejRMI)
  • Especificar el fichero .jar que contiene las
    clases
  • Establecer la política de seguridad
  • java -Djava.rmi.server.codebasefile/c\ejRMI\lt
    ficheroClassgt.jar
  • -Djava.security.policyltjava.policygt
    ltapServidorgt
  • Fichero para la política de seguridad
  • grant
  • permission java.net.SocketPermission
    "1024-65535", "connect,accept"
  • permission java.net.SocketPermission
    "80", "connect"
  • Iniciar el Cliente java ltapClientegt

15
Ejecución de nuestro ejemplo
  • Registrar Objetos rmiregistry
  • Iniciar Servidor (supongase que el directorio de
    trabajo es c\rmiEj3)
  • java -Djava.rmi.server.codebasefile/c\rmiE
    j3\saludo.jar
  • -Djava.security.policyjava.policy
    apServidor
  • Iniciar Cliente
  • java apCliente

16
Productor - Consumidor
  • Interface Remota
  • public interface IBuffer extends java.rmi.Remote
  • void poner(int num) throws java.rmi.RemoteExcep
    tion
  • int coger() throws java.rmi.RemoteException

17
Productor - Consumidor
  • Implementación Interface Remota
  • class CBuffer extends UnicastRemoteObject
    implements IBuffer
  • private int almacennew int4
  • private int ent, sal, cont
  • public CBuffer() throws RemoteException
  • super()
  • entsalcont0
  • public synchronized void poner(int n)
    throws RemoteException
  • while (cont4) try wait()
    catch(InterruptedException e)
  • almacenentn
  • ent (ent 1) 4cont
  • notify()

18
Productor - Consumidor
  • Cliente productor
  • import java.rmi.
  • class CProductor
  • IBuffer obj
  • void producir()
  • try obj (IBuffer) Naming.lookup("//localhos
    t/ObjBuffer")
  • catch (Exception e)
    System.out.println("Excepcion "
    e.getMessage())
  • for(int i1ilt10i)
  • System.out.println("Quiero Escribir")
  • try obj.poner(d)
  • catch (Exception e)
  • System.out.println("Excepcion "
    e.getMessage())
  • System.out.println("Puesto " i)

19
Productor - Consumidor
  • Cliente Consumidor
  • import java.rmi.
  • class CConsumidor
  • IBuffer objint d
  • void consumir()
  • try obj (IBuffer)Naming.lookup("//localho
    st/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("Exc
    epcion " e.getMessage())
  • System.out.println("Leido " d)
  • while(d!10)

20
Java RMI
  • Invocación Remota de Métodos
Write a Comment
User Comments (0)
About PowerShow.com