Api Rmi
Api Rmi
Api Rmi
3. API RMI
En RMI, un objeto de Java puede ``marcarse'' como remoto de forma que los
procesos de aplicaciones distribuidas pueden acceder a él como si fuera local. En
definitiva, RMI proporciona un modelo propio de objetos distribuidos, optimizado
para las características de Java.
Una clase remota es cualquier clase cuyas instancias son objetos remotos. Desde
el punto de vista de la máquina virtual que crea instancias de objetos remotos,
éstos son objetos ``normales''. Se podrán usar como cualquier otro objeto.
decir, con la misma sintaxis que tiene las llamadas locales. De esta forma se
consigue una total transparencia cara al programador.
El uso de interfaces remotas proporciona una serie de ventajas, como son: las
implementaciones de los métodos no son visibles por los clientes y no hace falta
comunicar a los clientes cambios realizados en las implementaciones de los
métodos.
Localizar los objetos remotos.- Para ello pueden hacer uso de la utilidad de
búsqueda por nombres propia de RMI, rmiregistry.
Comunicar con los objetos remotos.- Los detalles de la comunicación entre
objetos remotos quedan a cargo de RMI. Para el programador, la
invocación remota de métodos es como la estándar.
Cargar el código de las clases para los objetos remotos.- RMI permite no
sólo el paso de objetos completos hacia y desde los procesos remotos sino,
además, la descarga de las clases que implementan dichos objetos desde
ubicaciones remotas.
Todos los programas que utilicen RMI deben instalar un gestor de seguridad o
RMI no descargará las clases (concretamente las que no se encuentren en
el path local) para los objetos que se reciban como parámetros. Estas
restricciones aseguran que las operaciones realizadas por el código descargado
cumple ciertos requisitos de seguridad.
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 aplicación 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 información de registro se pierde al
reiniciar la aplicación rmiregistry.
Por otro lado, en la figura 3.6 se muestra en detalle el proceso de una llamada
RMI[6]. La secuencia completa es la siguiente:
La API RMI está formada por un conjunto de clases que se encuentran agrupadas
en los siguientes paquetes:
java.rmi
java.rmi.registry
java.rmi.server
java.rmi.activation
java.rmi.dgc
El paquete java.rmi
myClass myInstance=
(myClass)Naming.lookup("rmi://host:port/remote_object_name");
El paquete java.rmi.registry
El paquete java.rmi.server
El paquete java.rmi.activation
Por otra parte, un cliente obtiene una referencia remota a algún objeto del
servidor, e invoca sus métodos [13].
Podemos dividir la creación de una aplicación con objetos distribuidos RMI en una
serie de pasos descritos en los apartados siguientes:
interfaces remotos y las clases del servidor y del cliente. En el segundo paso se
utiliza el compilador rmic para crear los stubs de los objetos remotos.
La figura 3.8 muestra la distribución (en lado cliente y servidor) de clases para un
ejemplo hipotético.
Cuando un proceso trata de extraer de los datos serializados algún objeto (bien
sea un objeto pasado como parámetro o el propio stub), los pasos que se dan son
los siguientes:
(las del lado servidor y las del lado cliente, si procede, como ocurría en el ejemplo
anterior).
En el lado servidor.-
java -Djava.rmi.server.codebase=http://url/directorio/
-Djava.security.policy=mi_archivo_de_seguridad.policy Servidor
Suponiendo, claro está, que tanto el archivo que define las políticas de seguridad
como la clase servidora se encuentran en el directorio actual.
En el lado cliente.-
3.5 Resumen
Entre sus principales ventajas destaca su sencillez, con RMI los objetos remotos
se manejan como si fueran locales. Por otro lado, al existir una separación entre
interfaces e implementaciones, en una aplicación con objetos distribuidos se
pueden aprovechar las ventajas de la programación orientada a objetos. Además,
la carga dinámica de clases permite, por ejemplo, que los clientes se conviertan
en applets interpretados en un navegador. RMI proporciona un servicio de
registro, rmiregistry, que facilita la localización por nombre de los servicios. Por
último, existe la posibilidad de añadir a las comunicaciones RMI protocolos de
seguridad, como SSL o HTTPS.