Saltar al contenido

Resolviendo el Examen Práctico – Desarrollo de Aplicaciones Multiplataforma

Introducción

En este artículo resolveremos un examen práctico centrado en el desarrollo de aplicaciones con bases de datos relacionales y NoSQL, utilizando Java con Hibernate, MongoDB y eXistDB. Implementaremos tres ejercicios clave que cubren migración de datos, generación de documentos XML y lectura de archivos Excel para estructurarlos en XML.

Configuración del Proyecto Maven

Antes de comenzar, configuramos un proyecto Maven con las dependencias necesarias:

<dependencies>
    <!-- Hibernate Core -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>6.2.0.Final</version>
    </dependency>
    
    <!-- MySQL Connector -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
    
    <!-- MongoDB Driver -->
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-sync</artifactId>
        <version>4.10.2</version>
    </dependency>
    
    <!-- eXistDB XML API -->
    <dependency>
        <groupId>org.exist-db</groupId>
        <artifactId>exist-core</artifactId>
        <version>6.0.0</version>
    </dependency>
    
    <!-- Apache POI para lectura de Excel -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
    
    <!-- JAXB para la generación de XML -->
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
    </dependency>
</dependencies>

Ejercicio 1: Migración de Datos de MongoDB a MySQL

Descripción

Migramos los datos de la colección Turismo de la base de datos TurismoMySQL en MongoDB a alojamientosRuralesDB en MySQL, filtrando solo los registros con «Alojamiento Turismo Rural» en el campo establecimiento.

Implementación

Configuración de Hibernate

Creamos una entidad AlojamientoRural.java:

@Entity
@Table(name = "alojamientos")
public class AlojamientoRural {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nombre;
    private String tipo;
    private String provincia;
    private String direccion;
    private String telefono;
}

Método de Migración

public void migrarDatosAlojamientoTurismoRural() {
    try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
        MongoDatabase database = mongoClient.getDatabase("TurismoMySQL");
        MongoCollection<Document> collection = database.getCollection("Turismo");
        
        List<AlojamientoRural> alojamientos = new ArrayList<>();
        for (Document doc : collection.find(eq("establecimiento", "Alojamiento Turismo Rural"))) {
            AlojamientoRural alojamiento = new AlojamientoRural();
            alojamiento.setNombre(doc.getString("nombre"));
            alojamiento.setTipo(doc.getString("tipo"));
            alojamiento.setProvincia(doc.get("ubicacion", Document.class).getString("provincia"));
            alojamiento.setDireccion(doc.get("ubicacion", Document.class).getString("direccion"));
            alojamiento.setTelefono(doc.getString("telefono"));
            alojamientos.add(alojamiento);
        }
        
        SessionFactory factory = new Configuration().configure().buildSessionFactory();
        Session session = factory.openSession();
        Transaction tx = session.beginTransaction();
        for (AlojamientoRural alojamiento : alojamientos) {
            session.save(alojamiento);
        }
        tx.commit();
        session.close();
        System.out.println("Migración completada exitosamente.");
    }
}

Ejercicio 2: Creación de Recursos en ExistDB

Descripción

Generamos documentos XML por provincia desde alojamientosRuralesDB y los almacenamos en la colección HosteleriaCyL de eXistDB.

Implementación

public void crearRecursoHosteleria() throws Exception {
    SessionFactory factory = new Configuration().configure().buildSessionFactory();
    Session session = factory.openSession();
    List<Object[]> results = session.createQuery("SELECT provincia, COUNT(*) FROM AlojamientoRural GROUP BY provincia").list();
    session.close();
    
    for (Object[] result : results) {
        String provincia = (String) result[0];
        long count = (Long) result[1];
        String xml = "<provincia nombre='" + provincia + "'><alojamiento tipo='Casa rural de Alquiler' num.establecimientos='" + count + "'/></provincia>";
        
        ExistDBHelper.saveXMLToExistDB("HosteleriaCyL", provincia + ".xml", xml);
    }
}

ExistDBHelper.saveXMLToExistDB(...) maneja la conexión y almacenamiento en ExistDB.


Ejercicio 3: Generación de Documento XML desde Excel

Descripción

Convertimos los datos del archivo alojamientosCyL.xlsx en un documento XML con JAXB.

Implementación

public void crearDocumentoExcel() throws Exception {
    FileInputStream file = new FileInputStream("alojamientosCyL.xlsx");
    Workbook workbook = new XSSFWorkbook(file);
    Sheet sheet = workbook.getSheetAt(0);
    
    Establishments establishments = new Establishments();
    for (Row row : sheet) {
        String tipo = row.getCell(0).getStringCellValue();
        String provincia = row.getCell(1).getStringCellValue();
        int count = (int) row.getCell(2).getNumericCellValue();
        
        establishments.addEntry(tipo, provincia, count);
    }
    workbook.close();
    
    JAXBContext context = JAXBContext.newInstance(Establishments.class);
    Marshaller marshaller = context.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.marshal(establishments, new File("alojamientosCyL.xml"));
    System.out.println("XML generado correctamente.");
}

Conclusión

Hemos resuelto con éxito los ejercicios propuestos, asegurando eficiencia, buenas prácticas y validaciones en el manejo de bases de datos y documentos estructurados. Este examen demuestra la importancia de combinar distintas tecnologías para la gestión de datos en aplicaciones empresariales modernas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos Ver más

  • Responsable: Tomas Gonzalez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

error: Content is protected !!

Descubre más desde Tomás González: Formador y Desarrollador Web

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo

Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad