Java RMI Remote Method Invocation. Invocación Remota de Métodos en Java



Documentos relacionados
Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU

1. Visión general de RMI

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

en otra máquina exactamente de la misma manera que si se encontrará en la misma máquina

Práctica 2: Java Remote Method Invocation (RMI)

JAVA - Serializacíon / RMI. (C) Philippe Roose , 2005

Modelo de Objetos Distribuidos

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

JAVA RMI (REMOTE METHOD INVOCATION)

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA

Arquitectura Cliente/Servidor. Invocación de Métodos Remotos RMI: Remote Method Invocation. Llamadas a Métodos Remotos

RMI [Remote Method Invocation]

Código Fuente. Creamos en C:\ una carpeta para ubicar el código fuente del servidor. En mi caso, he creado una carpeta denominada rmi4

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2

CONTENIDO. Serialización. Carga dinamica de stubs RMI AVANZADO. Callbacks. Carga dinámica de Stubs

PROGRAMACION DISTRIBUIDA

Ingeniería del Software Arquitectura Física en 3 niveles

5.1 Introducción a las tecnologías de objetos distribuidos con Java RMI

PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI

Práctica 4: Java Remote Method Invocation (RMI)

FSD Práctica Invocación Remota: JavaRMI. Estudio Previo. Información

Sistemas Distribuidos (Capítulo 8 de Distributed Computing de M. L. Liu)

Interacción entre Aplicaciones: objetos distribuidos e invocación remota

CAPITULO 3 ARQUITECTURA DE COMPONENTES GIS EN INTERNET

RMI Remote Method Invocation

Invocación de métodos remotos en Java: JAVA - RMI

Java RMI. Sistemas distribuidos

El servicio de echo en Java-RMI

SISTEMAS DISTRIBUIDOS

Remote Method Invocation (RMI) Basado en: Fundamentals of RMI. Short Course. JGuru.

Una introducción a Java RMI

TEMA 7: Paso de Mensajes con RMI

Remote Method Invocation (RMI) de Java

Tema 3. Objetos distribuidos

TutorJava recomienda...

RMI. Aplicaciones Distribuidas

'HVDUUROORGH$SOLFDFLRQHV FRQ-DYD50,

PROGRAMACIÓN EN JAVA

SISTEMAS DISTRIBUIDOS

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar

Sistemas de Información

Práctica 5: Callbacks RMI.

Práctica 5: Common Object Request Broker Architecture CORBA

GUI A D E I NSTALA CIO N D E AX IS

Práctica sobre compartición de instancias remotas.

1. Sistemas de colas de mensajes 2. Agentes móviles 3. Servicios de red 4. Espacios de objetos

Introducción a Java LSUB. 15 de enero de 2015 GSYC

SISTEMAS DISTRIBUIDOS Profesor: José Luis Montoya Restrepo

Java RMI 2ª PARTE. Factory Pattern para RMI

Java RMI. las RPC de Java. Parte II. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

VII.1: RMI: Remote Method Invocation

Servicios web con SOAP y Eclipse

Componentes Distribuidos EJBs. Ing. Cesar Julio Bustacara Medina

Universidad ORT - Arquitectura de Software. Requisitos

Invocación remota de métodos. Jorge Iván Meza Martínez

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Objetos Distribuidos

Sistemas de colas de mensajes

Ejercicio 4. EJB Sesión - Sistema SGA. Java EE. Ejercicio 4. EJB Sesión Sistema SGA. Curso de Java EE

Seminario de Java. Contenido

Herramientas Concurrentes en JAVA

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

CORBA desde Java. Diego Sevilla Ruiz Sistemas Distribuidos. 1. Introducción

Manual del Protocolo XML-RPC de Mensajería Negocios

Programación Orientada a Objetos. Java: Excepciones

Java en 2 horas. Rodrigo Santamaría

Benemérita Universidad Autónoma del Estado de Puebla

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Cliente/Servidor en Java

Tema 4: INVOCACIÓN REMOTA

