You are on page 1of 15

3.

1 RMI (REMOTE METHOD


INVOCATION)
Es un mecanismo ofrecido por java para invocar un
mtodo de manera remota.
Forma parte del entorno estndar de ejecucin en java
y proporciona un mecanismo simple para la
comunicacin de servidores en aplicaciones distribuidas
basadas exclusivamente en JAVA

CARACTERSTICAS:
Facilidad de uso en la programacin por estar
especficamente diseado para JAVA
Proporciona paso de objeto por referencia
Recoleccin de basura distribuida
Paso de tipos arbitrarios

INVOCACIN
1) Encapsulado de los parmetros
2) invocacin del mtodo (del cliente con el servidor). El
invocador se queda esperando una respuesta.
3) Al terminar la ejecucin, el servidor realiza el valor de
retorno y lo enva al cliente

4) El cdigo cliente recibe la respuesta y contina como


si la invocacin hubiera sido local.

ARQUITECTURA
Puede verse como un modelo de cuatro capas
PRIMERA CAPA: Es la de aplicacin y corresponde con
la implementacin real de las aplicaciones cliente y
servidor
SEGUNDA CAPA: Es la que interacta directamente con
la capa de aplicacin, se encuentran las llamadas a
objetos remotos y acciones junto

CAPAS
TERCERA CAPA: Es la de referencia remota y es
responsable del manejo de la parte semntica de las
invocaciones remota, es responsable de la replicacin
de objetos.

CUARTA CAPA: Es la de transporte; es la responsable


de realizar las conexiones necesarias y manejo de
transporte de los datos de una maquina a otra

Skeleton y Stub
Dota a clientes y servidores de una interfaz que les
permite localizar objetos remotos para invocar mtodos
como si fueran locales.

3.2 El API Java RMI


Es una interfaz de programacin de aplicaciones
provistas por los creadores del lenguaje JAVA, y que da
a los programadores los medios para desarrollar
aplicaciones javas.
La API de JAVA provee un conjunto de clases utilitarias
para efectuar toda clase de tareas dentro de un
programa.

Interfaces y Clases RMI


La API RMI est formada por un conjunto de clases que
se encuentran agrupadas en los siguientes paquetes:
-Java.rmi
-Java.rmi.server
-Java.rmi.registry
-Java.rmi.activation
-Java.rmi.dgc

JAVA.RMI
-Este paquete proporciona la interfaz Remote y las
clases
MarshalledObject,
Naming
y
RmiSecurityManager,
junto
con
una
serie
de
excepciones. La interfaz Remote, que carece de
mtodos, debe ser implementada por toda clase
remota para que sus mtodos sean accesibles. Si no es
as, Java no la reconocer como tal. -Mediante una
instancia de la clase MarshalledObject se puede
manejar el flujo de bytes serializados de un objeto.
-La clase Naming proporciona mtodos para obtener y
almacenar referencias de los objetos remotos mediante
URLs.

Sus mtodos ms habituales son:


-public static void bind(String name, Remote object)
throwsAlreadyBoundException,MalformedURLException,
RemoteException
-public static void rebind(String name, Remote object)
throws RemoteException, MalformedURLException
-public static void lookup(String name) throws
NotBoundException,MalformedURLException,RemoteExc
eption
El mtodo bind() asocia un nombre a un objeto remoto
mediante una URL, es decir, lo registra. En

consecuencia, ese nombre se utiliza para localizar el


objeto.

JAVA.RMI.REGISTRY
Este paquete proporciona las interfaces Registry y
RegistryHandler, as como la clase LocateRegistry.
La interfaz Registry define los mtodos bind(), rebind(), y
lookup() (as como otros que no hemos comentado
como son unbind() y list()) de la clase Naming.
Por ltimo, la clase LocateRegistry permite recuperar y,
por tanto, manejar objetos Registry, que representan a
los procesos que ejecutan el servicio de registro RMI, a
partir de un par host-puerto.

Tambin permite crear estos objetos a partir de un


puerto o puertos y, si se desea, factoras de sockets RMI.
Las factoras de sockets permiten establecer
caractersticas comunes a los sockets que se quieren
crear en una aplicacin determinada.

Java.rmi.server
Este paquete proporciona una serie de clases,
interfaces y excepciones para el lado servidor de las
aplicaciones RMI. Algunas de sus clases principales son:

-Clase ObjID: Genera identificadores de objetos que los


hosts declaran como remotos, proporcionando
mtodos para la creacin de los mismos.
-Clase
RemoteObject:
Implementa
la
clase
java.lang.Object para objetos remotos y la interfaz
java.rmi.Remote.
-Clase RemoteServer: Hereda de RemoteObject. Es la
clase
raz
de
la
que
heredan
todas
las
implementaciones de objetos cuyos mtodos son
accesibles remotamente.

JAVA.RMI.ACTIVATION
Permite activar remotamente objetos, desactivarlos
cuando ya no se trabaje con ellos y reactivarlos cuando
sea necesario. Entre activacin y desactivacin,
conservan su estado.

Java.rmi.dgc
Este paquete contiene clases, interfaces y excepciones
para la recoleccion de basura.

3.3 JERARQUIA DE OBJETOS RMI

3.4 EL SISTEMA DE NOMBRADO REGISTRY


Qu es?
Es un servidor simple que permite que una
aplicacin vea los objetos que estn siendo
importados por un RMI.
Una vez que se tiene un objeto que est siendo
exportado por un servidor que utiliza mtodos de
RMI, la comunicacin es entonces como una
simple llamada a mtodos de un objeto que
puede existir en una maquina diferente.
RMI necesita un servicio de registro de nombres
para permitir que los clientes encuentren los
objetos remotos.
Para ello proporciona un servicio de registro
propio,
implementado
por
la
aplicacin
rmiregistry.
El servicio de registro de RMI, debe estar en
funcionamiento antes que los clientes y servidores.
Si no es as, los clientes no pueden encontrar los
objetos remotos ni los servidores pueden atender
sus peticiones.

Destacar que el servicio de registro de RMI no


admite persistencia, es decir, la informacin de
registro se pierde al reiniciar la aplicacin
rmiregistry.
Al ejecutar rmiregistry, se activa un proceso que
escucha en un puerto TCP especfico. Para que
un cliente pueda acceder a los servicios remotos
ofrecidos por un servidor, ste deber registrarlos
previamente en el rmiregistry, asocindoles un
nombre lgico.
El rmiregistry acta, en consecuencia, como un
servidor DNS, de manera que a las bsquedas por
nombre de los clientes, devuelva los stubs
asociados al servicio.

3.5 APLICACIONES DISTRIBUIDAS


Una aplicacin con distintos componentes que se
ejecutan en entornos separados, normalmente en
diferentes plataformas conectadas a travs de
una red.
Las tpicas aplicaciones distribuidas son de dos
niveles (cliente-servidor), tres niveles (clientemiddleware-servidor) y multinivel.

Objetivo:
Una aplicacin distribuida es aquella cuyo objetivo final
se alcanza mediante la ejecucin de diversos procesos
independientes que por lo general se ejecuten en
equipos diferentes y que de una forma u otra se pasan
datos
entre
ellos
mediante
protocolos
de
comunicaciones bien establecidos.

Componentes:
-Clientes: Conducen el flujo de la aplicacin. Localizan
e invocan mtodos ofertados como los mtodos
remotos por los servidores.
-Servidores: Conjunto de objetos que ofrecen interfaces
remotas pblicas cuyos mtodos pueden ser
involucrados por clientes de cualquier procesador.

Registro: Servicio esttico que se establece en cada


nudo, en el que se registran los servidores con un
nombre, y donde los clientes los localizan.

-Protocolo de aplicacin para la comunicacin entre el


cliente y el servidor: El protocolo define el tipo de
mensajes intercambiados; por ejemplo, el protocolo de
la capa de aplicacin de la Web, HTTP, define el
formato y la secuencia de los mensajes transmitidos
entre el navegador y el servidor Web

Pasos para desarrollar una aplicacin


distribuida RMI:
1. Se define la interfaz remota
2. Se desarrolla el servidor que implementa la interfaz
remota.
3. Se desarrolla el cliente.
4. Se compilan los ficheros Java fuentes.
5. Se ejecuta el RMI Registry en el procesador remoto.
6. Se ejecuta el servidor en el procesador remoto.
7. Se ejecuta el cliente en el procesador local.

3.6 PASO DE PARAMETROS


El paso de parmetros es el mecanismo mediante el
que se pasa informacin a un subprograma.

Una precaucin que hay que tener en cuenta es que,


bajo algunas circunstancias, un subprograma puede
modificar el valor de las variables pasadas como
parmetros. Algunas veces esto es deseable, y otras
veces no lo es.
-Los mtodos remotos pueden tener como parmetro o
como valor de retorno cualquier clase de objeto
siempre que sea serializarle. Esto es, o es primitivo o
implementa la interfaz java.io.Serializable.

-Un objeto no remoto que es pasado como parmetro o


resultado en la invocacin de un mtodo es pasado por
copia.

-Cuando un objeto no remoto es pasado como


parmetro, es primero serializado, luego es transferido a
la JVM remota y luego se invoca el mtodo haciendo
referencia a la copia.
-Cuando un objeto no remoto es retornado como
resultado por un mtodo, se serializa el objeto, se

transfiere a la JVM local y luego se retorna la referencia


de la copia al thread que invoc.

-Cuando un objeto es transferido de una JVM a otra,


tambin transfiere la anotacin de la clase que
implementa el objeto, as que la clase y sus
mtodos pueden ser cargado en la JVM que lo recibe.

Dos maneras de pasar parmetros a


mtodos remotos:
-Por Valor: se inserta una copia secuenciada del
objeto en el flujo de salida que corresponde al envo de
la invocacin o el retorno es el objeto remoto el que
viaja.

-Por Referencia: se inserta una copia secuenciada del


stub del objeto en el flujo de salida que corresponde al
envo de la invocacin o el retorno es el stub del objeto
remoto (instancia de la clase stub) el que viaja.

3.7 CALLBACKS
Como la palabra en ingls lo indica un callback es una
llamada de vuelta y este es un concepto importante
al momento de escribir cdigo. Es simple: llamo a una
funcion y le envo por parmetro otra funcin (un
callback) esperando que la funcin que llam se
encargue de ejecutar esa funcin callback.

Pero callback no significa que se va a llamar cuando


algo termine, simplemente se puede tener distintos
callbacks que se van llamando en determinados casos.

Callback de Cliente
En RMI, el callback de cliente es una caracterstica que
permite a un objeto cliente registrarse a s mismo con un
objeto servidor remoto para callbacks, de forma que el
servidor pueda llevar a cabo un invocacin al mtodo
del cliente cuando el evento ocurra.

Hay que observar que con los callbacks de clientes, las


invocaciones de los mtodos remotos se convierten en
bidireccionales, o dplex, desde el cliente al servidor y
viceversa.
Debido a que el API de RMI bsica, slo permite
invocacin de mtodos remotos de clientes en objetos

servidores, se necesita claramente sintaxis adicional


para dar soporte a esta nueva caracterstica.
Cuando un objeto servidor realiza un callback, los
papeles de los dos procesos se invierten: el objeto
servidor se convierte en cliente del objeto cliente,
debido a que el primero inicia una invocacin de
mtodo remoto en el segundo.

INTERFAZ DEL CALLBACK


-El servidor ofrece un mtodo remoto para que el
cliente registre sus callbacks.

-Hay que disear una interfaz remota para el callback.

-La interfaz debe incluir un mtodo que ser invocado


en el callback desde el servidor.
El cliente deber de ser una Subclase de RemoteObject
e implementara la interfaz de callback.

-El cliente se registrara frente a la clase remota para as


ser rellamado.

-El servidor invoca el mtodo remoto del cliente en caso


de aparecer al evento indicado.

You might also like