Representación externa de datos y Serialización Marisol García Valls Arquitecturas Distribuidas 2º Ingeniero de Telecomunicación (Telemática) Departamento.

Slides:



Advertisements
Presentaciones similares
Jorge de Nova Segundo UD 6:
Advertisements

Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Creación y destrucción de objetos
POLIMORFISMO "una interfaz, múltiples métodos".
Lenguaje de programación Java
I.T.E.S.R.C. Romina Tamez Andrea Martínez Ma. De Lourdes Solís
Servicios Web.
REFERENCIA AL OBJETO DE LA CLASE BASE
Polimorfismo Unidad 4.
Ingeniería en Automática Industrial Software para Aplicaciones Industriales I Ingeniería en Automática Industrial Software para Aplicaciones Industriales.
OBJETO REQUEST. El objeto Request Por qué el objeto request Funcionamiento Colecciones: – Transferencia de variables por URL –Transferencia de variables.
Tipo de Dato Abstracto Tipos de datos:
Informática II Prof. Dr. Gustavo Patiño MJ
Informática II Prof. Dr. Gustavo Patiño MJ
RMI Remote Method Invocation
RMI (Remote Method Invocation)
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno.
Encapsulamiento y Abstracción
PROGRAMACIÓN ORIENTADA A OBJETOS
Archivos Contenido: Archivos de Texto Archivos de Acceso Aleatorio
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Modificadores.
Lic. Rosemary Torrico Bascopé
Práctica III: Java RMI con Serialización y Activation Framework
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
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.
Tema 6: Clases Antonio J. Sierra.
Sistemas Operativos Centralizados y Distribuidos Carlos David Zepeda.
TRADUCTOR DE UN PROGRAMA
Igor Santos Grueiro. Ahora tenemos datos y datos …
SCJP Sun Certified Programmer for Java 6
Semana 5 Subprogramas..
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Tema 2: Los tipos de datos
Ing. Karen Torrealba de Oblitas
1 Persistencia en Java Agustín J. González ELO-329.
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Programación I :: Prof. Yeniffer Peña Programación I Interface Gráfica de Usuario Presentación.
Correo electrónico Internet
Sistemas de numeración
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
OBJETOS DISTRIBUIDOS E INVOCACIÓN REMOTA ING. MARISCAL.
Patrones de Diseño: Command
PROTOCOLO H T T P.
Unidad 2 REUTILIZACIÓN DE CLASES Programación Orientada a Objetos M.S.C. Ivette Hernández Dávila.
Persistencia. Persistencia significa trascender en el tiempo y/o en el espacio Un ambiente orientado a objetos debe permitir que los objetos se persistan,
Programación orientada a objetos. El método main es el comportamiento por el cual comienzan todos los programas en Java, de la misma forma en la que C,
Constructor  Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar.
Ivette C. Martínez - Héctor Palacios Java – Modulo 1 Introducción y Fundamentos del lenguaje de programación Java.
Programación Orientada a Objetos
Términos algoritmo diseñar algoritmo implementar algoritmo
File Transfer Protocol.
Capítulo 2 “Subprogramas/Funciones - Arreglos”
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.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.

Instituto Tecnológico Superior de Libres Ingeniería en Sistemas Computacionales Segundo semestre Materia: Programación Orientada a Objetos Asesora: Ing.
Programación Orientada a Objetos: CLASES Y OBJETOS
Clases “ Es una Abstracción de un elemento del mundo real ”
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Notario electrónico Consejería de Justicia y Administración Pública Dirección General de Organización, Inspección y Calidad de los Servicios Antonio Pedro.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
RMI: Invocación a método remoto, y Java RMI
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Programación I :: Prof. Yeniffer Peña Programación I Interface Gráfica de Usuario Presentación.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
Transcripción de la presentación:

Representación externa de datos y Serialización Marisol García Valls Arquitecturas Distribuidas 2º Ingeniero de Telecomunicación (Telemática) Departamento de Ingeniería Telemática Universidad Carlos III de Madrid

Arquitecturas Distribuidas ©2009 Marisol García Valls 2 Índice Introducción a la comunicación remota Formato de representación externa de datos Empaquetado de datos (marshaling) Serialización de objetos de Java El mecanismo de reflexión Temas relacionados: –Referencias a objetos remotos Bibliografía: G. Coulouris, et al. “Sistemas distribuidos. Conceptos y diseño”. 3ª ed. (o posterior). Addison-Wesley CAPÍTULO 4.

Arquitecturas Distribuidas ©2009 Marisol García Valls 3 Comunicación remota mobjCliente () {... x = objetoRemoto.m1(a,b,c);... } La información en los programas en ejecución se representa como estructuras de datos (objetos interconectados) En los mensajes, la información consiste en secuencias de bytes