TEMA 5: Control de la Concurrencia en Java (API Estándar)

Primera Escuela de la Red Temática SVO. Madrid, Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta.

Programación Concurrente en Java

1 HILOS (THREADS) EN JAVA

Programación Orientada a Objetos. Java: Excepciones

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

J2SE , Grupo Salenda, S.L.

Federico Peinado

Invocación de Métodos Remotos: prácticas de laboratorio

PROGRAMACION DISTRIBUIDA

Transcripción:

Java RMI Remote Method Invocation Invocación Remota de Métodos en Java

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.

Introducción Programación Distribuida Modelo cliente-servidor Servidor Cliente Cliente

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

Introducción Arquitectura RMI Cliente Servidor Interface Remota Stub Aplicación Cliente Implementación Interface Remota Skeleton Aplicación Servidor Registra Objetos

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!.

Implementación Diseño de la Interface Remota import java.rmi.*; public interface <nombinterfaceremota> extends Remote { // prototipos de los métodos remotos que deben lanzar // la excepción RemoteException. Compilación javac <nombinterfaceremota>.java <nombinterfaceremota>.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;

Implementación Implementación de la interface remota import java.rmi.*; import java.rmi.server.*; class <nombclase> 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 <nombclase>.java <nombclase>.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;

Implementación Las clases Stub y Skeleton // ojo sólo 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> nombclase_stub.class nombclase_skel.class Crear un fichero.jar con las clases jar cvf <ficheroclass>.jar *.class <ficheroclass>.jar InterfaceRemota.class nombclase.class nombclase_stub.class nombclase_skel.class En nuestro Ejemplo jar cvf *.class saludo.jar saludo.jar

Implementación La aplicación del servidor import java.rmi.*; public class <apservidor> { // 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(); Compilación: javac <apservidor>.java <apservidor>.class

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();

Implementación La aplicación del Cliente import java.rmi.*; public class <apcliente> { // Obtener la referencia del objeto remoto y convertirla al tipo interface remota // invocar métodos remotos try { obj = (<InterfaceRemota>) Naming.lookup( <url>/<objremoto>"); obj.metodoremoto(); catch (Exception e) { System.out.println("Excepcion: " + e.getmessage()); e.printstacktrace(); Compilación: javac <apcliente>.java <apcliente>.class

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("Excepcion: " + e.getmessage()); e.printstacktrace();

Pasos previos a la ejecución El bin de java debe estar en el path: c:\set path= c:\archivo deprogramas\java\jdk1.5.0\bin Deben compilarse los fuentes en el entorno o usando linea de comando: javac *.java Producirá un.class por cada clase fuente en el servidor y en el cliente (si son maquinas distintas) 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

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.codebase=file:/c:\ejRMI\<ficheroClass>.jar -Djava.security.policy=<java.policy> <apservidor> Fichero para la política 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 sólo esta línea: grant { permission java.security.allpermission; ; Iniciar el Cliente: java <apcliente>

Ejecución de nuestro ejemplo Registrar Objetos: start rmiregistry Iniciar Servidor: (supongase que el directorio de trabajo es c:\rmiej3) Iniciar Cliente java -Djava.rmi.server.codebase=file:/c:\rmiEj3\saludo.jar -Djava.security.policy=java.policy apservidor java apcliente

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;

Productor - Consumidor Implementación Interface Remota class CBuffer extends UnicastRemoteObject implements IBuffer { private int almacen[]=new int[4]; private int ent, sal, cont; public CBuffer() throws RemoteException { super(); ent=sal=cont=0; public synchronized void poner(int n) throws RemoteException { while (cont==4) try { wait(); catch(interruptedexception e) { almacen[ent]=n; ent = (ent + 1) % 4;cont++; notify(); public synchronized int coger() throws RemoteException { while (cont==0) try { wait(); catch(interruptedexception e) { int o = almacen[sal]; sal = (sal + 1) % 4;cont--; notify(); return o;

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();

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();

Java RMI Invocación Remota de Métodos