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