PDF de programación - Tecnologías Web: RMI

Imágen de pdf Tecnologías Web: RMI

Tecnologías Web: RMIgráfica de visualizaciones

Publicado el 16 de Febrero del 2021
403 visualizaciones desde el 16 de Febrero del 2021
358,7 KB
77 paginas
Creado hace 18a (27/10/2005)
Sistemas de
Información

Tecnologías de objetos distribuidos: RMI

Agradecimientos: Marisol García Valls, Jesús Villamor Lugo, Simon Pickin de IT/UCIIIM

[email protected]

RMI (Remote Method Invocation)
Concepto ¿Qué es?
RMI (Remote Method Invocation). Procedimiento de

invocación a métodos remotos

Permite a un objeto que se está ejecutando en una MV

invocar métodos de otro que esté en una MV distinta

API de java que facilita la creación de aplicaciones de

objetos distribuidos proporcionando:
Mecanismos de localización,
Facilidades de comunicación
Una semántica para permitir la invocación de métodos remotos

[email protected]

2

RMI (Remote Method Invocation)
Objetivos ¿Para qué sirve?
Permitir invocación de métodos de un objeto por objetos que residen

en diferentes máquinas virtuales (en particular, a través de la red)
permitir invocación de métodos remotos por Applets

Integrar el modelo de objetos distribuidos al lenguaje Java de modo
natural, preservando en lo posible la semántica de objetos en Java
distinción entre objetos locales y remotos
diferentes semánticas en las referencias a objetos remotos:

no persistentes (vivas), persistentes, de activación lenta

Preservar la seguridad de tipos (type safety) dada por el ambiente

de ejecución Java

Mantener la seguridad del ambiente dada por los Security

Managers, en particular, en presencia de carga dinámica de clases

Facilitar el desarrollo de aplicaciones distribuidas

[email protected]

3

RMI (Remote Method Invocation)
Hitos Especificaciones
RMI en JDK-1.1

Introducción de las bibliotecas java.rmi.*
Comunicación por Java Remote Method Protocol (JRMP)

RMI en J2SE SDK 1.2

Referencias de objeto persistentes y objetos activables
No hace falta generar skeletons (reflection + skeletons genéricos)

RMI en J2SE SDK 1.3

Opción de comunicación por IIOP (Internet Inter-ORB Protocol de CORBA)
Uso de un fichero de política de seguridad obligatorio con la activación

RMI en J2SE SDK 1.4

Mejoras en la serialization (secuenciación)

RMI en J2SE SDK 1.5 = J2SE SDK 5.0

Introducción de un tipo de invocación dinámica
hace uso de reflection + stubs genéricos
este mecanismo obvia la compilación con rmic

[email protected]

4

RMI (Remote Method Invocation)
¿Cómo funciona?
El servidor

Crea objetos remotos
Hace accesibles refs a objetos remotos
Espera a que los clientes invoquen a estos

objetos remotos o a sus métodos

El cliente

Obtiene una referencia de uno o más objetos

remotos en el servidor
Invoca a sus métodos

[email protected]

5

RMI (Remote Method Invocation)
¿Cómo funciona?
RMI proporciona al cliente y servidor

Mecanismos de localización (obtención de refs)

Registrar objetos remotos con rmiregistry
Pasar y devolver referencias a objetos remotos

Mecanismos de comunicación

Transparentes para el programador
Semántica similar a una llamada estándar a método

Mecanismos de carga dinámica de clases
Para objetos que se pasan entre C y S bien por

parámetro o como tipo de retorno

[email protected]

6

RMI (Remote Method Invocation)
¿Cómo funciona?

CountRMIClient

CountRMIServer

RMI Stub

Cliente

RMI
sobre
TCP/IP

RMI Skeleton

Servidor

Bus software

[email protected]

7

RMI (Remote Method Invocation)
¿Cómo funciona?: Arquitectura

Niveles

OSI
7

Cliente

Servidor

6

5

4
3

Stubs

Skeletons

Remote Reference Layer

Nivel de Transporte (TCP)

Nivel de Red (IP)

1 y 2

Interfaz Hardware

El Sistema RMI mismo está

formado por 3 niveles
El nivel de los Stubsy Skeletons
La Remote ReferenceLayer
El nivel de Transporte

hoy por hoy basado en TCP

El cliente y el servidor desarrollan

sus aplicaciones en paralelo
El cliente invoca objetos remotos

a través de los stubs

La Red

Los skeletonspermiten hacer

accesibles los objetos servidores
al cliente

[email protected]

8

RMI: ¿Cómo funciona?
Stubs y Skeletons

Objeto
Cliente

Interfaz
remota

Stub

Objeto
Remoto

Interfaz
remota

Skeleton

Red

[email protected]

9

RMI: ¿Cómo funciona?
Interfaces remotas y objetos remotos
Una interfaz remota declara un conjunto de operaciones que

podrán invocarse desde otras JVM.
debe extender java.rmi.Remote
sus métodos deben declarar que lanzan java.rmi.RemoteException

Para que los métodos de una interfaz remota estén disponibles

