You are on page 1of 33

TEMA 4.

Arquitectura de
Tecnologas orientadas al desarrollo
aplicaciones
distribuidas
de aplicaciones distribuidas.
La invocacin remota de mtodos
(RMI).

Bibliografa

Qusay H. Mahmoud. Distributed Programming


with Java. Captulos 7 al 10.
Sun. Documentacin de Java. http://
java.sun.com . Traducciones al castellano
en http://www.programacion.com
Liu M. Computacin distribuida.
Pearson(A.W). Captulos 7 y 8.
2

1 . Tecnologas orientadas al desarrollo de aplicaciones


distribuidas

Tipos de arquitecturas

Cliente/servidor de dos capas.

Cliente/servidor en tres capas.


Aade un servidor intermedio entre el
cliente y el servidor que se encarga,
entre otras cosas:

de la traduccin de servicios,
controlar los accesos al servidor y
enrutar las peticiones a distintos servidores
en funcin de algunas caractersticas.
3

1 . Tecnologas orientadas al desarrollo de aplicaciones


distribuidas

Objetos distribuidos

los
objetos
dinmicamente
asumen el papel de clientes o
servidores, segn la necesidad.
Un objeto distribuido es un objeto
que
puede
ser
accedido
remotamente
desde
cualquier
lugar en la red, del mismo modo
que se hara si estuviese en la
misma mquina.
4

1 . Tecnologas orientadas al desarrollo de aplicaciones


distribuidas

Objetos distribuidos

Los
objetos
distribuidos
estarn
"unidos" mediante algn mecanismo
que permita saber a los clientes:

dnde se encuentran los servidores,


cmo acceder a ellos y
qu se les puede pedir.

Por
ejemplo,
una
especie
de
gestionador de peticiones de objetos
podra servirnos para esta tarea o bien
algn tipo de registro general dinmico.

1 . Tecnologas orientadas al desarrollo de aplicaciones


distribuidas

Objetos distribuidos

Este pegamento lgico es el que nos


hace todo el sistema transparente.

Localiza los objetos en los sistemas


remotos y transforma las peticiones
para
que
se
entiendan
independientemente a la mquina
sobre la que se estn ejecutando o en
el lenguaje en el que estn escritos. 6

1 . Tecnologas orientadas al desarrollo de aplicaciones


distribuidas

Objetos distribuidos

El concepto global de objetos


distribuidos puede verse como
una red global de clientes y
servidores heterogneos.

1 . Tecnologas orientadas al desarrollo de aplicaciones


distribuidas

Ventajas de usar objetos


distribuidos

Sirven para hacer ms sencilla la


reconstruccin de aplicaciones por
partes sin tener que reinstalarla o
recompilarla completamente.
Favorecen la escalabilidad y permiten
el mejor uso de la potencia
computacional de las mquinas
repartiendo la ejecucin de los
objetos constituyentes entre ellas.
8

1 . Tecnologas orientadas al desarrollo de aplicaciones


distribuidas

Ventajas de usar objetos


distribuidos

Pueden facilitar la movilidad de los objetos


entre las mquinas, aumentado
considerablemente la disponibilidad y la
eficiencia global de la aplicacin.

Pueden servir para que las aplicaciones se


construyan independientemente de la
plataforma sobre la que se crearon.

Favorecen la comparticin de datos entre


aplicaciones y usuarios de forma inmediata,
adems de la sincronizacin de actividades
a travs de varias mquinas.
9

1 . Tecnologas orientadas al desarrollo de aplicaciones


distribuidas

Tecnologas

El mecanismo ms usado en el modelo procedural es la


llamada a procedimiento remoto (Remote procedure call,
RPC ) que es idntico a una llamada a un procedimiento
slo que origen y destino son procesos distintos.

El inconveniente que presenta esta forma de trabajo es


que para utilizarlo se debe hacer referencia a conceptos
de bajo nivel que estn en funcin del sistema operativo
en el que se est programando.

Los RPCs son un estndar del DCE (Distributed


Computed Environment), que fue creado por empresas
como HP, IBM, Sun y DEC como un entorno para
sistemas abiertos que nos ofrece un conjunto de
servicios como son direccionamiento (naming),
administracin de tareas paralelas (thread management)
y seguridad.

