Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Comunicaciones y Sistemas
Desarrollo de Aplicaciones Distribuidas
AUTORES:
Alejandro Caldern Mateos
Javier Garca Blas
David Expsito Singh
Laura Prada Camacho
Departamento de Informtica
Universidad Carlos III de Madrid
Julio de 2012
JAVA RMI
Contenidos
Introduccin:
1.
1.
2.
Java RMI
2.
Introduccin a RMI
Arquitectura de RMI
Desarrollo de aplicaciones distribuidas
1.
2.
3.
1.
Interfaz y despliegue
Contenidos
Introduccin:
1.
1.
2.
Java RMI
2.
Introduccin a RMI
Arquitectura de RMI
Desarrollo de aplicaciones distribuidas
1.
2.
3.
1.
Interfaz y despliegue
Paradigmas de
procedimientos/mtodos remotos
alto
Espacio de objetos, aplicaciones colaborativas
Servicios de red, object request broker, agentes mviles
procedimientos remotos, mtodos remotos
Cliente-servidor, peer-to-peer
Paso de mensajes
bajo
Proceso A
proc1( arg1, arg2)
proc2( arg1)
proc3( arg1, arg2, arg3)
Pasos:
}
}
}
Ejemplos:
}
}
}
Open Network Computing Remote Procedure Call, desarrollada a partir del API
RPC de Sun Microsystems a comienzo de los aos 80
Distributed Computing Environment (DCE) RPC de Open Group
Simple objeto Access Protocol (SOAP)
Ejemplo:
Modelo equivalente a
las llamadas a procedimientos remotos
Proceso invoca un mtodo local de otro proceso
Se envan tanto los argumentos del mtodo
como el valor devuelto por el mismo
Proceso 2
Proceso 1
RMI
mtodo1
mtodo2
Objeto remoto
Contenidos
Introduccin:
1.
1.
2.
Java RMI
2.
Introduccin a RMI
Arquitectura de RMI
Desarrollo de aplicaciones distribuidas
1.
2.
3.
1.
Interfaz y despliegue
Contenidos
Introduccin:
1.
1.
2.
Java RMI
2.
Introduccin a RMI
Arquitectura de RMI
Desarrollo de aplicaciones distribuidas
1.
2.
3.
1.
10
Interfaz y despliegue
11
Mquina B
Mquina C
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 mtodos se puedan
invocar remotamente.
}
Servicio de directorios:
} rmiregistry, servicio de directorios de Java
} Se ejecuta en la mquina servidor objeto
12
Ventajas:
} Los programas RMI son
ms sencillos de disear.
} Servidor RMI concurrente.
Inconvenientes:
} Sockets tienen menos sobrecarga.
} RMI slo para plataformas Java.
13
Contenidos
Introduccin:
1.
1.
2.
Java RMI
2.
Introduccin a RMI
Arquitectura de RMI
Desarrollo de aplicaciones distribuidas
1.
2.
3.
1.
14
Interfaz y despliegue
Arquitectura de RMI
Servicio de directorios
Cliente de
objetos
Servidor
de objetos
stub
skeleton
Referencia remota
Referencia remota
Transporte
Transporte
15
Arquitectura de RMI
}
Nivel de transporte
}
16
stub
Referencia remota
Transporte
Servicio de directorios
Servidor
de objetos
skeleton
Referencia remota
Transporte
Arquitectura de RMI
stub
tiempo
skeleton
marshal
Envo peticin
unmarshal
Invoca mtodo
unmarshall
Devuelve el valor retorno
17
Mtodo
Remoto
Contenidos
Introduccin:
1.
1.
2.
Java RMI
2.
Introduccin a RMI
Arquitectura de RMI
Desarrollo de aplicaciones distribuidas
1.
2.
3.
1.
18
Interfaz y despliegue
Definicin de la
interfaz remota
Implementacin de la
interfaz remota
(.java)
javac
(.class)
4
8
Cliente
usa
stub
(.class)
(.java)
javac
(.class)
10
Esqueleto
(.class)
5
Arrancar RMIRegistry
6
7
Ejectuar
Cliente
CLIENTE
19
Servidor
(.class)
rmic
SERVIDOR
Definicin de la
interfaz remota
Implementacin de la
interfaz remota
(.java)
javac
(.class)
4
8
Cliente
usa
stub
(.class)
(.java)
javac
(.class)
10
Esqueleto
(.class)
5
Arrancar RMIRegistry
6
7
Ejectuar
Cliente
CLIENTE
20
Servidor
(.class)
rmic
SERVIDOR
Interfaz remota:
}
import java.rmi.*;
public interface SomeInterface extends Remote {
// Cabecera del primer mtodo remoto
public String someMethod1( )
throws java.rmi.RemoteException;
// Cabecera del segundo mtodo remoto
public int someMethod2( float parameter) throws
java.rmi.RemoteException;
}
21
import java.rmi.*;
import java.rmi.server.*;
public class SomeImpl extends UnicastRemoteObject
implements SomeInterface
{
public SomeImpl() throws RemoteException { super( ); }
public String someMethod1( ) throws RemoteException
{ /* Cdigo fuente */ }
public int someMethod2(float a) throws RemoteException
{ /* Cdigo fuente */ }
}
22
SomeInterface
Method1
Method2
UnicastRemoteObject
...
SomeImpl
Method1
Method2
...
23
Definicin de la
interfaz remota
Implementacin de la
interfaz remota
(.java)
javac
(.class)
4
8
Cliente
usa
stub
(.class)
(.java)
javac
(.class)
10
Esqueleto
(.class)
5
Arrancar RMIRegistry
6
7
Ejectuar
Cliente
CLIENTE
24
Servidor
(.class)
rmic
SERVIDOR
# rmic SomeImpl
# ls SomeImp*.class
SomeImpl_skel.class
SomeImpl_stub.class
25
Invocacin remota
Cliente de objetos
SomeInterface.class
Servidor de objetos
SomeInterface.class
SomeServer.class
26
SomeClient.class
SomeImpl.class
Stub.class
Skel.class
Definicin de la
interfaz remota
Implementacin de la
interfaz remota
(.java)
javac
(.class)
4
8
Cliente
usa
stub
(.class)
(.java)
javac
(.class)
10
Esqueleto
(.class)
5
Arrancar RMIRegistry
6
7
Ejectuar
Cliente
CLIENTE
27
Servidor
(.class)
rmic
SERVIDOR
registryURL = "rmi://localhost:"+portNum+"/some";
Naming.rebind(registryURL, exportedObj);
System.out.println("Some Server ready.");
}
catch (Exception ex) {
System.out.println(Exception: +ex);
}
28
30
Invocacin remota
Mquina 2
Mquina 1
RMI
Cliente
RMI
rmiregistry
RMI
Servidor
31
Ejemplo (RMI)
resultado = 7
32
33
35
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
Cdigo en el cliente
(SumadorCliente)
import java.rmi.*;
Invocacin remota
Cliente de objetos
SumadorInterface.class
Servidor de objetos
SumadorInterface.class
SumadorServer.class
SumadorCliente.class
Stub.class
38
SumadorImpl.class
Skel.class
Cmo se ejecuta?
1.
Compilacin
}
}
}
}
2.
3.
4.
rmiregistry
6.
rmic SumadorImpl
Copiar SumadorImpl_Stub.class e
interfaz remota a clientes
Ejecucin del programa de registro de RMI
}
5.
javac Sumador.java
javac SumadorImpl.java
javac SumadorClient.java
javac Sumador Server.java
java SumadorServer
39
40
41