2. Remote Method Invocation (RMI)
• La tecnología RMI (Remote Method Ivocation,
Invocación Remota de Métodos), permite hacer que un
objeto que se está ejecutando en una máquina virtual
invoque métodos de otro objeto que se está ejecutando
en otra máquina virtual distinta, en la misma
computadora o no. A este último lo llam
• A grandes rasgos, un programa que utiliza RMI para
obtener un objeto remoto e invocar sus métodos se ve
así:
UnaInterface objRemoto = ... // referencia al objeto
remoto
// invoco sus metodos como con cualquier otro objeto
String saludo = objRemoto.obtenerSaludo(“Geovanny");
// ya obtuve lo que esperaba... muestro el resultado
System.out.println("Respuesta: " + saludo)
febrero de 2016
2
3. Componentes de una aplicación RMI
• Una aplicación RMI se compone de tres partes:
clientes, servidor y los objetos remotos.
• El servidor es el programa que instancia los objetos remotos y los hace
accesibles al cliente publicándolos en un repositorio de objetos: el
rmiregistry.
• El cliente es el programa que, luego de realizar una búsqueda en el
repositorio, obtiene una referencia al objeto remoto y le invoca sus
métodos.
• Los objetos remotos son los objetos publicados por el server a los que el
cliente podrá acceder remotamente.
febrero de 2016
3
4. Ejemplo de una aplicación utilizando
RMI
ubica y
utiliza
<<interface>>
ObjetoRemoto
-------
obtenerSaludo
<<class>>
ObjetoRemotoImple
-------
obtenerSaludo
<<class>>
ServerRMI
instancia y
publica en el
rmiregistry
<<class>>
ClienteRMI
febrero de 2016
4
5. Compilar y Ejecutar la aplicación RMI
Parte 1
• Las clases stub debemos generarlas nosotros mismos
utilizando una herramienta provista con el JDK: el rmic
(RMI compiler). Lo hacemos de la siguiente manera:
rmic ObjetoRemotoImple
• Luego de esto obtendremos la clase
ObjetoRemotoImple_Stub.
• El objeto stub es para el cliente una especie de
representación local del objeto remoto y su función es la
de resolver la comunicación con el servidor.
febrero de 2016
5
6. Compilar y Ejecutar la aplicación RMI
Parte 2
• Una vez generado el stub el próximo paso será ejecutar el
rmiregistry que implementa un repositorio de objetos
sobre el cual el server publicará los objetos remotos. El
rmiregistry se provee con el JDK y para levantarlo
simplemente debemos ejecutar el comando así:
start rmiregistry
febrero de 2016
6
7. Compilar y Ejecutar la aplicación RMI
Parte 3
• Por defecto la registry atenderá en el port 1099,
pero podemos especificar un puerto diferente
pasándolo como argumento en línea de
comandos:
rmiregistry 2020
• Ahora la registry atenderá en el puerto 2020.
febrero de 2016
7
8. RMI y Serialización de Objetos
• El server publica objetos remotos en la registry para
que el cliente, luego de ubicarlos, invoque sus
métodos.
• Los métodos de los objetos remotos pueden recibir y
retornar objetos siempre y cuando estos sean
instancias de clases seriabliables. Es decir, objetos
cuyas clases implementen la interface
Serializable. También podemos enviar y recibir
valores de tipos de datos primitivos como int,
double, boolean, etc.
febrero de 2016
8