Arquitecturas Distribuidas ©2009 Marisol García Valls 4 Formato externo de representación de datos Las estructuras de datos (ED’s) deben ser aplanadas (convertidas a una secuencia de bytes) para su transmisión. El orden de almacenamiento de valores primitivos, como los enteros, puede diferir en computadores distintos : big-endian o little endian. La representación de los números de coma flotante también puede diferir. Los códigos para representación de caracteres puede ser ASCII (Unix) o Unicode. Para permitir el intercambio de valores de datos entre dos computadores, los valores podrán: –convertirse a un formato externo de representación acordado antes de la transmisión. –transmitirse en el formato del emisor, junto con la indicación del formato usado. La representación externa de datos es un estándar acordado para la codificación de estructuras de datos y valores primitivos.

Arquitecturas Distribuidas ©2009 Marisol García Valls 5 Empaquetado Empaquetado (marshalling) es el proceso de tomar un conjunto de datos y ensamblarlos en una forma adecuada para ser transmitida en un mensaje. Desempaquetado (unmarshalling) consiste en el desensamblaje en el punto de recepción para producir una colección equivalente de datos. Por tanto, el empaquetado consiste en la traducción de elementos de datos estructurados y valores primitivos a una representación externa de datos. El empaquetado permite: –trabajar con los parámetros y resultados de invocaciones remotas, –conversión de ED’s u objetos a formas adecuadas para transmisión de mensajes, y –conversión de ED’s u objetos a formas adecuadas para almacenamiento en disco.

Arquitecturas Distribuidas ©2009 Marisol García Valls 6 CORBA CDR y Serialización de JAVA Existen dos aproximaciones al empaquetado y representación externa de datos: –Representación común de datos de CORBA (CORBA CDR): transmisión de argumentos y resultados. –Serialización/secuenciación de objetos de Java (serialization): transmisión de argumentos y resultados y almacenamiento en disco. En ambos casos, el des/empaquetado es realizado por el middleware sin intervención de la aplicación. En ambos casos, los tipos de datos primitivos se empaquetan a forma binaria. Una forma alternativa de empaquetado consistiría en empaquetar a texto ASCII (HTTP). El empaquetado ASCII es simple de implementar pero produce unos datos de mayor tamaño.

