Title: Middleware Java 2 Enterprise Edition
1MiddlewareJava 2 Enterprise Edition
- REMOTE METHOD INVOCATION
- (RMI)
2Remote Method Invocation
- Objetivo
- Desarrollar Aplicaciones Java Distribuidas usando
la misma sintaxis y semantica usada en
aplicaciones no distribuidas - Introducido en JDK 1.1
3RMI Local vs Remote
Objeto Local Objeto Remoto
Definicion Definido por una clase Java Definido por una interface que debe extender la interface Remote
Implementacion Implementado por la clase Java Comportamiento es provisto por una clase Java que implementa Remote
Creacion Operador new Creado en el Server via new El cliente no puedo hacer new
Acceso Via object reference Via object reference que apunta a la implementacion del proxy stub
Referencias Apuntan a un area de memoria en la maquina local Una referencia remota es un puntero a stub proxy
4RMI Local vs Remote
Objeto Local Objeto Remoto
Referencias Activas Un objeto con una referencia se considera alive Referencias remotas son sensibles a caidas en la red
Finalizacion Objeto implementa metodo finalize() Implementa Unreferenced()
Garbage Collection Cuando no quedan referencias al objeto, es candidato para el GC El GC Distribuido trabaja en conjunto con el GC Local, se analizan referencias locales y remotas
Excepciones Runtime y Exceptions Compilador obliga a manejar las Excepciones RMI fuerza al programador para que resuelva cualquier posible RemoteException
5Arquitectura RMI
- Crear un modelo de objetos distribuidos que se
integre naturalmente con el lenguaje Java y con
el modelo de objetos locales - Concepto de Interfaces
- Definicion del Comportamiento interface
- Implementacion del Comportamiento class
6Arquitectura RMI
- RMI soporta dos clases que implementan la misma
interfaz - Service Proxy Client
- Service Implementacion Server
7Arquitectura RMI
- Layers
- Stubs Skeletons
- Intercepta invocaciones que el cliente realiza
sobre la variable de referencia a la interface y
redirecciona la llamada al Servicio Remoto RMI - Remote Reference Layer
- Se encarga de establecer la conexion entre
cliente y server - Remote Object Activation (Java 2)
- Transport Layer
- Conexiones TCP - Seguridad
8Arquitectura RMI
- Stubs Skeletons - Proxy Pattern
- Un objeto en un contexto es representado por otro
(el proxy) en un contexto separado. - El proxy sabe como forwardear los llamados a
metodos.
stub
skeleton
9Arquitectura RMI
- Remote Reference Layer
- Provee un objeto RemoteRef que representa el link
al objeto que implementa el servicio remoto - Los stubs usan el metodo invoke() sobre RemoteRef
para forwardear la llamada a un metodo. - Objeto RemoteRef conoce la semantica de
invocacion de servicios remotos. - Transport Layer
- Establece conexion TCP/IP entre cliente y server
- Java Remote Method Protocol (JRMP)
10RMI Naming
- Servicios de Directorio
- RMI Registry
- Java Naming and Directory Interface (JNDI)
- RMI Registry
- RMI provee un servicio muy simple llamado
rmiregistry - Corre en cada maquina que hostea objetos
servidores - Port 1099
11RMI Naming
- Host
- Programa crea un servicio remoto creando primero
el objeto local que implementa el servicio - Exporta el objeto a RMI
- RMI crea un servicio que espera conexiones
- Registra el objeto en rmiregistry bajo un nombre
- Cliente
- Accede al RMI Registry a traves de una clase
estatica NamingNaming provee un metodo lookup()
que se utiliza para hacer queries al registry.
Se pasa la URL del servicio usando la forma - rmi//lthostnamegtltservice_portgt/ltservice_namegt
12RMI Implementacion
- Escribir y compilar el codigo Java para las
interfaces - Escribir y compilar el codigo para las clases de
implementacion - Generar Archivos Stub y Skeleton para las clases
de implementacion - Escribir codigo Java para el programa que
implemente el servicio remoto - Desarrollar aplicacion cliente RMI
- Instalar y ejecutar el Sistema RMI
13RMI Implementacion
- Interface
- public interface Calculator extends
java.rmi.Remote - public long add(long a, long b) throws
java.rmi.RemoteException - public long sub(long a, long b) throws
java.rmi.RemoteException - public long mul(long a, long b) throws
java.rmi.RemoteException - public long div(long a, long b) throws
java.rmi.RemoteException -
14RMI Implementacion
- Implementacion
- public class CalculatorImpl extends
java.rmi.server.UnicastRemoteObject - implements Calculator
- // Implementaciones deben tener un constructor
explicito para poder declarar la excepcion
RemoteException - public CalculatorImpl() throws
java.rmi.RemoteException - super()
- public long add(long a, long b) throws
java.rmi.RemoteException - return a b
- public long sub(long a, long b) throws
java.rmi.RemoteException - return a - b
- public long mul(long a, long b) throws
java.rmi.RemoteException - return a b
- public long div(long a, long b) throws
java.rmi.RemoteException - return a / b
-
15RMI Implementacion
- Stubs Skeletons
- Calculator_Stub.class
- rmic CalculatorImpl
- Calculator_Skel.class
16RMI Implementacion
- Host Server
- import java.rmi.Naming
- public class CalculatorServer
- public CalculatorServer()
- try Calculator c new CalculatorImpl()
- Naming.rebind("rmi//localhost1099/Calcu
latorService", -
c) - catch (Exception e)
System.out.println("Trouble " e) -
- public static void main(String args)
- new CalculatorServer()
-
-
17RMI Implementacion
- Cliente
- Implementar clase CalculatorClient
- Calculator c (Calculator) Naming.lookup(
"rmi//remotehost/CalculatorService") - Ejecutar el Sistema
- rmiregistry
- java CalculatorServer
- java CalculatorClient