10

1 . Tecnologas orientadas al desarrollo de aplicaciones


distribuidas

Tecnologas

Actualmente, algunas de las tendencias


principales que se estn utilizando
dando soporte a la distribucin de
objetos son RMI de Sunsoft, CORBA del
Object Management Group y DCOM
(Distributed Component Object Model)
de Microsoft.

11

1 . Tecnologas orientadas al desarrollo de aplicaciones


distribuidas

Tecnologas

De estos tres mecanismos no


hay ninguna respuesta nica en
cuanto a cual es el mejor.

Las tendencias actuales


consisten en establecer
conexiones entre ellos.
12

2 . La invocacin remota de mtodos (RMI)

Introduccin

El Remote Method Invocation aparece como


parte integrante del JDK (Java Development
Kit) de Java a partir de la versin 1.1.

RMI permite la invocacin de mtodos de


objetos Java que residen en otras
mquinas.

Estas otras mquinas no tienen por que


tener ni la misma arquitectura ni el mismo
sistema operativo, slo requieren tener su
JVM (Java Virtual Machine) correspondiente.
13

2 . La invocacin remota de mtodos (RMI)

Introduccin

RMI usa un protocolo nativo propio


JRMP(Java Remote Method Protocol) que
se sita sobre el protocolo de red
(TCP/IP, por ejemplo) que hace que slo
se pueda hablar con otros objetos Java.

La principal diferencia de este


mecanismo con respecto a los RPC es
que el RMI forma parte integrante del
lenguaje y no hay que hacer ninguna
referencia explcita a ningn nivel
subyacente del sistema sobre el que se
va a ejecutar la aplicacin.

14

2 . La invocacin remota de mtodos (RMI)

Introduccin

Para el desarrollo de una aplicacin


distribuida, la solucin planteada por Java y
RMI (Remote Method Invocation) es ms
sencilla de llevar a cabo que cualquiera de
las otras alternativas (CORBA o DCOM).

Carece de un soporte contrastado para


mltiples lenguajes y no es tan robusto y
escalable como los dos anteriores.

Lo que realmente hace interesante esta


aproximacin es la facilidad de desarrollo
de aplicaciones distribuidas dentro del
marco del lenguaje Java.

15

2 . La invocacin remota de mtodos (RMI)

Introduccin
El uso de RMI, entre otras cosas, aporta:

Un recolector de basura distribuido,

mantiene los sistemas de seguridad de Java,

usa la posibilidad de crear hilos de ejecucin


(threads) concurrentes potenciando la idea
concurrente en las aplicaciones distribuidas y

hace un uso inteligente de la Serialization de los


objetos Java con la posibilidad de transportar
objetos a travs de la red sin necesidad de ningn
esquema extra.

16

2 . La invocacin remota de mtodos (RMI)

Estrategia

El objetivo bsico que se


persigue es la posibilidad de
enviar un mensaje a un objeto
que reside en una mquina a
partir de un mtodo que se est
ejecutando en otra mquina
distinta.
17

2 . La invocacin remota de mtodos (RMI)

Arquitectura RMI
Servicio directorios
objeto
cliente

Objeto
servidor

stub

skeleton

Interfaz con el programa

Implementa protocolos de ref. remota

Capa ref. remota

Capa de ref. remota

Capa transporte

Capa transporte

Implementa protocolo transporte

Ruta de datos lgica


Ruta de datos fsica

18

2 . La invocacin remota de mtodos (RMI)

Interacciones stub
stub

mtodo
remoto

stub

tiempo
Empaquetado parmetros
Llamada a mtodoEnva peticin
Desempaquetado:
Invoca mtodo

executa codigo
Recibe retorno
empaqueta
enva
desempaqueta
Retorna valor

19

2 . La invocacin remota de mtodos (RMI)

Ejemplo cliente/servidor

Para estudiar el mecanismo de


RMI se plantea el siguiente
ejercicio.

Disear un servidor remoto que


informe sobre la hora, de forma
que
tenga
un
mtodo
obtenerHora que pueda ser
20

2 . La invocacin remota de mtodos (RMI)

