Práctica III: Java RMI con Serialización y Activation Framework

Slides:



Advertisements
Presentaciones similares
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Advertisements

Java nos ofrece System.out para escribir en pantalla, pero también tenemos System.in para leer. System.in es un objeto de una clase de java que se llama.
Archivos Binarios Usando Serializable. Introducción Utilizar archivos binarios nos ayuda a guardar y leer más fácilmente los datos de archivos. Pero como.
DESARROLLO DE SOLUCIONES EMPRESARIALES MOVILES USANDO TECNOLOGIA SUN APLICACIONES MOVILES CON J2ME RMS Ing. Ronald Criollo.
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Programación Interactiva Manejo de Excepciones
Uso de variables de tipo referencia
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Práctica II: Java RMI.
5. Ingeniería de Pruebas LS4128: Ingeniería del Software II
Orientación a Objetos con Java SE
Conceptos más avanzados de Programación Orientada a Objetos Programación 2005 Licenciatura de Lingüística y Nuevas Tecnologías.
Arquitectura CLARO-TECNOTREE CAPITULO 4: Excepciones
Entornos orientados a objetos
Tema 1. Introducción a la programación (Lenguaje java).
1.2 Sintaxis del lenguaje Java.
RMI Remote Method Invocation
RMI (Remote Method Invocation)
Programación Orientada a Objetos en Java
PROGRAMACIÓN ORIENTADA A OBJETOS
Objetos Distribuidos – Aplicaciones RMI
Archivos Contenido: Archivos de Texto Archivos de Acceso Aleatorio
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Lic. Rosemary Torrico Bascopé
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CINCO CONSOLE.
Creación de Aplicaciones
Tema 6: Clases Antonio J. Sierra.
Sistemas Operativos Distribuidos Prácticas Justo N. Hidalgo Sanz Universidad Antonio de Nebrija 2002/03.
Sistemas Operativos Centralizados y Distribuidos Carlos David Zepeda.
Técnicas avanzadas de programación Interfaces
Igor Santos Grueiro. Ahora tenemos datos y datos …
1 Streams en Java Agustín J. González ELO Generalidades Un Stream es simplemente una fuente o destino de bytes. Los streams más comunes son los.
1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.
Ejemplo CORBA: Java IDL
SCJP Sun Certified Programmer for Java 6
Un hilo es un único flujo de ejecución dentro de un proceso. Un proceso es un programa ejecutándose dentro de su propio espacio de direcciones. Los.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
7. Interfaces Herencia múltiple Interfaces Comparable y Comparator
Invocación de Métodos Remotos RMI: Remote Method Invocation
1 Persistencia en Java Agustín J. González ELO-329.
Servicios Web. Servicios web Son programas con funcionalidad accesible a través de protocolo http que permiten la ejecución remota de métodos y funciones.
Patrones Creacionales
JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I
Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -
Programación I :: Prof. Yeniffer Peña Programación I Interface Gráfica de Usuario Presentación.
Streams. / En casi todo programa se necesita traer o enviar información a una fuente externa. / Dicha información puede estar en un archivo en el disco.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA DOS ORIENTACION A OBJETOS.
RMI Remote Method Invocation 2da. Clase del 19 de Junio
OBJETOS DISTRIBUIDOS E INVOCACIÓN REMOTA ING. MARISCAL.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Persistencia. Persistencia significa trascender en el tiempo y/o en el espacio Un ambiente orientado a objetos debe permitir que los objetos se persistan,
PAQUETES Un paquete es un conjunto de clases, interfaces y subpaquetes relacionados. El paquete define un ámbito de visibilidad: los miembros que no tienen.
Cambiando la manera de diseñar aplicaciones distribuidas Diseño orientado a las comunicaciones: Primero se diseña el protocolo de las comunicaciones y.
Informatica II1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase que ha sido extendida. La clase original se conoce como superclase.
1 Streams y Persistencia en Java Agustín J. González ELO-329.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Detalles Generales sobre Java
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD
INGENIERIA EN SISTEMAS COMPUTACIONALES ASIGNATURA: PROGRAMACION ORIENTADA A OBJETOS ALUMNO: JAVIER MARTINEZ MARTINEZ.
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
Clases “ Es una Abstracción de un elemento del mundo real ”
Representación externa de datos y Serialización Marisol García Valls Arquitecturas Distribuidas 2º Ingeniero de Telecomunicación (Telemática) Departamento.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
RMI: Invocación a método remoto, y Java RMI
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Transcripción de la presentación:

Práctica III: Java RMI con Serialización y Activation Framework

Sistemas Distribuidos - Nebrija - Justo Hidalgo Persistencia Caso práctico: JINI Necesitamos que el servicio de impresión esté siempre conectado de manera que, si existe algún “crash” de la máquina, el servicio arranque automáticamente. Por otra parte, el servicio de control de entrada no tiene por qué estar arrancado todo el rato; se espera que JINI lo pueda para y rearrancar “on demand”. Sistemas Distribuidos - Nebrija - Justo Hidalgo

1.- Serialización en Java

Sistemas Distribuidos - Nebrija - Justo Hidalgo Serialization Proceso de conversión de un conjunto de instancias referenciadas entre sí a un flujo lineal de bytes (byte stream) para que: puedan enviarse por un socket, puedan almacenarse en un fichero, puedan ser manipulados como un stream más. Sistemas Distribuidos - Nebrija - Justo Hidalgo

Opción 1: invocación remota Servidor - Cliente Prestaciones Vulnerable a fallos parciales ¡¡¡Volvemos al problema de RPC y stateless servers!!! Sistemas Distribuidos - Nebrija - Justo Hidalgo

Opción 2: envío de copias de la instancia de C a S Los dos objetos son independientes entre sí. El mecanismo de copia ha de crear DEEP COPIES. Si un objeto se envía dos veces en métodos remotos diferentes, son dos copias distintas (¡pensad en las DEEP COPIES!) Sistemas Distribuidos - Nebrija - Justo Hidalgo

Usos de la Serialización Como mecanismo de persistencia: se utiliza el stream “FileOutputStream” para almacenar objetos en ficheros. Como mecanismo de copia: se utiliza el ByteArrayOutputStream que se puede almacenar en memoria para después crear duplicados. Como mecanismo de comunicación: capturar o enviar el stream mediante sockets. Sistemas Distribuidos - Nebrija - Justo Hidalgo

Cómo hacer que una clase sea Serializable Ha de implementar la interfaz Serializable, Asegurarse de que el estado local es serializado apropiadamente, Asegurarse de que el estado de la superclase se serializa apropiadamente, Sobrecargar equals() y hashCode(). Sistemas Distribuidos - Nebrija - Justo Hidalgo

Implementar interfaz Serializable Obvio y fácil. Sistemas Distribuidos - Nebrija - Justo Hidalgo

Estado local serializado correctamente (I) Los atributos de una clase serializable han de ser o primitivos o serializables. public class ArrayList extends AbstractList implements List, Cloneable, Serializable { private Object elementData[]; private int size; … } Si eso no se cumple: Campos declarados como transient. Implementar métodos writeObject/readObject. Declaración de serialPersistentFields. Sistemas Distribuidos - Nebrija - Justo Hidalgo

Estado local serializado correctamente (II): transient Vamos, ignorar la variable al serializar. Útil si la variable no afecta al estado del objeto. Útil si la variable no es serializable, para evitar excepciones al serializar. public class ArrayList extends AbstractList implements List, Cloneable, Serializable { private transient Object elementData[]; private int size; … } Sistemas Distribuidos - Nebrija - Justo Hidalgo

Estado serializado (III): [write|read]Object La variable no es serializable, pero QUEREMOS SERIALIZARLA. Implementamos dos métodos: private void writeObject(java.io.ObjectOutputStream out) throws IOException private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException public class ArrayList extends AbstractList implements List, Cloneable, Serializable { private transient Object elementData[]; private int size; private synchronized void writeObject(java.io.ObjectOutputStream stream) throws java.io.IOException { stream.defaultWriteObject(); stream.writeInt(elementData.length); for(int i = 0; i < size; i++) stream.writeObject(elementData[i]); } Sistemas Distribuidos - Nebrija - Justo Hidalgo

Estado serializado (IV):serialPersistentFields Declaración explícita de qué variables serializar, mediante un atributo static final: private static final ObjectStreamField[] serialPersistentFields = { new ObjectStreamField(“size”, Integer.TYPE), …}; Sistemas Distribuidos - Nebrija - Justo Hidalgo

Superclase serializada adecuadamente Si la superclase es Serializable, OK. Si no, hay que almacenar su estado: serialPersistentFields writeObject/readObject. ¿Qué pasa si la superclase no la conozco en detalle? Además, las clases no serializables, para poder serlo, han de tener un constructor con cero argumentos (¡¡!!) REFACTORING Sistemas Distribuidos - Nebrija - Justo Hidalgo

Sobrecarga de equals() y hashCode() Primero: ByteArrayOutputStream memoryOutputStream = new ByteArrayOutputStream( ); ObjectOutputStream serializer = new ObjectOutputStream(memoryOutputStream); serializer.writeObject(serializableObject); serializer.flush( ); Después: ByteArrayInputStream memoryInputStream = new ByteArrayInputStream(memoryOutputStream.toByteArray( )); ObjectInputStream deserializer = new ObjectInputStream(memoryInputStream); Object deepCopyOfOriginalObject = deserializer.readObject( ); Y ahora... serializableObject.equals(deepCopyOfOriginalObject) public class Money extends ValueObject { private int _cents; ... } en este caso debería de devolver true, pero devuelve false igual ocurre con hashCode, pues dos instancias iguales deben devolver el mismo hashCode. Sistemas Distribuidos - Nebrija - Justo Hidalgo

Ejemplo 1: clases preserializables Envío de objetos mediante sockets Sistemas Distribuidos - Nebrija - Justo Hidalgo

Ejemplo 2: utilización de read/writeObject Se utiliza una matriz simétrica, por lo que optimizamos espacio modificando los métodos readObject y writeObject. No hay superclases. Sistemas Distribuidos - Nebrija - Justo Hidalgo

Ejemplo 3: superclase no serializable La superclase necesita un constructor sin argumentos. Los atributos de la superclase que no son serializados han de ser accesibles desde la superclase. Sistemas Distribuidos - Nebrija - Justo Hidalgo

Activation Framework

Sistemas Distribuidos - Nebrija - Justo Hidalgo Activation Framework RMI Activation Framework. Es un servicio que se ocupa del ciclo de vida de un objeto Java, que puede o no estar en memoria principal Concepto CORBA: Objeto vs. Servant. Sistemas Distribuidos - Nebrija - Justo Hidalgo

AF: RMI Activation Daemon (rmid) Es un proceso que asegura que los servicios “activables” están disponibles cuando se necesitan. Los servicios “activables” se comunican con rmid para registrarse: devuelven una referencia remota pero sin implementación activa. Rmid puede arrancar los servicios en la misma JVM o en una nueva. Sistemas Distribuidos - Nebrija - Justo Hidalgo

AF: RMI Activation Daemon (rmid): arquitectura del proceso El servicio activable corre en un proceso hijo de rmid. Si rmid cae, al tener un log, cuando sea rearrancado arrancará los servicios que tuviera activos. Por tanto, un servicio ha de desrregistrarse explícitamente. Sistemas Distribuidos - Nebrija - Justo Hidalgo

AF: Creando un servicio activable Interfaz Java: MyRemoteInterface public interface MyRemoteInterface extends java.rmi.Remote Como todos. Clase de implementación: public class ActivatableImplementation extends Activatable implements examples.activation.MyRemoteInterface Ya no extiende UnicastRemoteObject. Añade un ActivationId y un MarshalledObject (representación serializada del objeto) al constructor. Sistemas Distribuidos - Nebrija - Justo Hidalgo

AF: Creando un servicio activable Creación de la clase “setup”: Crea toda la información necesaria para la clase activable, sin que sea necesario instanciar el objeto remoto. Se lo pasa al rmid. Crea un grupo de activación. Crea una descripción de activación (clase, dónde está e información serializada que pueda necesitar -no ahora-. Registra en rmid y en rmiregistry. Sistemas Distribuidos - Nebrija - Justo Hidalgo

AF: Compilación y ejecución Compilar interfaces remotas, clases, etc. Rmic Arrancar rmiregistry. Arrancar el activation daemon, rmid: rmid -J-Dsun.rmi.activation.execPolicy=none Setup: java -Djava.security.policy=<path>/policy -Djava.rmi.server.codebase=file:///<path> examples.activation.Setup Cliente java -Djava.security.policy=<path>\policy examples.activation.Cliente <server> Sistemas Distribuidos - Nebrija - Justo Hidalgo

Sistemas Distribuidos - Nebrija - Justo Hidalgo Bibliografía Serialización: http://www.oreilly.com/catalog/javarmi Activation Framework: http://java.sun.com/j2se/1.3/docs/guide/rmi/activation Sistemas Distribuidos - Nebrija - Justo Hidalgo