Fecha de efectividad: __________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formato para prácticas de laboratorio CARRERA PLAN DE ESTUDIO CLAVE ASIGNATURA NOMBRE DE LA ASIGNATURA Lic. En Sistemas Computacionales 2003-1 5038 Programación Orientada a Objetos 2 PRÁCTICA No. LABORATORIO DE 7 NOMBRE DE LA PRÁCTICA 1 DURACIÓN (HORA) Serialización 2 INTRODUCCIÓN En esta práctica se desarrollará un programa para comunicación entre procesos mandando objetos persistentes utilizando el protocolo TCP. 2 OBJETIVO (COMPETENCIA) El alumno será capaz de desarrollar programas utilizando la comunicación entre procesos haciendo uso de la serialización. 3 FUNDAMENTO Serialización Persistir = Hacer durar (perdurar la existencia de) los objetos los mas allá de la duración de la máquina virtual que los aloja. Los objetos Java residen en memoria para hacerlos durar mas que la JVM, hay que aplanarlos, salvar el estado a una secuencia de bytes que poder recuperar luego para reconstruir el objeto en una JVM futura y/o distante (serialización) Un objeto se puede marcar como persistente implementando la interfaz java.io.Serializable, lo que significa que el objeto puede aplanarse" en forma de bytes y restaurarse" mas tarde a partir de estos. Formuló L.S.C. Verónica Quizan García Revisó Aprobó Autorizó Maestro Coordinador de la Carrera Gestión de la Calidad Director de la Facultad Página 1 de 6 Código GC-N4-024 . Revisión 0 . Fecha de efectividad: __________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formato para prácticas de laboratorio Primer paso: implements java.io.Serializable Ejemplo.Aquí Serializable es sólo una Marker Interface : permite que el mecanismo de serialización de java verifique que la clase puede hacerse persistente. 10 import java.io.Serializable; 20 import java.util.Date; 30 import java.util.Calendar; 40 public class FechaPersistente implements Serializable 50 { 60 private Date fecha; 70 80 public FechaPersistente() 90 { 100 fecha = Calendar.getInstance().getTime(); 110 } 120 130 public Date obtenerFecha() 140 { 150 return fecha; 160 } 170 } ¿Qué clases pueden hacerse persistentes del API de Java? Las que implementan la interfaz Serializable Object NO implementa Serializable String y array SI implementan Serializable Thread, OutputStream, Socket NO son serializables porque no tiene sentido Etc. (consultar el API) Formuló L.S.C. Verónica Quizan García Revisó Aprobó Autorizó Maestro Coordinador de la Carrera Gestión de la Calidad Director de la Facultad Página 2 de 6 Código GC-N4-024 . Revisión 0 . Fecha de efectividad: __________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formato para prácticas de laboratorio Siguiente paso: hacer persistir el objeto con un ObjectOutputStream, que es un filter stream (una envoltura de un stream de mas bajo nivel que maneje el protocolo de serialización por nosotros ) El stream envuelto (node stream) puede ser un Fichero (FileOutputStream) o un socket, por ejemplo. Ejemplo: Aplanado 10 import java.io.ObjectOutputStream; 20 import java.io.FileOutputStream; 30 import java.io.IOException; 40 public class AplanarFecha 50 { 60 public static void main(String [] args) 70 { 80 String nombreFichero = "fecha.ser"; 90 if(args.length > 0) 100 { 110 nombreFichero = args[0]; 120 } 130 FechaPersistente fecha = new FechaPersistente(); 140 FileOutputStream fos = null; 150 ObjectOutputStream out = null; 160 try 170 { 180 fos = new FileOutputStream(nombreFichero); 190 out = new ObjectOutputStream(fos); 200 out.writeObject(fecha); 210 out.close(); 220 } 230 catch(IOException ex) 240 { 250 ex.printStackTrace(); 260 } 270 } 280 } Formuló L.S.C. Verónica Quizan García Revisó Aprobó Autorizó Maestro Coordinador de la Carrera Gestión de la Calidad Director de la Facultad Página 3 de 6 Código GC-N4-024 . Revisión 0 . Fecha de efectividad: __________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formato para prácticas de laboratorio Ejemplo: Restaurado 10 import java.io.ObjectInputStream; 20 import java.io.FileInputStream; 30 import java.io.IOException; 40 import java.util.Calendar; 50 public class RestaurarFecha 60 { 70 public static void main(String [] args) 80 { 90 String nombreFichero = "fecha.ser"; 100 if(args.length > 0) 110 { 120 nombreFichero = args[0]; 130 } 140 FechaPersistente fecha = null; 150 FileInputStream fis = null; 160 ObjectInputStream in = null; 170 try 180 { 190 fis = new FileInputStream(nombreFichero); 200 in = new ObjectInputStream(fis); 210 fecha = (FechaPersistente)in.readObject(); 220 in.close(); 230 } 240 catch(IOException ex) 250 { 260 ex.printStackTrace(); 270 } 280 catch(ClassNotFoundException ex) 290 { 300 ex.printStackTrace(); 310 } 320 // Imprimir fecha restaurada 330 System.out.println("Fecha restaurada: " + fecha.obtenerFecha()); 350 // Imprimir fecha actual 360 System.out.println("Fecha actual: " + Calendar.getInstance().getTime()); 370 } 380} Como readObject() puede leer cualquier objeto serializable, hace falta un downcasting al tipo adecuado, fecha persistente en este caso. Formuló L.S.C. Verónica Quizan García Revisó Aprobó Autorizó Maestro Coordinador de la Carrera Gestión de la Calidad Director de la Facultad Página 4 de 6 Código GC-N4-024 . Revisión 0 . Fecha de efectividad: __________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formato para prácticas de laboratorio 4 PROCEDIMIENTO (DESCRIPCIÓN) EQUIPO NECESARIO A MATERIAL DE APOYO Computadora con sistema operativo Linux B Practica impresa DESARROLLO DE LA PRÁCTICA Desarrolle las clases pertinentes en el siguiente planteamiento Se requiere elaborar y serializar un listado de objetos utilizando el protocolo TCP para envío de los objetos persistentes mediante el siguiente menú. Menú principal • 1. • 2. • 3. • 4. • 5. • 6. Alta de un registro. Baja de un registro. Listado de datos. Serializar. Deserializar. Salir. Caso 1. Captura de sólo un registro en un arreglo (ya sea de objetos o vectores simples) Valide el tamaño máximo de los arreglos. Caso 3. Listado de los datos en los arreglos de forma tabular Ejemplo: Clave 100 200 300 Nombre Claudia Ramirez Miguel Diaz Maria Lopez Grupo A B A Caso 4. Pida el host y puerto que correspondan al receptor. Envíe él o los objetos guardados en el arreglo. Caso 5. Pida el puerto en el que esperará por una conexión, y el tiempo máximo de espera por una conexión en milisegundos para evitar el bloqueo indefinido de su aplicación. Al aceptar la conexión se inicializarán los arreglos y se llenarán con los objetos recibidos. Formuló L.S.C. Verónica Quizan García Revisó Aprobó Autorizó Maestro Coordinador de la Carrera Gestión de la Calidad Director de la Facultad Página 5 de 6 Código GC-N4-024 . Revisión 0 . Fecha de efectividad: __________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formato para prácticas de laboratorio Ejecución Corra dos veces su aplicación una para el emisor y otra para el receptor, de esta forma solo habrá un programa que podrá tomar el rol que el usuario desee. Los datos a serializar según sea el día de laboratorio son: Lunes Clave Entero Descripción Cadena Peso Flotante Martes Cantidad Moneda Tipo de cambio Entero Cadena Flotante Miércoles Matricula Nombre Sexo Entero Cadena Caracter En existencia Porcentaje Ingrediente Booleano Flotante Cadena Jueves Viernes Evento Lugar Fecha Cadena Entero Fecha C 5 CÁLCULOS Y REPORTE RESULTADOS Y CONCLUSIONES El alumno deberá desarrollar un programa utilizando serialización, sockets y estructuras de java. 6 ANEXOS http://java.sun.com Formuló L.S.C. Verónica Quizan García Revisó Aprobó Autorizó Maestro Coordinador de la Carrera Gestión de la Calidad Director de la Facultad Página 6 de 6 Código GC-N4-024 . Revisión 0 .