120 likes | 330 Views
Práctica II: Java RMI. Práctica II: Java RMI (I): introducción. Localización de objetos remotos. Comunicación con objetos remotos. Carga de código móvil. Práctica II: Java RMI (II): introducción. Normalmente los sistemas RPC se declaran mediante IDL.
E N D
Práctica II: Java RMI (I): introducción • Localización de objetos remotos. • Comunicación con objetos remotos. • Carga de código móvil. Sistemas Distribuidos - Nebrija - Justo Hidalgo
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
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
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() throws java.rmi.RemoteException; } Sistemas Distribuidos - Nebrija - 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
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
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
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 Modula-3. • Cuando hay una nueva referencia: count++ • Especialización de Leasing. Sistemas Distribuidos - Nebrija - Justo Hidalgo
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
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
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