Está en la página 1de 20

CASOS

PRÁCTICOS
ACCESO A DATOS

DESARROLLO DE APLICACIONES
MULTIPLATAFORMA
TEMA 1
Gestión de ficheros

Caso práctico 1
Has recibido el encargo de desarrollar una aplicación en Java para
una universidad para la que necesitas acceder al nombre y apellido
de los alumnos, así como a la facultad en la que están matricula-
bit.ly/3D308Xy dos. La universidad puede proporcionarte dichos datos en archivos
con formato XML, que deberás transformar en objetos Java. Por
el momento cuentas con dos archivos para pruebas denominados
Alumno.xml y Alumno.xsd (puedes descargarlos en este enlace).

Explica de manera razonada cómo realizarías el proceso de con-


versión.

Caso práctico 2
Has desarrollado un método en Java para el proyecto de un clien-
te, y necesitas documentarlo debidamente con JavaDoc antes de
entregar el código. Se denomina encendido y pertenece a la clase
bombilla (por lo tanto, podemos referirnos a él como bombilla#en-
cendido). Este método recibe un valor entre 0 y 1 a través de una
variable denominada onoff; si su valor es cero, el método apaga
una bombilla, mientras que si es uno, la enciende. El método nos
informa mediante una cadena con el resultado del método: Encen-
dida o Apagada.

Escribe unos comentarios donde se especifiquen los siguientes


datos:

• Descripción general del código con enlace a una página web cor-
porativa.

• Parámetro aceptado por el método.

• Qué excepción se puede producir si no se proporciona ningún valor.

• Cuál es el resultado del método y una referencia a otro método


relacionado dentro de la misma clase llamado voltaje, cuya fun-
ción es regular la intensidad de la luz.

2 Casos prácticos
TEMA 2
Gestión de conectores (desarrollo
de aplicaciones que gestionan
información en bases de datos
relacionales)

Caso práctico 1
Estás desarrollando una aplicación para controlar las existencias de
un mayorista de componentes informáticos, y uno de los requeri-
mientos establecidos por el cliente es que la base de datos de los
productos se cree en un servidor web que trabaja con MySQL.

1. ¿Qué consulta utilizarías para crear la base de datos?

2. ¿Y para crear una tabla con las marcas, modelos y caracte-


rísticas básicas de las CPU en venta?

Caso práctico 2
Siguiendo con el ejemplo anterior, el cliente dispone ya de otra
base de datos llamada software en la instancia de MySQL instalada
en su servidor web (llamado servidor1), que en este caso contiene
los sistemas operativos y aplicaciones que comercializa.

Describe de manera resumida los pasos que seguirías para crear


una clase que conecte con dicha base de datos.

Acceso a datos 3
TEMA 3
Herramientas de mapeo
objeto-relacional (ORM)

Caso práctico 1
Un fabricante utiliza una aplicación Java para controlar su ma-
quinaria de corte de piezas de aluminio. Se trata de un brazo que
puede desplazarse en los ejes X, Y, Z, y que incorpora una sierra cir-
cular para efectuar cortes. El control del movimiento, así como del
encendido y apagado de la sierra, se efectúa mediante una clase
llamada brazo, que obtiene las instrucciones para cada pieza a cor-
tar desde una base de datos. El cliente desea ampliar las funciones
de la aplicación, para lo cual debes llevar el proyecto original al IDE
de tu elección, en este caso Eclipse.

¿Cómo integrarías la información de esta clase en la base de


datos de tu nuevo proyecto mediante un archivo de mapeo de
Hibernate?

Caso práctico 2
Una vez completada nuestra aplicación para el control del brazo
robótico, es recomendable crear una clase DAO que contenga todos
los métodos que se utilizan para realizar las operaciones de crea-
ción, lectura, actualización y eliminación de registros en la base de
datos, y otra clase que se encargue de la ejecución de una serie de
pruebas para verificar que dichas operaciones se ejecutan correc-
tamente.

Suponiendo que a la clase DAO la denominemos BrazoDAO, y que


