Download Enlace a presentación de la práctica II

Document related concepts
no text concepts found
Transcript
Práctica II: Java RMI
Práctica II: Java RMI (I):
introducción
1. Localización de objetos
remotos.
2. Comunicación con
objetos remotos.
3. Carga de código móvil.
Sistemas Distribuidos - Nebrija - Justo Hidalgo
2
Práctica II: Java RMI (II):
introducción
• Normalmente los sistemas RPC se declaran mediante IDL.
• JavaRMI utiliza una interfaz Java => sólo utilizable entre
aplicaciones Java.
• Necesidades de las aplicaciones distribuidas:
– Localización de objetos remotos:
• Rmiregistry ó
• Paso de objetos como referencias remotas, ó
• Servicio de nombrado CORBA, en RMI/IIOP.
– Comunicación con objetos remotos.
• JavaRMI se ocupa de que la interacción entre objetos sea como
invocaciones locales.
– Carga de los bytecodes de los objetos que se pasan como
parámetros o valores de retorno.
Sistemas Distribuidos - Nebrija - Justo Hidalgo
3
Práctica II: Java RMI (III):
diferencias
•Diferencias con el modelo de objetos local Java:
– Los clientes de los
objetos remotos tratan
sólo con interfaces
remotas, no con la
implementación.
– Los argumentos “no
remotos” se pasan
siempre por copia, no
por referencia.
–Los objetos remotos se pasan por referencia.
–Los clientes han de tratar más excepciones que antes.
Sistemas Distribuidos - Nebrija - Justo Hidalgo
4
Práctica II: Java RMI (IV):
interfaz java.rmi.Remote
• Interfaz que declara un conjunto de métodos que pueden
invocarse desde una JVM remota.
• Una interfaz remota debe extender la interfaz
java.rmi.Remote.
• Un método remoto:
– Debe incluir la excepción java.rmi.RemoteException (o
superclases).
• Ejemplo:
– public interface BankAccount extends java.rmi.Remote {
• public void deposit(float amount) throws
java.rmi.RemoteException;
• public void withdraw(float amount) throws OverdrawnException,
java.rmi.RemoteException;
• public float
getBalance()
} 5
Sistemas
Distribuidosthrows
- Nebrijajava.rmi.RemoteException;
- Justo Hidalgo
Práctica II: Java RMI (V):
clase RemoteObject
• Parte servidora; tres subclases:
– Java.rmi.Server.RemoteObject:
implementaciones para los métodos de Object:
hashCode, equals, toString.
– Java.rmi.server.UnicastRemoteObject: define
un objeto remoto Singleton cuyas referencias
son sólo válidas mientras el proceso esté vivo.
– Java.rmi.server.Activatable: abstracta que
define un objeto remoto activable “on request”.
Sistemas Distribuidos - Nebrija - Justo Hidalgo
6
Práctica II: Java RMI (VI):
localización
• Un cliente necesita referencia al objeto remoto que
quiere invocar.
• La referencia se almacena en un servicio de
registro (rmiregistry) mediante la convención de
java.rmi.Naming:
–
–
–
–
Look up.
Bind.
Rebind.
Unbind.
Sistemas Distribuidos - Nebrija - Justo Hidalgo
7
Práctica II: Java RMI (VII):
stubs & skeletons
• Stub: proxy en la parte cliente para el objeto
remoto.
– El cliente invoca el stub, que es quien se conecta con la
parte servidora:
•
•
•
•
•
Conexión con JVM remota.
Marshalling.
Espera de resultados.
Unmarshalling de valores de retorno o excepciones.
Devolución de resultado a la aplicación cliente.
• Skeleton: no necesario en Java2 Platform.Ejerce
de dispatcher.
Sistemas Distribuidos - Nebrija - Justo Hidalgo
8
Práctica II: Java RMI (VIII):
garbage collection
• Borrado automático de objetos remotos
cuando no son referenciados por ningún
cliente.
• RMI se basa en Network Object de Modula3.
• Cuando hay una nueva referencia: count++
• Especialización de Leasing.
Sistemas Distribuidos - Nebrija - Justo Hidalgo
9
Práctica II: Java RMI (IX):
ejemplo
• Creación de la interfaz remota Java
• Implementación de la interfaz remota.
– Main:
• Gestor de seguridad.
• Creación de instancia del objeto remoto.
• Registro del objeto.
• Implementación de la aplicación cliente.
Sistemas Distribuidos - Nebrija - Justo Hidalgo
10
Práctica II: Java RMI (X):
compilación
• Entorno:
– set
CLASSPATH=%CLASSPATH%;<practicas>\examples
\hello;.
• Compilación de las fuentes.
– javac Hello.java HelloImpl.java HelloClient.java
• Generación de stubs/skeletons.
– rmic examples.hello.HelloImpl
– Genera:
• HelloImpl_Stub.class
• HelloImpl_Skel.class //opcional.
Sistemas Distribuidos - Nebrija - Justo Hidalgo
11
Práctica II: Java RMI (XI):
ejecución
• Arranque del rmiregistry:
– start
– set CLASSPATH=
– rmiregistry <puerto>
• Arranque del servidor:
– java -Djava.rmi.server.codebase=file:///<path>/ Djava.security.policy=<path>\policy examples.hello.HelloImpl
• Arranque del cliente:
– java -Djava.rmi.server.codebase=file:///<path>/ Djava.security.policy=<path>\policy examples.hello.HelloClient
<host>
Sistemas Distribuidos - Nebrija - Justo Hidalgo
12