Arquitecturas Distribuidas ©2009 Marisol García Valls 7 Serialización de objetos en Java Actividad para aplanar un objeto o un conjunto de objetos relacionados a un formato secuencial adecuado para almacenamiento en disco o transmisión en un mensaje. Deserialización consiste en restablecer el estado de un objeto o conjunto de objetos a partir de su forma serializada. Se pueden pasar como argumentos y resultados tanto valores de tipos primitivos como objetos. Para que una clase sea serializable debe implementar la interfaz Serializable. public class Persona implements Serializable { private String nombre, lugar; private int anno; public Persona(String uNombre, String uLugar, int uAnno){ nombre = uNombre; lugar = uLugar; anno = uAnno; } // Métodos para acceder a las variables de instancia }

Arquitecturas Distribuidas ©2009 Marisol García Valls 8 Información de serialización El proceso de deserialización no tiene conocimiento previo de los tipos de los objetos de la forma serializada. Se necesita incluir información sobre la clase de cada objeto en la forma serializada. Ello permitirá al receptor cargar las clases necesarias al serializar objetos. Información en la serialización de un objeto: NombreVersiónNúmero, tipo y nombre de variables instanciaValores de variables instancia Info. de la clase El número de versión cambia cuando la clase sufre modificaciones sustanciales. Puede establecerlo el programador o ser calculado como el hash del nombre, variables de instancia, métodos e interfaces. El proceso de deserialización comprueba si tiene la versión adecuada de la clase.

Arquitecturas Distribuidas ©2009 Marisol García Valls 9 Serialización recursiva Los objetos de Java pueden contener referencias a otros objetos. Cuando se serializa un objeto todos los objetos a los que mantiene referencias son también serializados. Al reconstruir los objetos en el destino, todas sus referencias podrán ser resueltas. Las referencias son serializadas como apuntadores (handles). Un apuntador es una referencia a un objeto en la forma serializada. Deberá existir una correspondencia 1 a 1 entre referencias a objetos y apuntadores. Cada objeto deberá ser escrito sólo una vez. En sus posteriores ocurrencias se escribirá el apuntador. Si las variables de instancia pertenecen a clases nuevas, su información de clase deberá ser escrita también, seguida de los nombres y tipos de sus variables de instancia. Cada clase tiene un apuntador de forma que sólo se escribe una vez al stream de bytes. Por lo tanto, es un proceso recursivo.

Arquitecturas Distribuidas ©2009 Marisol García Valls 10 Más datos sobre la serialización de Java Los contenidos de las variables que son tipos primitivos (enteros, caracteres, booleanos, bytes y longs) se escriben en un formato binario portable. Para ello se usan métodos de la clase ObjectOutputStream ( writeObject ). Los strings y caracteres se escriben usando el Formato Universal de Transferencia (UTF), con el método writeUTF. En UTF los caracteres ASCII se representan con un byte y Unicode con múltiples bytes. Los strings van precedidos del número de bytes que ocupan en el stream. Como ejemplo, véase la forma serializada del siguiente objeto: Persona p = new Persona(“Paco”, “Valencia”, 1909); PersonaNº versión de 8 bytesh0 3 int annojava.lang.String nombrejava.lang.String lugar Paco8 Valenciah1

Arquitecturas Distribuidas ©2009 Marisol García Valls 11 Utilización del mecanismo de serialización Para serializar un objeto: –se crea una instancia de la clase ObjectOutputStream, –se invoca su método writeObject, con el objeto a serializar como argumento. Para deserializar un objeto de un stream de datos: –se abre un ObjectInputStream sobre el stream en cuestión, –se usa su método readObject para reconstruir el objeto original.

Arquitecturas Distribuidas ©2009 Marisol García Valls 12 Cambios en la serialización El mecanismo de serialización y deserialización es llevado a cabo por el middleware sin intervención de la aplicación. Puede necesitarse características especiales en la serialización que obliguen a modificarla. Para modificar la serialización se puede cambiar la implementación de los métodos de de/serialización. Pueden también declararse variables que no deban ser serializadas con el modificador transient. Ejemplos de objetos que no deban ser serializados son: sockets, ficheros locales, claves, etc.

Arquitecturas Distribuidas ©2009 Marisol García Valls 13 El mecanismo de reflexión (reflection) La reflexión consiste en la habilidad de preguntar sobre las propiedades de una clase (nombres y tipos de sus atributos y métodos). Esto hace posible crear clases a partir de sus nombres y crear un constructor para una clase dada con los argumentos dados. La reflexión permite hacer serialización y deserialización de una manera totalmente genérica. Por tanto, no hace falta generar funciones de empaquetado especiales para cada tipo de objeto (como sí es el caso en CORBA). La serialización de Java usa reflexión para: –averiguar el nombre de la clase del objeto a serializar y los nombres, tipos y valores de sus atributos. La deserialización en Java usa reflexión para: –crear una clase a partir del nombre de la clase de la forma serializada; –esto se usa para crear un nuevo constructor con los tipos de argumentos correspondientes a los especificados en la forma serializada; –el constructor se usa para crear un objeto con los atributos cuyos valores vienen en la forma serializada.

Arquitecturas Distribuidas ©2009 Marisol García Valls 14 Referencias a objetos remotos Un objeto remoto vive sólo en el proceso que lo ha creado y muere al morir éste. Las invocaciones a métodos remotos se transmiten a través de mensajes que contienen la información necesaria (nombre del método, parámetros, valor de retorno, etc.). Además, en una invocación remota se necesita especificar el objeto remoto sobre el que se quiere ejecutar ese método. Una referencia a objeto remoto (RR) es un identificador para un objeto que reside en algún lugar de la red; esta referencia es válida a lo largo y ancho del sistema distribuido. En la invocación remota se pasa una referencia al objeto remoto sobre el que se va a realizar la invocación de ese método. Las referencias remotas son pasadas como argumentos y devueltas como resultados. Cada objeto remoto tiene una única RR. Las RR pueden ser comparadas para averiguar si hacen referencia al mismo objeto remoto. Las RR no deben ser reutilizadas; puede haber invocantes que mantengan RR obsoletas.

Arquitecturas Distribuidas ©2009 Marisol García Valls 15 Representación externa de las referencias remotas Las RR deben ser generadas de forma que se asegure su carácter único. Una forma de asegurar RR únicas es construyéndolas por concatenación con los datos: Dirección Internet Nº de puertoHoraInterfaz de objeto remotoNº de objeto 32 bits El número de puerto es el del proceso/hilo que creó el objeto. El número de objeto se incrementa cada vez que se crea un nuevo objeto en ese proceso. El nº de puerto y nº de objeto constituyen un identificador único para el proceso en esa máquina. La interfaz es relevante para cualquier proceso que reciba una RR como argumento o resultado de una invocación remota. La interfaz permite saber los métodos ofrecidos por el objeto remoto.