Cliente y servidor
import java.rmi.*;
interface HoraExactaI extends
Remote {
long obtenerHora() throws
RemoteException;
}
21

2 . La invocacin remota de mtodos (RMI)

Servidor
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.net.*;
public class HoraExacta extends UnicastRemoteObject
implements HoraExactaI {
// Implementacin de la interface:
public long obtenerHora() throws RemoteException {
return System.currentTimeMillis();
}
// Implementacin del constructor para lanzar
//RemoteException:
public HoraExacta() throws RemoteException {
super();
}

22

2 . La invocacin remota de mtodos (RMI)

Cliente

El cliente debe conocer la clase


HoraExacta, pero slo le
interesan los mtodos que
puede invocar.
La solucin que proporciona el
lenguaje es mediante el uso de
interfaces remotas, que
presentan los mtodos y no el
cdigo que estar en la mquina
23

2 . La invocacin remota de mtodos (RMI)

El problema reside en como el


cliente crea una referencia a un
objeto remoto y como el
servidor hace accesibles los
mtodos de sus objetos
remotos.

24

2 . La invocacin remota de mtodos (RMI)

Accesibilidad del objeto


remoto
try(servidor)
{
HoraExacta he = new HoraExacta();
Naming.bind("//canyella:2005/HoraExac
ta", he);
System.out.println("Preparado...");
} catch(Exception e) {
25

2 . La invocacin remota de mtodos (RMI)

Arrancar el registro
En nuestro caso hay una llamada a
Naming.bind(), que requiere que el
registro est ya ejecutndose como
un proceso a parte en nuestro
sistema.
El nombre del proceso que se encarga
de hacer el registro es rmiregistry y
en funcin del sistema en el que
estemos lo arrancaremos como:

Start rmiregistry en Windows y


rmiregistry & en UNIX.

26

2 . La invocacin remota de mtodos (RMI)

Arrancar el registro

Si se registran objetos sin ningn


parmetro, el registro escuchar en el
puerto 1099.
La informacin del puerto se debe
pasar al comando bind(), as como la
direccin IP de la mquina sobre la
que se ejecuta el registro.
El nombre del servicio es arbitrario, en
nuestro caso coincide con el nombre
de la clase pero no tiene porque ser
as. Lo nico importante es que sea
nico dentro del registro al que el
27

2 . La invocacin remota de mtodos (RMI)

Arrancar el registro

Si en un mismo registro
tuvisemos dos servicios con el
mismo nombre se lanzara la
excepcin
AlreadyBoundException.

Para prevenir esta posibilidad


podemos usar rebind() en lugar de
bind() ya que sta aade o
reemplaza el nuevo servicio en
28
funcin de que ya exista.

2 . La invocacin remota de mtodos (RMI)

Arrancar el registro

Aunque se termine el main(), el


objeto creado y registrado
permanece vivo por el registro
esperando por alguna peticin
de algn cliente a no ser que se
llame a Naming.unbind().

29

2 . La invocacin remota de mtodos (RMI)

Arrancar el registro

El registro se puede reiniciar


desde la aplicacin haciendo uso
de
LocateRegistry.createRegistry(2
005), en donde el 2005 es el
puerto en el que escucha.

30

2 . La invocacin remota de mtodos (RMI)

Creacin de stubs

Los stubs establecen de forma


transparente las conexiones con la
red y hacen que el objeto remoto
se comporte como si fuese local.
Para crear los stubs usamos la
herramienta rmic sobre el cdigo
compilado y crear los archivos
necesarios.
rmic HoraExacta
31

2 . La invocacin remota de mtodos (RMI)

Creacin de stubs y
skeletons
El resultado ser una clase, que
tendr que tener el cliente y el
servidor:

HoraExacta_Stub.class

32

2 . La invocacin remota de mtodos (RMI)

Usando el objeto remoto


import java.rmi.*;
public class MuestraHoraExacta {
public static void main(String[] args) {
try {
HoraExactaI t =
(HoraExactaI)Naming.lookup("//canyella:2005/Hora
Exacta");
for(int i = 0; i < 10; i++)
System.out.println("Hora Exacta = " +t.obtenerHora());
} catch(Exception e) {
}}

33

You might also like