esta contenga el método updateBrazo() para actualizar los datos
de la entidad, escribe el código que usarías para realizar una prue-
ba de dicho método.

4 Casos prácticos
TEMA 4
Bases de datos objeto-relacionales y
orientadas a objetos

Caso práctico 1
En un proyecto desarrollado para una academia de inglés utilizando
Oracle y el lenguaje PL/SQL, tenemos definido el siguiente objeto:

CREATE TYPE calificaciones AS OBJECT (


vocabulario NUMBER(2),
gramatica NUMBER(2),
exp_oral NUMBER(2),
MEMBER FUNCTION total RETURN NUMBER,
MEMBER FUNCTION nota_final RETURN VARCHAR2);

Explica el significado de las declaraciones sabiendo que en él se


representan las notas de los estudiantes en las áreas de vocabula-
rio, gramática y expresión oral, así como la suma de las tres y una
nota final que puede ser Aprobado o Suspendido.

Caso práctico 2
Crea las funciones total y nota_final referidas en el caso anterior,
teniendo en cuenta que, si la suma de las calificaciones es menor
que 15, la nota final será Suspendido.

5
TEMA 5
Bases de datos XML

Caso práctico 1
Dispones de un documento correspondiente a la base de datos de
una videoteca (videoteca.xml):

<?xml version="1.0" encoding="UTF-8"?>


<videoteca>
<film>
<título lang="en">Alien<título>
<director>Ridley Scott</director>
<año>1979</año>
</film>
<film>
<título lang="es">¡Bienvenido, Míster Marshall!<título>
<director>Luis García Berlanga</director>
<año>1953</año>
</film>
<film>
<título lang="en">A fish called Wanda<título>
<director>Charles Crichton</director>
<año>1988</año>
</film>
</videoteca>

Crea una consulta que muestre el título de las películas posteriores


a 1975. Emplea para ello XPath a través de Java usando las clases
XPathFactory (crea objetos XPath), XpathExpresion (almacena la
información de la sentencia XPath) y XPath (auxiliar en la creación
de la expresión).

Caso práctico 2
Escribe ahora una consulta en lenguaje XQuery que nos devuelva
el título de las películas dirigidas por Ridley Scott que constan en el
archivo videoteca.xml.

6 Casos prácticos
TEMA 6
Programación de componentes de
acceso a datos

Caso práctico 1
Un cliente tiene un proyecto alojado en un repositorio remoto, y
tienes que importarlo a tu IDE para continuar con su desarrollo.

¿Qué IDE utilizarías y cuáles serían los pasos para clonar el Git?

Caso práctico 2
Has desarrollado en Eclipse un proyecto de tipo EJB que incluye
una interfaz para cambiar textos de mayúsculas a minúsculas y
viceversa.

Escribe un archivo JSP que nos permita escribir un texto de hasta


100 caracteres y nos ofrezca cuatro alternativas: mayúscula al prin-
cipio de cada frase, todo mayúsculas, todo minúsculas y mayúscula
primer carácter de cada palabra.

Acceso a datos 7
SOLUCIONARIO
TEMA 1
Gestión de ficheros

Solución del caso práctico 1


En primer lugar, es necesario escoger el método de acceso a los
datos que vamos a utilizar. Dado que en este caso estamos hablando
de datos serializados en archivos con formato XML, lo más indicado
es usar la biblioteca JAXB, ya que con ella resulta muy sencillo crear,
cargar y manipular archivos con este formato.

Una primera aproximación consiste en utilizar String para importar


manualmente los datos del XML:

String CadenaXML = “<Alumno>” +


“ <Facultad>” +
“ <ID>1</ID>” +
“ <NombreFacultad>Historia</
NombreFacultad>” +
“ </Facultad>” +
“ <NombreAlumno>Juan</
NombreAlumno>” +
“ <ID>1</ID>” +
“ <ApellidoAlumno>Serrano</
ApellidoAlumno>” +
“</Alumno>”;

A continuación, tenemos que usar la clase JAXBContext, que nos


da acceso a la API de JAXB y proporciona los métodos necesarios
para presentar (marshal), reconstruir (unmarshal) y validar las
operaciones:

