Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CHALCO
INGENIERÍA INFORMÀTICA
SEMESTRE 2020-6
TEMA-------------------------------------------------------------------------4
EJEMPLOS------------------------------------------------------------------10
CONCLUSION--------------------------------------------------------------12
BIBLIOGRAFIA-------------------------------------------------------------13
2
Dentro de los complementos que nos ofrece Java como entorno de programación,
nos encontramos con las API´s de Java RMI.
Un paquete Java es una forma de agrupar las interfaces y las clases relacionadas
en Java. Los paquetes Java son parecidos a las bibliotecas de clases existentes en
otros lenguajes.
Los paquetes Java, que proporcionan las API Java, las cuales forman parte del Java
Development Kit (JDK) de Sun Microsystems, Inc.
3
El uso de sockets permite la elaboración de aplicaciones distribuidas. Sin embargo,
en ocasiones, son necesarios enfoques con un mayor grado de abstracción que el
proporcionado por éstos. Al utilizar sockets, las aplicaciones deben desarrollar sus
propios mecanismos para manejar de forma eficiente los mensajes intercambiados,
con la consecuente complicación que esto conlleva.
La API RMI (Remote Method Invacation) proporciona un mecanismo para facilitar la
elaboración de aplicaciones distribuidas. Integrado dentro de la jerarquía de
paquetes oficiales del lenguaje de programación Java, se adapta perfectamente al
modelo de programación de dicho lenguaje.
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.
4
puede recibir llamadas desde otros procesos que se estén ejecutando en diferentes
espacios de direcciones (es decir, en diferentes máquinas).
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.
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.
5
Típicamente, una aplicación RMI está compuesta de un cliente y un servidor. El
servidor se encarga de crear los objetos remotos, hacerlos accesibles y permanecer
a la espera de llamadas para esos objetos remotos. El cliente debe conseguir
referencias para esos objetos remotos y, en ese momento, puede hacer uso de ellas
para realizar llamadas remotas. Las aplicaciones con objetos distribuidos necesitan:
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.
En la práctica, la comunicación entre clientes y servidores no es directa, siempre
media entre ambos unos elementos suplentes que se conocen como stub y
skeleton.
Un stub actúa como un proxy local de un objeto remoto. Debe implementar las
mismas interfaces remotas que implementa el objeto al que representa.
6
objetos locales y remotos sino que se realiza a través de los elementos suplentes.
El stub se encarga de realizar la conexión con la máquina virtual remota, enviar los
argumentos para el método especificado, esperar la respuesta y pasársela al objeto
local. El skeleton es la contrapartida del stub, es decir, actúa como proxy del objeto
remoto en el lado servidor. Se encarga de recibir las peticiones dirigidas al objeto
servidor y devolver los resultados a quien hizo la petición. En las versiones actuales
del JDK (Java Development Kit) no es necesaria la utilización de los elementos
skeleton.
7
Paquetes, clases e interfaces básicos:
java.rmi: clases, interfaces y excepciones manejadas t´ıpicamente
por los clientes
• Interfaz Remote: interfaz base a implementar/extender por los objetos remotos
• Excepci´on RemoteException: base de las excepciones lanzadas por los objetos
remotos
• Clase Naming: clase de apoyo para acceder al servicio de nombres rmiregistry
• Clase RMISecurityManager: gestor de seguridad para aplicaciones RMI
java.rmi.server: clases, interfaces y excepciones manejadas t´ıpicamente
por los servidores
• Clase RemoteObject: implementaci´on de m´etodos b´asicos para objetos remotos
(hashCode(),
equals())
8
• Clase RemoteServer: superclase base para las implementaciones de objetos
remotos
• Clase UnicastRemoteObject: usada para crear y exportar objetos remotos con
JRMP y
obtener un stub que se comunicar´a con ese objeto remoto
• Clase RMIClassLoader: cargador de clases (bytecodes) desde origenes remotos
◦ necesario para deserializar stubs y objetos serializados recibidos como
par´ametro
• Clase ObjID: clase que encapsula un identificador ´unico para objetos
• Clase RemoteStub: superclase de la que heredan las implementaciones de stubs
• Interface RemoteRef, ServerRef: gesti´on de referencias remotas
java.rmi.registry: clases, interfaces y excepciones necesarios
para registrar y localizar objetos remotos
• Interface Registry: definici´on del interfaz remoto de rmiregistry
• Clase LocateRegistry: clase con m´etodos para creaci´on y consulta de servidores
de nombres
java.rmi.dgc: clases, interfaces y excepciones para dar soporte a
la recolecci´on de basura distribuida
java.rmi.activation: clases, interfaces y excepciones para dar
soporte a la activaci´on de objetos remotos
• Clase Activatable: usadas en la creaci´on y exportaci´on de objetos remotos
activables
Elementos adicionales
Servicio de nombres. Asocia nombres l´ogicos a los objetos remotos
exportados (stubs)
Servidor: asocia un nombre al objeto remoto (registro) [bind()]
Cliente: obtiene una referencia al objeto remoto (stub) a partir
de ese nombre [lookup()]
Objetivo: ofrecer transparencia de ubicaci´on
Evitar que el cliente tenga que ser recompilado si el objeto remoto
pasa a ejecutarse en otra m´aquina virtual (JVM)
9
autom´aticamente [Java 1.5]
desde clase stub generada por rmic)
Serializa esa instancia de RemoteStub y la env´ıa al registro
asociada a un nombre
Un servidor RMI consiste en definir un objeto remoto que va a ser utilizado por los
clientes. Para crear un objeto remoto, se define una interfaz, y el objeto remoto será
una clase que implemente dicha interfaz. Veamos cómo crear un servidor de
ejemplo mediante 3 pasos:
Definir la interfaz remota. Cuando se crea una interfaz remota:
La interfaz debe ser pública.
Debe heredar de la interfaz java.rmi.Remote, para indicar que puede llamarse desde
cualquier máquina virtual Java.
Cada método remoto debe lanzar la excepción java.rmi.RemoteException en su
cláusula throws, además de las excepciones que pueda manejar.
En este apartado se explicará, con un ejemplo concreto, los pasos seguidos para
elaborar una aplicación con objetos distribuidos RMI. Esta aplicación ejemplo
proporcionará un servicio que acepta peticiones de tareas concretas especificadas
por parte de los clientes. Es decir, cada cliente puede especificar la tarea que desea
que el servidor le realice, utilizando para ello el paso de objetos serializados.
La figura A.1 muestra un esquema del proceso paso por paso en la elaboración de
una aplicación RMI.
10
Ejemplo: CalculadoraImpl.java (opcion 1)
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class CalculadoraImpl extends UnicastRemoteObject implements
Calculadora {
private int contadorPeticiones;
public CalculadoraImpl() throws RemoteException {
super();
contadorPeticiones = 0;
}
public int sumar(int a, int b) throws RemoteException {
contadorPeticiones++;
return(a+b);
}
...
}
Compilaci´on: $ javac CalculadoraImpl.java
11
Cuales se usan en el cliente y cuales se usan en el servidor.
La primera capa es la de aplicación y se corresponde con la implementación real de
las aplicaciones cliente y servidor. Aquí tienen lugar las llamadas a alto nivel para
acceder y exportar objetos remotos. Cualquier aplicación que quiera que sus
métodos estén disponibles para su acceso por clientes remotos debe declarar
dichos métodos en una interfaz que extienda java.rmi.Remote. Dicha interfaz se usa
básicamente para "marcar" un objeto como remotamente accesible. Una vez que
los métodos han sido implementados, el objeto debe ser exportado. Esto puede
hacerse de forma implícita si el objeto extiende la clase UnicastRemoteObject
(paquete java.rmi.server), o puede hacerse de forma explícita con una llamada al
método exportObject() del mismo paquete.
Un servidor, que crea algunos objetos remotos, crea referencias para hacerlos
accesibles, y espera a que el cliente los invoque.
Un cliente, que obtiene una referencia a objetos remotos en el servidor, y los invoca.
12
http://www.iuma.ulpgc.es/users/lhdez/inves/pfcs/memoria-domingo/node17.html
https://es.wikipedia.org/wiki/Java_Remote_Method_Invocation
http://ccia.ei.uvigo.es/docencia/SCS/0910/transparencias/Tema3-1.pdf
13