SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
Tema 6
Invocación de métodos remotos en Java
(RMI)
Sistemas Distribuidos
Grado en Ingeniería Informática
Universidad Carlos III de Madrid
F. García Carballeira, Sistemas Distribuidos
Modelo de objetos en sistemas distribuidos
2
Máquina A Máquina B Máquina C
F. García Carballeira, Sistemas Distribuidos
Invocación de métodos remotos
3
§ Primera aproximación al uso de un
modelo orientado a objetos sobre aplicaciones
distribuidas
§ Objetos distribuidos dentro de una red
} Los objetos proporcionan métodos,
los cuales dan acceso a los servicios
§ Ejemplo:
q Remote method invocation (RMI) de Java
q CORBA Common Object Request Broker Adapter
} Ofrece interfaces de programación independientes de la plataforma y
modelos para aplicaciones portables basadas en objetos distribuidos.
F. García Carballeira, Sistemas Distribuidos
Remote method invocation (Java RMI)
4
} Modelo equivalente a
las llamadas a procedimientos remotos
} Proceso invoca un método local de otro proceso
} Se envían tanto los argumentos del método
como el valor devuelto por el mismo
método1
método2
Proceso 1
Proceso 2
Objeto remoto
RMI
F. García Carballeira, Sistemas Distribuidos
} El soporte para RMI en Java está basado en las interfaces y clases definidas
en los paquetes java.rmi y java.rmi.server.
} RMI ofrece:
} Mecanismos para crear servidores y objetos cuyos métodos se puedan
invocar remotamente.
} Mecanismos que permiten a los clientes localizar los objetos remotos.
} Servicio de directorios:
} rmiregistry, servicio de directorios de Java
} Se ejecuta en la máquina servidor objeto
Java RMI (Remote Method Invocation)
5
F. García Carballeira, Sistemas Distribuidos
Java RMI (Remote Method Invocation)
6
F. García Carballeira, Sistemas Distribuidos
Comparación RMI y sockets
7
} Ventajas:
} Los programas RMI son
más sencillos de diseñar
} Servidor RMI concurrente
} Inconvenientes:
} Sockets tienen menos sobrecarga
} RMI sólo para plataformas Java
F. García Carballeira, Sistemas Distribuidos
Arquitectura de Java RMI
8
stub
Referencia remota
Transporte
skeleton
Referencia remota
Transporte
Ruta de datos lógica
Ruta de datos física
Cliente de
objetos
Servidor
de objetos
Servicio de directorios
F. García Carballeira, Sistemas Distribuidos
Arquitectura de RMI
9
} Nivel de stub
} Se encarga del aplanamiento de los parámetros.
} Stub: proxy local. Cuando un cliente realiza una invocación remota,
en realidad hace una invocación de un método de un objeto proxy
} Nivel de gestión de referencias remotas
} Interpreta y gestiona las referencias a objetos remotos.
} Invoca operaciones de la capa de transporte.
} Nivel de transporte
} Se encarga de las comunicaciones y
de establecer las conexiones necesarias.
} Basada en protocolo TCP.
stub
Referencia remota
Transporte
skeleton
Referencia remota
Transporte
Cliente de
objetos
Servidor
de objetos
Servicio de directorios
F. García Carballeira, Sistemas Distribuidos
Arquitectura de RMI
10
skeleton
empaquetamiento
Envío petición
desempaquetamiento
Invoca método
Método
Remoto
Ejecución del código
Devuelve valor
Recibe el valor retorno
empaquetamiento
Envía la respuesta
desempaquetamiento
Devuelve el valor retorno
tiempo
stub
cliente
llamada a método
remoto
F. García Carballeira, Sistemas Distribuidos
Diseño de aplicaciones RMI
11
javac
(.java)
1
2
3
4
10
9
5
6
7
8
(.java)
usa
Cliente
Ejectuar
Cliente
(.class)
CLIENTE SERVIDOR
(.class)
Esqueleto
(.class)
Implementación de la
interfaz remota
stub
(.class)
Servidor
(.class)
Arrancar RMIRegistry
Crear los objetos
Registrar los objetos
javac
rmic
Definición de la
interfaz remota
F. García Carballeira, Sistemas Distribuidos
Diseño de aplicaciones RMI
12
javac
(.java)
1
2
3
4
10
9
5
6
7
8
(.java)
usa
Cliente
Ejectuar
Cliente
(.class)
CLIENTE SERVIDOR
(.class)
Esqueleto
(.class)
stub
(.class)
Servidor
(.class)
Arrancar RMIRegistry
Crear los objetos
Registrar los objetos
javac
rmic
Definición de la
interfaz remota
Implementación de la
interfaz remota
F. García Carballeira, Sistemas Distribuidos
Diseño de aplicaciones RMI
13
} Interfaz remota:
} Clase que sirve de plantilla para otras clases.
import java.rmi.*;
public interface SomeInterface extends Remote {
// Cabecera del primer método remoto
public String someMethod1( )
throws java.rmi.RemoteException;
// Cabecera del segundo método remoto
public int someMethod2( float parameter) throws
java.rmi.RemoteException;
}
F. García Carballeira, Sistemas Distribuidos
Diseño de aplicaciones RMI
14
} Implementación de la interfaz remota
} Realizado por el servidor
import java.rmi.*;
import java.rmi.server.*;
public class SomeImpl extends UnicastRemoteObject
implements SomeInterface
{
public SomeImpl() throws RemoteException { super( ); }
public String someMethod1( ) throws RemoteException
{ /* Código fuente */ }
public int someMethod2(float a) throws RemoteException
{ /* Código fuente */ }
}
F. García Carballeira, Sistemas Distribuidos
Diseño de aplicaciones RMI
15
UnicastRemoteObject
SomeInterface
SomeImpl
Method1
Method2
Method2
Method1
...
...
F. García Carballeira, Sistemas Distribuidos
Diseño de aplicaciones RMI
16
javac
(.java)
1
2
3
4
10
9
5
6
7
8
(.java)
usa
Ejectuar
Cliente
(.class)
CLIENTE SERVIDOR
(.class)
Implementación de la
interfaz remota
Arrancar RMIRegistry
Crear los objetos
Registrar los objetos
javac
Definición de la
interfaz remota
rmic
Cliente
Esqueleto
(.class)
stub
(.class)
Servidor
(.class)
F. García Carballeira, Sistemas Distribuidos
Diseño de aplicaciones RMI
17
} Diseño por parte del servidor:
} Implementación de la interfaz remota
} Generar el stub y el esqueleto
# rmic SomeImpl
# ls SomeImp*.class
!
"#$%&$'()*+%(,-(.**
"#$%&$'()*/01,-(.**
nombre de la clase de la implementación de la interface remota
F. García Carballeira, Sistemas Distribuidos
Invocación remota
18
Servidor de objetos
SomeInterface.class
SomeImpl.class
SomeServer.class
Skel.class
SomeClient.class
Cliente de objetos
SomeInterface.class
Stub.class
F. García Carballeira, Sistemas Distribuidos
Diseño de aplicaciones RMI
19
javac
(.java)
1
2
3
4
10
9
5
6
7
8
(.java)
usa
Ejectuar
Cliente
(.class)
CLIENTE SERVIDOR
(.class)
Esqueleto
(.class)
Implementación de la
interfaz remota
stub
(.class)
Arrancar RMIRegistry
Crear los objetos
Registrar los objetos
javac
rmic
Definición de la
interfaz remota
Servidor
(.class)
Cliente
F. García Carballeira, Sistemas Distribuidos
Plantilla de clase de servidor de objeto
20
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
public class SomeServer {
public static void main(String args[]) {
try{
SomeImpl exportedObj = new SomeImpl();
int portNum=1099;
startRegistry(portNum);
registryURL = "rmi://localhost:"+portNum+"/some";
Naming.rebind(registryURL, exportedObj);
System.out.println("Some Server ready.");
}
}
catch (Exception ex) {
System.out.println(“Exception: “+ex);
}
F. García Carballeira, Sistemas Distribuidos
Plantilla de clase de servidor de objeto
21
private static void startRegistry(int RMIPortNum)
throws RemoteException
{
try {
Registry registry= LocateRegistry.getRegistry(RMIPortNum);
registry.list( );
}
catch (RemoteException ex)
{
System.out.println("RMI registry cannot be located at port" + RMIPortNum);
Registry registry= LocateRegistry.createRegistry(RMIPortNum);
System.out.println("RMI registry created at port " + RMIPortNum);
}
}
Alternativa: activar el registro manualmente con
rmiregistry <número de puerto>
F. García Carballeira, Sistemas Distribuidos
Plantilla de clase de cliente de objeto
22
import java.rmi.*;
public class SomeClient
{
public static void main(String args[])
{
try {
int portNum=1099;
String registryURL ="rmi://serverhost:" + portNum + "/some";
SomeInterface h = (SomeInterface)Naming.lookup(registryURL);
String message = h.someMethod1();
System.out.println(message);
}
catch (Exception e) {
System.out.println("Exception in SomeClient: " + e);
}
}
}
F. García Carballeira, Sistemas Distribuidos
Invocación remota
23
Cliente
Servidor
rmiregistry
RMI
RMI RMI
Máquina 1
Máquina 2
F. García Carballeira, Sistemas Distribuidos
Ejemplo (RMI)
24
resultado = 7
F. García Carballeira, Sistemas Distribuidos
Modelización de la interfaz remota
(Sumador)
25
public interface Sumador
extends java.rmi.Remote
{
public int sumar(int a, int b)
throws java.rmi.RemoteException;
public int restar(int a, int b)
throws java.rmi.RemoteException;
}
F. García Carballeira, Sistemas Distribuidos
Clase que implementa la interfaz
(SumadorImpl)
26
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
public class SumadorImpl
extends UnicastRemoteObject implements Sumador {
public SumadorImpl(String name) throws RemoteException {
super();
try {
System.out.println("Rebind objeto " + name);
Naming.rebind(name, this);
} catch (Exception e) {
System.out.println("Exception: " + e.getMessage());
e.printStackTrace();
}
}
public int sumar (int a, int b) throws RemoteException
{ return a + b; }
public int restar (int a, int b) throws RemoteException
{ return a - b; }
}
F. García Carballeira, Sistemas Distribuidos
Registro del servicio
27
} Cualquier programa que quiera instanciar
un objeto de esta clase debe realizar el registro
con el servicio de nombrado. Ejemplo:
Naming.rebind(name, this);
} Antes de arrancar el cliente y el servidor,
se debe arrancar el programa rmiregistry
en el servidor para el servicio de nombres.
F. García Carballeira, Sistemas Distribuidos
Código del servidor
(SumadorServer)
28
import java.rmi.*;
import java.rmi.server.UnicastRemoteobjeto;
public class SumadorImpl
extends UnicastRemoteobjeto implements Sumador {
public SumadorImpl(String name)
throws RemoteException {
super();
try {
System.out.println("Rebind objeto " + name);
Naming.rebind(name, this);
}
import java.rmi.*;
import java.rmi.server.*;
public class SumadorServer {
public static void main (String args[]) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
try{
SumadorImpl misuma = new SumadorImpl("MiSumador");
} catch(Exception excr) {
System.out.println("Excepcion: "+excr);
}
}
}
F. García Carballeira, Sistemas Distribuidos
Código en el cliente
(SumadorCliente)
29
public interface Sumador
extends java.rmi.Remote
{
public int sumar(int a, int b)
throws java.rmi.RemoteException;
}
import java.rmi.*;
public class SumadorClient {
public static void main(String args[]) {
int res = 0;
try {
System.out.println("Buscando Objeto ");
Sumador misuma = (Sumador)Naming.lookup(
"rmi://" + args[0] + "/" +"MiSumador");
res = misuma.sumar(5, 2);
System.out.println("5 + 2 = " + res);
} catch(Exception e) {
System.err.println(" System exception");
}
System.exit(0);
}
}
host
F. García Carballeira, Sistemas Distribuidos
¿Cómo se ejecuta?
30
1. Compilación
n javac Sumador.java
n javac SumadorImpl.java
n javac SumadorClient.java
n javac Sumador Server.java
2. Generación de los esqueletos
n rmic SumadorImpl
3. Copiar SumadorImpl_Stub.class e
interfaz remota a clientes
4. Ejecución del programa de registro de RMI
n rmiregistry &
5. Ejecución del servidor
n java -classpath . -Djava.security.policy=./policy SumadorServer
6. Ejecución del cliente
n java SumadorClient <host-del-servidor>
F. García Carballeira, Sistemas Distribuidos
policy
grant {
// Allow everything for now
permission java.security.AllPermission;
};
31

Más contenido relacionado

Similar a Tema RMI en java e invocación utilizando

Remote Procedure Call (RPC)
Remote Procedure Call (RPC)Remote Procedure Call (RPC)
Remote Procedure Call (RPC)
Taty Millan
 

Similar a Tema RMI en java e invocación utilizando (20)

Java Rmi
Java RmiJava Rmi
Java Rmi
 
Java Rmi
Java  RmiJava  Rmi
Java Rmi
 
Java Rmi[1]
Java  Rmi[1]Java  Rmi[1]
Java Rmi[1]
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es Vietnam
 
RMI
RMIRMI
RMI
 
Mq conceptos y programacion as400
Mq conceptos y programacion as400Mq conceptos y programacion as400
Mq conceptos y programacion as400
 
Comandos de red
Comandos de redComandos de red
Comandos de red
 
Comunicación distribuida
Comunicación distribuidaComunicación distribuida
Comunicación distribuida
 
Comunicación distribuida
Comunicación distribuidaComunicación distribuida
Comunicación distribuida
 
RPC
RPCRPC
RPC
 
Networking
NetworkingNetworking
Networking
 
COMUNICACIÓN DISTRIBUIDA
COMUNICACIÓN DISTRIBUIDACOMUNICACIÓN DISTRIBUIDA
COMUNICACIÓN DISTRIBUIDA
 
Remote Procedure Call (RPC)
Remote Procedure Call (RPC)Remote Procedure Call (RPC)
Remote Procedure Call (RPC)
 
Materiales del curso de Symfony2
Materiales del curso de Symfony2Materiales del curso de Symfony2
Materiales del curso de Symfony2
 
RMI en java
RMI en javaRMI en java
RMI en java
 
algorimo distribuidos
algorimo distribuidosalgorimo distribuidos
algorimo distribuidos
 
Rmi
RmiRmi
Rmi
 
Curso: Redes y telecomunicaciones 08 Redes LAN
Curso: Redes y telecomunicaciones 08 Redes LANCurso: Redes y telecomunicaciones 08 Redes LAN
Curso: Redes y telecomunicaciones 08 Redes LAN
 
CQRS .NET Conf Chile 2018
CQRS .NET Conf Chile 2018CQRS .NET Conf Chile 2018
CQRS .NET Conf Chile 2018
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 

Último

NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
BRAYANJOSEPTSANJINEZ
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
CristhianZetaNima
 
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfLA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
bcondort
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptx
bingoscarlet
 

Último (20)

NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
 
Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdf
 
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
 
nomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesnomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestaciones
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdf
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
 
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfLA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
 
Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajas
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptx
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdf
 
osciloscopios Mediciones Electricas ingenieria.pdf
osciloscopios Mediciones Electricas ingenieria.pdfosciloscopios Mediciones Electricas ingenieria.pdf
osciloscopios Mediciones Electricas ingenieria.pdf
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docx
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdf
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
clasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesclasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias locales
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 

Tema RMI en java e invocación utilizando

  • 1. Tema 6 Invocación de métodos remotos en Java (RMI) Sistemas Distribuidos Grado en Ingeniería Informática Universidad Carlos III de Madrid
  • 2. F. García Carballeira, Sistemas Distribuidos Modelo de objetos en sistemas distribuidos 2 Máquina A Máquina B Máquina C
  • 3. F. García Carballeira, Sistemas Distribuidos Invocación de métodos remotos 3 § Primera aproximación al uso de un modelo orientado a objetos sobre aplicaciones distribuidas § Objetos distribuidos dentro de una red } Los objetos proporcionan métodos, los cuales dan acceso a los servicios § Ejemplo: q Remote method invocation (RMI) de Java q CORBA Common Object Request Broker Adapter } Ofrece interfaces de programación independientes de la plataforma y modelos para aplicaciones portables basadas en objetos distribuidos.
  • 4. F. García Carballeira, Sistemas Distribuidos Remote method invocation (Java RMI) 4 } Modelo equivalente a las llamadas a procedimientos remotos } Proceso invoca un método local de otro proceso } Se envían tanto los argumentos del método como el valor devuelto por el mismo método1 método2 Proceso 1 Proceso 2 Objeto remoto RMI
  • 5. F. García Carballeira, Sistemas Distribuidos } El soporte para RMI en Java está basado en las interfaces y clases definidas en los paquetes java.rmi y java.rmi.server. } RMI ofrece: } Mecanismos para crear servidores y objetos cuyos métodos se puedan invocar remotamente. } Mecanismos que permiten a los clientes localizar los objetos remotos. } Servicio de directorios: } rmiregistry, servicio de directorios de Java } Se ejecuta en la máquina servidor objeto Java RMI (Remote Method Invocation) 5
  • 6. F. García Carballeira, Sistemas Distribuidos Java RMI (Remote Method Invocation) 6
  • 7. F. García Carballeira, Sistemas Distribuidos Comparación RMI y sockets 7 } Ventajas: } Los programas RMI son más sencillos de diseñar } Servidor RMI concurrente } Inconvenientes: } Sockets tienen menos sobrecarga } RMI sólo para plataformas Java
  • 8. F. García Carballeira, Sistemas Distribuidos Arquitectura de Java RMI 8 stub Referencia remota Transporte skeleton Referencia remota Transporte Ruta de datos lógica Ruta de datos física Cliente de objetos Servidor de objetos Servicio de directorios
  • 9. F. García Carballeira, Sistemas Distribuidos Arquitectura de RMI 9 } Nivel de stub } Se encarga del aplanamiento de los parámetros. } Stub: proxy local. Cuando un cliente realiza una invocación remota, en realidad hace una invocación de un método de un objeto proxy } Nivel de gestión de referencias remotas } Interpreta y gestiona las referencias a objetos remotos. } Invoca operaciones de la capa de transporte. } Nivel de transporte } Se encarga de las comunicaciones y de establecer las conexiones necesarias. } Basada en protocolo TCP. stub Referencia remota Transporte skeleton Referencia remota Transporte Cliente de objetos Servidor de objetos Servicio de directorios
  • 10. F. García Carballeira, Sistemas Distribuidos Arquitectura de RMI 10 skeleton empaquetamiento Envío petición desempaquetamiento Invoca método Método Remoto Ejecución del código Devuelve valor Recibe el valor retorno empaquetamiento Envía la respuesta desempaquetamiento Devuelve el valor retorno tiempo stub cliente llamada a método remoto
  • 11. F. García Carballeira, Sistemas Distribuidos Diseño de aplicaciones RMI 11 javac (.java) 1 2 3 4 10 9 5 6 7 8 (.java) usa Cliente Ejectuar Cliente (.class) CLIENTE SERVIDOR (.class) Esqueleto (.class) Implementación de la interfaz remota stub (.class) Servidor (.class) Arrancar RMIRegistry Crear los objetos Registrar los objetos javac rmic Definición de la interfaz remota
  • 12. F. García Carballeira, Sistemas Distribuidos Diseño de aplicaciones RMI 12 javac (.java) 1 2 3 4 10 9 5 6 7 8 (.java) usa Cliente Ejectuar Cliente (.class) CLIENTE SERVIDOR (.class) Esqueleto (.class) stub (.class) Servidor (.class) Arrancar RMIRegistry Crear los objetos Registrar los objetos javac rmic Definición de la interfaz remota Implementación de la interfaz remota
  • 13. F. García Carballeira, Sistemas Distribuidos Diseño de aplicaciones RMI 13 } Interfaz remota: } Clase que sirve de plantilla para otras clases. import java.rmi.*; public interface SomeInterface extends Remote { // Cabecera del primer método remoto public String someMethod1( ) throws java.rmi.RemoteException; // Cabecera del segundo método remoto public int someMethod2( float parameter) throws java.rmi.RemoteException; }
  • 14. F. García Carballeira, Sistemas Distribuidos Diseño de aplicaciones RMI 14 } Implementación de la interfaz remota } Realizado por el servidor import java.rmi.*; import java.rmi.server.*; public class SomeImpl extends UnicastRemoteObject implements SomeInterface { public SomeImpl() throws RemoteException { super( ); } public String someMethod1( ) throws RemoteException { /* Código fuente */ } public int someMethod2(float a) throws RemoteException { /* Código fuente */ } }
  • 15. F. García Carballeira, Sistemas Distribuidos Diseño de aplicaciones RMI 15 UnicastRemoteObject SomeInterface SomeImpl Method1 Method2 Method2 Method1 ... ...
  • 16. F. García Carballeira, Sistemas Distribuidos Diseño de aplicaciones RMI 16 javac (.java) 1 2 3 4 10 9 5 6 7 8 (.java) usa Ejectuar Cliente (.class) CLIENTE SERVIDOR (.class) Implementación de la interfaz remota Arrancar RMIRegistry Crear los objetos Registrar los objetos javac Definición de la interfaz remota rmic Cliente Esqueleto (.class) stub (.class) Servidor (.class)
  • 17. F. García Carballeira, Sistemas Distribuidos Diseño de aplicaciones RMI 17 } Diseño por parte del servidor: } Implementación de la interfaz remota } Generar el stub y el esqueleto # rmic SomeImpl # ls SomeImp*.class ! "#$%&$'()*+%(,-(.** "#$%&$'()*/01,-(.** nombre de la clase de la implementación de la interface remota
  • 18. F. García Carballeira, Sistemas Distribuidos Invocación remota 18 Servidor de objetos SomeInterface.class SomeImpl.class SomeServer.class Skel.class SomeClient.class Cliente de objetos SomeInterface.class Stub.class
  • 19. F. García Carballeira, Sistemas Distribuidos Diseño de aplicaciones RMI 19 javac (.java) 1 2 3 4 10 9 5 6 7 8 (.java) usa Ejectuar Cliente (.class) CLIENTE SERVIDOR (.class) Esqueleto (.class) Implementación de la interfaz remota stub (.class) Arrancar RMIRegistry Crear los objetos Registrar los objetos javac rmic Definición de la interfaz remota Servidor (.class) Cliente
  • 20. F. García Carballeira, Sistemas Distribuidos Plantilla de clase de servidor de objeto 20 import java.rmi.*; import java.rmi.server.*; import java.rmi.registry.Registry; import java.rmi.registry.LocateRegistry; public class SomeServer { public static void main(String args[]) { try{ SomeImpl exportedObj = new SomeImpl(); int portNum=1099; startRegistry(portNum); registryURL = "rmi://localhost:"+portNum+"/some"; Naming.rebind(registryURL, exportedObj); System.out.println("Some Server ready."); } } catch (Exception ex) { System.out.println(“Exception: “+ex); }
  • 21. F. García Carballeira, Sistemas Distribuidos Plantilla de clase de servidor de objeto 21 private static void startRegistry(int RMIPortNum) throws RemoteException { try { Registry registry= LocateRegistry.getRegistry(RMIPortNum); registry.list( ); } catch (RemoteException ex) { System.out.println("RMI registry cannot be located at port" + RMIPortNum); Registry registry= LocateRegistry.createRegistry(RMIPortNum); System.out.println("RMI registry created at port " + RMIPortNum); } } Alternativa: activar el registro manualmente con rmiregistry <número de puerto>
  • 22. F. García Carballeira, Sistemas Distribuidos Plantilla de clase de cliente de objeto 22 import java.rmi.*; public class SomeClient { public static void main(String args[]) { try { int portNum=1099; String registryURL ="rmi://serverhost:" + portNum + "/some"; SomeInterface h = (SomeInterface)Naming.lookup(registryURL); String message = h.someMethod1(); System.out.println(message); } catch (Exception e) { System.out.println("Exception in SomeClient: " + e); } } }
  • 23. F. García Carballeira, Sistemas Distribuidos Invocación remota 23 Cliente Servidor rmiregistry RMI RMI RMI Máquina 1 Máquina 2
  • 24. F. García Carballeira, Sistemas Distribuidos Ejemplo (RMI) 24 resultado = 7
  • 25. F. García Carballeira, Sistemas Distribuidos Modelización de la interfaz remota (Sumador) 25 public interface Sumador extends java.rmi.Remote { public int sumar(int a, int b) throws java.rmi.RemoteException; public int restar(int a, int b) throws java.rmi.RemoteException; }
  • 26. F. García Carballeira, Sistemas Distribuidos Clase que implementa la interfaz (SumadorImpl) 26 import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class SumadorImpl extends UnicastRemoteObject implements Sumador { public SumadorImpl(String name) throws RemoteException { super(); try { System.out.println("Rebind objeto " + name); Naming.rebind(name, this); } catch (Exception e) { System.out.println("Exception: " + e.getMessage()); e.printStackTrace(); } } public int sumar (int a, int b) throws RemoteException { return a + b; } public int restar (int a, int b) throws RemoteException { return a - b; } }
  • 27. F. García Carballeira, Sistemas Distribuidos Registro del servicio 27 } Cualquier programa que quiera instanciar un objeto de esta clase debe realizar el registro con el servicio de nombrado. Ejemplo: Naming.rebind(name, this); } Antes de arrancar el cliente y el servidor, se debe arrancar el programa rmiregistry en el servidor para el servicio de nombres.
  • 28. F. García Carballeira, Sistemas Distribuidos Código del servidor (SumadorServer) 28 import java.rmi.*; import java.rmi.server.UnicastRemoteobjeto; public class SumadorImpl extends UnicastRemoteobjeto implements Sumador { public SumadorImpl(String name) throws RemoteException { super(); try { System.out.println("Rebind objeto " + name); Naming.rebind(name, this); } import java.rmi.*; import java.rmi.server.*; public class SumadorServer { public static void main (String args[]) { if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } try{ SumadorImpl misuma = new SumadorImpl("MiSumador"); } catch(Exception excr) { System.out.println("Excepcion: "+excr); } } }
  • 29. F. García Carballeira, Sistemas Distribuidos Código en el cliente (SumadorCliente) 29 public interface Sumador extends java.rmi.Remote { public int sumar(int a, int b) throws java.rmi.RemoteException; } import java.rmi.*; public class SumadorClient { public static void main(String args[]) { int res = 0; try { System.out.println("Buscando Objeto "); Sumador misuma = (Sumador)Naming.lookup( "rmi://" + args[0] + "/" +"MiSumador"); res = misuma.sumar(5, 2); System.out.println("5 + 2 = " + res); } catch(Exception e) { System.err.println(" System exception"); } System.exit(0); } } host
  • 30. F. García Carballeira, Sistemas Distribuidos ¿Cómo se ejecuta? 30 1. Compilación n javac Sumador.java n javac SumadorImpl.java n javac SumadorClient.java n javac Sumador Server.java 2. Generación de los esqueletos n rmic SumadorImpl 3. Copiar SumadorImpl_Stub.class e interfaz remota a clientes 4. Ejecución del programa de registro de RMI n rmiregistry & 5. Ejecución del servidor n java -classpath . -Djava.security.policy=./policy SumadorServer 6. Ejecución del cliente n java SumadorClient <host-del-servidor>
  • 31. F. García Carballeira, Sistemas Distribuidos policy grant { // Allow everything for now permission java.security.AllPermission; }; 31