JAXBContext jaxbContext;
try
{
jaxbContext = JAXBContext.newInstance(Alumno.
class);

Unmarshaller jaxbUnmarshaller = jaxbContext.


createUnmarshaller();

Alumno alumno = (Alumno) jaxbUnmarshaller.


unmarshal(new StringReader(CadenaXML));

System.out.println(alumno);
}

Acceso a datos 9
En nuestro ejemplo, la salida resultante sería la siguiente:

Alumno [ID=1, NombreAlumno=Juan, ApellidoAlumno=Serrano, Facultad=Facultad


[ID=1, NombreFacultad=Historia]]

Finalmente, implementamos el código para la detección de excep-


ciones:

catch (JAXBException e)
{
e.printStackTrace();
}

Uno de los requisitos de JAXB es que el archivo XML al que vayamos


acceder sea válido, por lo que sería necesario implementar un mé-
todo de validación en nuestro código; dado que vamos a usar JAXB,
lo más indicado sería validar el XML contra el archivo de esquema
XSD antes de poblar el objeto Java. Lo primero es, por lo tanto, re-
emplazar el código XML que hemos copiado manualmente por un
acceso directo al contenido de los archivos Alumno.xml y Alumno.
xsd, completando nuestro código con la definición de la clase y del
método principal:

public class AlumnosUniversidad


{
public static void main(String[] args)
{
String ArchivoXML = "Alumno.xml";
String ArchivoXSD = "Alumno.xsd";
jaxbXmlFileToObject(ArchivoXML, ArchivoXSD);
}
private static void jaxbXmlFileToObject(String ArchivoXML,
String ArchivoXSD) {

10 Solucionario
A continuación, incluimos el código de validación:

JAXBContext jaxbContext;
try
{
jaxbContext = JAXBContext.newInstance(Alumno.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

//Validación contra esquema


SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_
SCHEMA_NS_URI);
Schema EsquemaAlumno = sf.newSchema(new File(ArchivoXSD));
jaxbUnmarshaller.setSchema(EsquemaAlumno);

Alumno alumno = (Alumno) jaxbUnmarshaller.unmarshal(new File(Archi-


voXML));
System.out.println(alumno);
}

Finalmente, incluimos SAXException para manejar los errores que


se puedan producir durante la validación:

catch (JAXBException | SAXException e)


{
e.printStackTrace();
}
}
}

Recuerda que deberás importar las clases necesarias al principio de


tu código, en particular las siguientes:

import java.io.File;
import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import org.xml.sax.SAXException;

Acceso a datos 11
Solución del caso práctico 2

/**
* <p>Método para encender y apagar una bombilla.
* <a href=”http://www.miweb.es”>Web
corporativa</a>
* </p>
* @param onoff Valor entre 0 (apagada) y 1
(encendida)
* @exception IOException si no se introduce
ningún valor
* @return Se devuelve una cadena con el estado
actual de la bombilla
* @see bombilla#voltaje
*/

Recuerda también que la etiqueta @exception puede reemplazarse


por @throws, y que, al tratarse de un método, en este caso no pro-
cede usar las etiquetas @author y @version, ya que por convención
estas se reservan para la documentación de clases e interfaces.

12 Solucionario
TEMA 2
Gestión de conectores (desarrollo
de aplicaciones que gestionan
información en bases de datos
relacionales)

Solución del caso práctico 1


Para crear la base de datos en MySQL podemos usar una consulta
como la siguiente:

CREATE DATABASE almacén;


CREATE USER ‘usuario1’@’localhost’ IDENTIFIED BY ‘1234’;
GRANT ALL PRIVILEGES ON *.* TO ‘usuario1’@’localhost’;

La consulta crea una base de datos llamada almacén y un nuevo


usuario llamado usuario1, al cual asignamos la contraseña 1234 y
concedemos todos los privilegios que le permitirán añadir y editar
tablas, filas o columnas.

Para crear una tabla con el fabricante, modelo, tipo de zócalo y


velocidad de los procesadores, podemos usar una consulta como
esta:

CREATE TABLE procesadores (


id INT PRIMARY KEY AUTO_INCREMENT;
marca VARCHAR(50) NOT NULL,
modelo VARCHAR(50) NOT NULL,
zócalo VARCHAR(50),
velocidad INT DEFAULT 0;
);

Acceso a datos 13
Solución del caso práctico 2
1. Registrar el controlador JDBC usando el método forName() e
indicando su nombre como parámetro (com.mysql.jdbc.Driver):

Class.forName(“com.mysql.jdbc.Driver”);

2. Indicar la URL de la base de datos mediante DriverManager.get-


Connection(). Como parámetros del método getConnection()
debemos incluir la dirección (jdbc:mysql://servidor1/software,
donde especificamos el nombre del servidor web y de la base
de datos), así como el nombre y contraseña del usuario con el
que queremos acceder a los datos:

DriverManager.getConnection(jdbc:mysql://servidor1/software, usuario1, 1234);

TEMA 3
Herramientas de mapeo objeto-
relacional (ORM)

Solución del caso práctico 1


Para relacionar la clase Java y nuestra base de datos utilizaremos el
archivo de mapeo brazo.hbm.xml. Al ser un archivo XML, debemos
incluir en su cabecera la declaración del tipo de documento y aña-
dir la referencia de Hibernate, que nos proporcionará las etiquetas
permitidas:

<?xml version=’1.0’ encoding=’UTF-8’?>


<!DOCTYPE hibernate-mapping
PUBLIC “-//Hibernate/Hibernate Mapping DTD 5.3//EN”
“http://hibernate.sourceforge.net/hibernate-mapping-5.3.dtd”>

A continuación, utilizamos la etiqueta hibernate-mapping para


incluir la parametrización del XML, y finalmente, dentro de esta
sección, usamos la etiqueta class para definir el nombre de la clase
y su equivalencia en una tabla de la base de datos, así como todos
los atributos que contempla dicha clase, como la clave primaria (id)
y todas las propiedades (property); las propiedades deben incluir el

14 Solucionario
nombre de la propiedad Java (name), su equivalente en la base de
datos (column) y, opcionalmente, el tipo de datos (type):

<hibernate-mapping>
<class name="main.java.objetos.brazo" table="brazo">
<id name="Id" type="integer">
<generator class="assigned"></generator>
</id>
<property name="Eje_X" column="Eje_X" type="float"/>
<property name="Eje_Y" column="Eje_Y" type="float" />
<property name="Eje_Z" column="Eje_Z" type="float"/>
<property name="On_Off" column="On_Off" type="boolean"/>
</class>
</hibernate-mapping>

No olvides que el nombre de la clase debe corresponder al paquete


donde se halla, en nuestro caso, main.java.objetos.brazo, y tampo-
co de incluir el archivo de mapeo en el archivo de configuración de
Hibernate (hibernate.cfg.xml), dentro de la sección session-factory:

<mapping resource=”brazo.hbm.xml”/>

Solución del caso práctico 2

@Test
public void testActualizar() {
boolean b = true;
BrazoDAO dao = new BrazoDAO();
Brazo brazo = new Brazo();
brazo.setEje_X(235);
brazo.setEje_Y(145);
brazo.setEje_Z(90);
brazo.setOn_Off(true);
brazo.setId(1);
assertTrue(dao.updateBrazo(brazo));
}

Recuerda que cada prueba de un método debe llevar la anotación


@Test.

Acceso a datos 15
TEMA 4
Bases de datos objeto-relacionales y
orientadas a objetos

Solución del caso práctico 1


1. En primer lugar, se crea el objeto usando CREATE TYPE seguido
del nombre del objeto, en este caso, calificaciones.

2. A continuación se representan las notas de las diferentes áreas


de evaluación mediante un número entero de dos cifras (damos
por supuesto que el rango numérico admitido irá del 0 al 10).

3. Las instancias MEMBER FUNTION llaman a dos funciones: total,


que devuelve la suma de las calificaciones en formato numé-
rico, y nota_final, que devuelve una cadena de caracteres (en
este caso, Aprobado o Suspendido).

Solución del caso práctico 2

CREATE TYPE BODY calificaciones AS (


MEMBER FUNTION total RETURN NUMBER IS
BEGIN
RETURN(vocabulario+gramatica+exp_oral);
END;
MEMBER FUNTION nota_final RETURN VARCHAR2 IS
nota NUMBER(2);
BEGIN
nota:=vocabulario+gramatica+exp_oral;
IF nota < 15 THEN
RETURN(‘Suspendido’);
ELSE
RETURN(‘Aprobado’);
END IF;
END;
END;

16 Solucionario
TEMA 5
Bases de datos XML

Solución del caso práctico 1

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();


factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(“videoteca.xml”);
XPathFactory xpathfactory = XPathFactory.newInstance();
XPath xpath = xpathfactory.newXPath();
System.out.println(“n//1) Películas posteriores a 1975”);
XPathExpression expr = xpath.compile(“//film[@año>1975]/título/text()”);
Object result = expr.evaluate(doc,XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0;
i < nodes.getLength();
i++) {
System.out.println(nodes.item(i).getNodeValue());
}

Solución del caso práctico 2

<result>
{
for $consulta in doc(“videoteca.xml”)/videoteca/film
where $consulta/director=“Ridley Scott”
return $consulta/título
}

Acceso a datos 17
TEMA 6
Programación de componentes de
acceso a datos

Solución del caso práctico 1


Es posible trabajar con repositorios Git tanto en NetBeans como
en IntelliJ Idea, así como en Eclipse mediante el uso de un com-
plemento, pero Idea, además de ofrecer soporte para Git nativo,
analiza de forma inteligente los archivos y nos permite crear de una
manera muy simple un nuevo proyecto con la configuración más
adecuada, por lo que en este caso sería la opción recomendada.

La importación del Git se puede realizar en un proyecto abierto


desde el menú principal (Git > Clone) o usando la opción Get from
VCS de la pantalla de bienvenida. Para acceder al Git remoto debe-
mos especificar su dirección URL o seleccionar uno de los servicios
de hospedaje de VCS listados en el diálogo de conexión, de los cua-
les, una vez iniciada la sesión, podemos obtener una relación de
repositorios disponibles para su importación. También deberemos
especificar el directorio de nuestro entorno de desarrollo donde se
realizará la clonación.

La herramienta permite crear un proyecto basado en los archivos


clonados, estableciendo el directorio raíz del proyecto como la raíz
del repositorio y clonando y registrando, como raíces del proyecto,
todos los submódulos detectados.

Por último, Idea analiza el proyecto clonado y detecta su archivo


de configuración. Si detectase varios de ellos, como Eclipse o Grad-
le, se nos preguntará cuál de las configuraciones queremos usar,
y configurará el nuevo proyecto de acuerdo a ella, incluyendo la
ejecución de scripts y la carga de dependencias.

18 Solucionario
Solución del caso práctico 2

<html>
<head>
<title>Mayúsculas y minúsculas</title>
</head>
<body>
<h1>Conversiones de mayúsculas a minúsculas</h1>
<hr>
<form action=”conversiones.jsp” method=”POST”>
<p>Escriba el texto a convertir:
<input type=”text” name=”texto” required maxlength=”100”
size=”105”></p><br>
<b>Seleccione una opción</b><br>
<input type=”radio” name=”convierte1” value =”may_punto”>
Principio de frase<br>
<input type=”radio” name=”convierte2” value =”todo_may”>
Todo mayúsculas<br>
<input type=”radio” name=”convierte3” value =”todo_min”>
Todo minúsculas<br>
<input type=”radio” name=”convierte4” value =”may_pal”>
May. cada palabra<br>
<p>
<input type=”submit” value=”Enviar”>
<input type=”reset” value=”Borrar”></p>
</form>
</body>

Acceso a datos 19
CASOS
PRÁCTICOS
ACCESO A DATOS

DESARROLLO DE
APLICACIONES MULTPLATAFORMA

Centro integral de
formación profesional

También podría gustarte