PDF de programación - JavaRMI

<<>>
Imágen de pdf JavaRMI

JavaRMIgráfica de visualizaciones

Publicado el 17 de Enero del 2019
629 visualizaciones desde el 17 de Enero del 2019
361,1 KB
20 paginas
+

Java RMI
Sistemas Distribuidos

Rodrigo Santamaría

+ Java RMI

•  RMI
•  Java RMI

2

+

RMI

3

l  Remote Method Invocation: middleware para que un
objeto que se ejecuta en una JVM use métodos de otro
objeto que se ejecuta en otra JVM (local o remota)
l  Un paso más allá de los sockets

l 

Introducción a RMI y tutorial:
l  http://download.oracle.com/javase/tutorial/rmi/overview.html

l  Tutorial de sockets:

l  http://download.oracle.com/javase/tutorial/networking/sockets/

clientServer.html

+

RMI
Aplicación

4

l  Aplicación basada en RMI

l  Dos fases fundamentales

l  Localizar objetos remotos

  Registrados mediante el registro RMI
  Pasados por referencia en invocaciones remotas

l  Comunicarse con objetos remotos

  Gestionado por el servidor RMI, para el usuario es como

llamar a métodos locales



+

RMI vs Sockets

5

RMI

Sockets

n  Invocación de objetos remotos

n  Invocación de métodos remotos

n  Sencillo

n  Complicado

n  No hay un protocolo

n  Necesidad de un protocolo

n  Genera mucho tráfico

n  Stub+registro+objetos

n  Genera poco tráfico

En el fondo, RMI = Sockets + Serialización + Algunas utilidades

+

RMI
Implementación

6

1.  Definir interfaz con los métodos remotos

n  Será conocida por cliente y servidor

2.  Implementar el servidor

1.  El elemento que dará el servicio de la interfaz

3.  Instanciar el servidor y registrarlo mediante un stub:

n  Referencia remota al servidor generada por RMI para el uso

de los clientes

4.  Implementar el cliente que usará el servicio

+ Java RMI

•  RMI
•  Java RMI

7

+

Java RMI
Implementación

8

1.  Interfaz: clase que extiende java.rmi.Remote

2.  Servidor: clase que implementa la interfaz

n  Puede tener más métodos que los de la interfaz

3.  Stub: instancia de la interfaz asociada a un servidor

n  Sólo contiene los métodos de la interfaz
n  Es la que se registra en RMI

4.  Cliente: cualquier clase que localice el stub y use su

interfaz

+

Java RMI
Esquema

pepe.usal.es

Interfaz

9

1) Publicación

maria.usal.es

Interfaz

2) Implementación

Cliente

4) Uso

b
u
t
S

3) Registro

Servicio

+

Java RMI
Interfaz

10

/**
* Interfaz para un servicio RMI de corredores de bolsa
* Debe heredar de java.rmi.Remote
* Debe manejar RemoteException en sus métodos
*/
public interface Corredor extends Remote
{
String listarTitulos() throws RemoteException;
void comprar(String nombre, int cantidad) throws RemoteException;
void vender(String nombre, int cantidad) throws RemoteException;
}

+

Java RMI
Interfaz: publicación

11

n  La interfaz debe ser accesible a cliente y servidor

n  La interfaz debe ser idéntica en ambos extremos

n  Tres formas de publicación

n  Como clases sin compilar (ficheros .java)

n  Si los compiladores o los ficheros no son iguales, dará error

n  Como clases compiladas (ficheros .class)

n  Si las versiones de java no son iguales, puede dar error

n  Como archivo .jar
n  La mejor opción:

cd /home/usuario/workspace/rmiInterface/src
javac rmiInterface/Corredor.java
jar cvf bolsaInterface.jar rmiInterface/*.class

+

Java RMI
Interfaz: codebase

12

n  Lugar desde el que se cargan las clases en la JVM

n  P. ej. el CLASSPATH es un codebase “local”

n  El codebase “remoto” se usa para acceder a las clases desde

applets o RMI, mediante URLs

n  El codebase se puede modificar

n  Como argumento de la JVM: -Djava.rmi.codebase="url"
n  Desde el código:

n  System.setProperty("java.rmi.server.codebase", "url");

n  En Java RMI, la url del codebase debe apuntar a la

localización de las interfaces compartidas

+

Java RMI
Interfaz: URLs

13

n  En el caso de una carpeta con clases (.java o .class), se

referencia la carpeta:
n  "file:///Users/rodri/Documents/workspace/assoo/bin/"

n  En el caso de un único fichero, lo referenciamos directamente

n  "file:///Users/rodri/Documents/workspace/interface.jar"

n  En teoría, nuestra interfaz podría estar publicada y acceder a

ella mediante una url remota:

n  "http://vis.usal.es/rodrigo/documentos/aso/rmi/interface.jar"

n  Sin embargo, muchas implementaciones de RMI no lo soportan o

requieren reconfiguraciones del registro

14

+

Java RMI
Servidor y Stub
/**
* Servidor de bolsa que implementa Corredor
* Debe implementar una interfaz de java.rmi.Remote
*
*/
public class Bolsa implements Corredor
{
String listarTitulos() throws RemoteException
{...}
void comprar(String nombre, int cantidad) throws RemoteException;
{...}
void vender(String nombre, int cantidad) throws RemoteException;
{...}
//Cualquier otra función interna que sea necesaria
}

//Registramos un objeto Bolsa de nombre “LaBolsa”
String nombre="LaBolsa";
Corredor motor=new Bolsa();
Corredor stub=(Corredor) UnicastRemoteObject.exportObject(motor,0);
Registry registro=LocateRegistry.getRegistry();
registro.rebind(nombre,stub);


+

Java RMI
Stub: registro

15

n  Para poder registrar el stub al nombre de servicio, debe

estar activado el registro RMI (rmiregistry)

n  Tres maneras:

l  Desde un terminal con

  rmiregistry [port]

l  Desde java con

  Runtime.getRuntime().exec("rmiregistry");

l  Desde java con

  LocateRegistry.createRegistry(int port);

l  Cuidado: no iniciar un registro si ya hay otro corriendo


+

Java RMI
Stub: registro

16

n  Dos modos de asociar un stub a un registro desde Java:

n  Mediante java.rmi.registry.Registry

n  Registry registro=LocateRegistry.getRegistry();
n  registro.rebind(nombre,stub);

n  Mediante java.rmi.Naming

n  Naming.rebind(nombre, stub)

+

Java RMI
Cliente

17

public class Cliente
{
public static void main(String args[])
{
try
{
String nombre="LaBolsa";
//Instanciar el registro RMI
Registry registro=LocateRegistry.getRegistry(args[0]);
//Instanciar un objeto de la clase del servidor
Corredor corredor=(Corredor) registro.lookup(nombre);
//Uso del servicio
...
}
catch (Exception e)
{
System.err.println("Excepción en el cliente de la bolsa:");
e.printStackTrace();
}
}
}

18

+

Java RMI
Cliente: búsqueda

n  Dos modos de buscar el stub de un servicio:

n  Mediante java.rmi.registry.Registry

n  Registry registro=LocateRegistry.getRegistry();
n  registro.lookup(nombre);
n  Mediante java.rmi.Naming

n  Naming.lookup(nombre)

+

Java RMI
Gestor de seguridad

19

l  Si nuestra interfaz contiene métodos que requieren como

argumentos o devuelven clases distintas del API de Java, hay
que implementar un gestor de seguridad
l  Para evitar intrusiones de código maligno

l  Para activar el gestor:
if (System.getSecurityManager()==null)
System.setSecurityManager(new SecurityManager());

l  Podemos modificar la política de seguridad de Java con

un fichero de permisos con líneas como:

grant{ permission java.security.AllPermission; };

  Y especificar el fichero con la opción de la JVM

l  -Djava.security.policy=grantFilePath

20
  • Links de descarga
http://lwp-l.com/pdf14875

Comentarios de: JavaRMI (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