para ser invocadas desde otras JVM ha de implementar la interfaz
Un objeto remoto es un objeto que implementa una interfaz remota
Un cliente en otra JVM interactúa con un objeto remoto vía una de

sus interfaces remotas, nunca directamente

Habitualmente, la clase de un objeto remoto extiende

java.rmi.server.UnicastRemoteObject

pero puede llamar a su método exportObject() directamente

[email protected]

10

RMI: ¿Cómo funciona?
Los stubs
Un stub de RMI es un proxy

es decir, un representante local de un objeto remoto

Contiene la referencia al objeto remoto
Permite la invocación de sus métodos como si fuera un objeto

local.

En concreto:

recibe las peticiones del llamante
realiza el marshalling (empaquetado de los parámetros),
envía la petición al objeto llamado
en el caso de que haya respuesta:

realiza el unmarshalling
devuelve el valor al llamante

[email protected]

11

RMI: ¿Cómo se usa?

Proceso de Desarrollo

Extender java.rmi.Remote
Implementar interfaz, extendiendo
java.rmi.UnicastRemoteObject
(o llamando a exportObject())
Compilar impl. (.java) con javac
Compilar impl. (.class) con rmic
Arrancar el rmiregistry
Arrancar los objetos del servidor
Registrar los objetos remotos
(llamando a métodos del paquete
java.rmi.Naming para asociar un
nombre con el objeto remoto)
Escribir el código cliente
(llamando a métodos del paquete
java.rmi.Naming para localizar el
objeto remoto)
Compilar el código cliente
Arrancar el cliente

12

1

2

definir una
interfaz remota

implementar
la interfaz

(.java)
3
(.class)
4

javac

rmic

clase

servidora

clase

esqueleto

clase
stub

usa

5

arrancar el
registro RMI

6

arrancar los

objetos servidores

clase
cliente

1.
2.

3.
4.
5.
6.
7.

8.

7

registrar los

objetos remotos

9.
10.

Cliente

Servidor

8

implementar
el cliente
(.java)
9

javac

10

arrancar
el cliente

RMI Ejemplo 1
Paso 1: Definir interfaz remota
Importar paquetes adecuados
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface NombreInt extends Remote{}
public Tipo NombreMet() throws RemoteException;

Lanzar remoteException en todos los métodos

Extender la clase Remote

Ejemplo tomado de:

http://www.programacion.com/java/tutorial/rmi/

[email protected]

13

RMI Ejemplo 1
Paso 1: Definir un interfaz remoto

package compute;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Compute extends Remote {

Object executeTask(Task t) throws RemoteException;

}

[email protected]

14

RMI Ejemplo 1
Paso 1: Definir otros interfaces
Detectar objetos que puedan viajar por tratarse de:

Parámetros de métodos remotos
Tipos de retorno de métodos remotos

Deben extender el interfaz serializable

[email protected]

15

RMI Ejemplo 1
Paso 1: Definir otros interfaces

package compute;
import java.io.Serializable;
public interface Task extends Serializable {

Object execute();

}

[email protected]

16

RMI Ejemplo 1
Paso 2: Implementar interfaz remota
Extender la clase UnicastRemoteObject
Implementar el interfaz remoto definido en el

paso 1

Crear main que realice las siguientes tareas

Crear controlador de seguridad
Crear objeto de la clase remota
Registrar objeto de la case remota

[email protected]

17

RMI Ejemplo 1
Paso 2: Implementar interfaz remoto
package engine;
import java.rmi.*; import java.rmi.server.*; import compute.*;
public class ComputeEngine extends UnicastRemoteObject implements Compute {

public ComputeEngine() throws RemoteException { super();}
public Object executeTask(Task t) { return t.execute(); }
public static void main(String[] args) {

if (System.getSecurityManager() == null) {

System.setSecurityManager(new RMISecurityManager());

} String name = "//localhost/Compute";
try {

Compute engine = new ComputeEngine();
Naming.rebind(name, engine);
System.out.println("ComputeEngine bound");

} catch (Exception e) {
System.err.println("ComputeEngine exception: " + e.getMessage());
e.printStackTrace();

[email protected]

18

}

}

}

RMI Ejemplo 1
Paso 2: Implementar interfaz remoto
package engine;
import java.rmi.*; import java.rmi.server.*; import compute.*;
public class ComputeEngine extends UnicastRemoteObject implements Compute{

public ComputeEngine() throws RemoteException { super();}
public Object executeTask(Task t) { return t.execute(); }
public static void main(String[] args) {

if (System.getSecurityManager() == null) {

public class ComputeEngine extends UnicastRemoteObject
implements Compute{

System.setSecurityManager(new RMISecurityManager());

} String name = "//localhost/Compute";
try {

}

}

}

Compute engine = new ComputeEngine();
Naming.rebind(name, engine);
System.out.println("ComputeEngine bound");

} catch (Exception e) {
System.err.println("ComputeEngine exception: " + e.getMessage());
e.printStackTrace();

[email protected]

19

RMI Ejemplo 1
Paso 2: Impl
  • Links de descarga
http://lwp-l.com/pdf18858

Comentarios de: Tecnologías Web: RMI (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad