Activitats

Generació i verificació dels programes del material paper corresponents a l'API XQJ

L’objectiu d’aquesta activitat és generar els bytecode corresponents als programes presentats en el material paper corresponents a l’API XQJ i comprovar-ne la correcta execució.

Compileu els programes presentats en el material paper, corresponents a l’API XQJ (XQJ*.java), que podeu trobar a l’arxiu següent:

XQJ_CodiFont.zip ( 19.7 KB )

Dissenyar i implementar la capa de persistència per a una aplicació Java sobre una BD (eXist-db / Sedna / BaseX) utilitzant l'API Java XQJ

L’objectiu d’aquesta activitat és dissenyar i implementar la capa de persistència necessària per a qualsevol aplicació Java que vulgui gestionar una base de dades emmagatzemada en un SGBD-XML natives que faciliti l’API Java XQJ, utilitzant aquesta API per a la persistència. Els SGBD-XML natives eXist-db, BaseX i Sedna en són candidats.

Concretament, es demana la capa de persistència per a una base de dades creada en qualsevol dels tres SGBD esmentats, que contingui el fitxer empresa.xmldel qual també se’n facilita el seu DTD. Podeu descarregar aquí els fitxers:

empresa.xml ( 974 B )

empresa.dtd ( 442 B )

Observeu el contingut de la base de dades i, a partir del fitxer DTD subministrat, les relacions i requeriments de les seves dades. Convindreu que un diagrama de classes adequat podria ser el següent:

Figura

Implementar la navegabilitat bidireccional en les dues associacions, com indica el diagrama, és força complicat. Així que, per fer-ho una mica més senzill, considerarem que:

  • La classe Dept incorpori la col·lecció d’empleats i admetrem que la col·lecció pugui no estar inicialitzada (valor null), fet que indicarà que no s’han recuperat els empleats des de la base de dades. D’aquesta manera podrem recuperar de la BD els departaments amb o sense empleats, segons ens convingui.
  • La classe Emp incorpori el codi del departament al qual pertany l’empleat (enlloc d’una referència a l’objecte departament). D’aquesta manera podrem recuperar de la BD un empleat sense haver de recuperar el departament.
  • I respecte l’associació <téPerCap – ésCapDe>, la classe Emp incorpori el codi de l’empleat que és el cap (en cas de tenir un cap) o null en cas contrari.

Dissenyeu i implementeu les classes Java (Emp i Dept) per facilitar la gestió de dades corresponents a empleats i departaments.

Dissenyeu i implementeu la capa de persistència, en una classe anomenada GestorBD, que faciliti la connectivitat i serveixi de pont entre l’SGBD i les interfícies que es puguin desenvolupar per gestionar les dades de la BD. Com que es podrien dissenyar i implementar molts mètodes, únicament es demanen els mètodes següents:

  • Constructor, que estableix la connexió amb la BD.
  • tancarSessió, per tancar la connexió amb la BD.
  • getDeptSenseEmp, per obtenir un departament des de la BD, sense els seus empleats (col·lecció d’empleats a null).
  • getDeptAmbEmp, per obtenir un departament des de la BD, amb els seus empleats (col·lecció d’empleats, que en particular pot estar buida, fet que indicarà que el departament no té cap empleat).
  • insertDept, per inserir un departament a la BD, tenint en compte que si el departament incorpora els empleats, aquests també han de ser inserits.
  • deleteDept, per eliminar un departament de la BD, tenint en compte que si el departament té empleats, el mètode ha de facilitar l’opció d’eliminar també els empleats o de reassignar-los a un altre departament existent a la BD.
  • replaceDept, per substituir un departament de la BD per un altre departament, actuant de forma coherent amb els empleats del departament substituït i amb els empleats del nou departament.

Atès que els tres SGBD amb els quals estem practicant (eXist-db, BaseX i Sedna) faciliten l’API XQJ, podríem provar de desenvolupar la capa de persistència que fos comuna per als tres SGBD. Això és relativament fàcil d’aconseguir en les consultes, però en les actualitzacions ja és més complicat, atès que BaseX facilita el llenguatge XQUF mentre que Sedna i eXist-db faciliten una extensió Update d’XQuery promoguda per P. Lehti (i amb diferències en algunes instruccions).

Dissenyeu i implementeu una classe de nom ProvaGestorBD per comprovar el funcionament dels mètodes desenvolupats a GestorBD des d’una consola textual.

Possible solució

L’arxiu XQJ-Activitat.zip conté la solució proposada a l’activitat. Descarregueu l’arxiu tot seguit:

xqj-activitat.zip ( 74.2 KB )

La classe GestorBD conté explicacions detallades en el seu codi i s’ha desenvolupat de manera que sigui comuna per a BaseX, Sedna, eXist-db i altres SGBD amb API similars a aquestes. El constructor de la classe explica quin ha de ser el contingut d’un arxiu de configuració properties.xml personalitzat per a cada SGBD. Per poder comprovar el funcionament en els tres SGBD, s’ha afegit un paràmetre al constructor GestorBD per on es comunica l’SGBD a què volem connectar-nos (BaseX, Sedna o eXist-db) i en cada cas utilitza el fitxer properties<nomSGBD>.xml que es facilita.

Els fitxers properties<nomSGBD>.xml que es faciliten estan preparats tenint en compte que el fitxer empresa.xml s’ha carregat en les següents ubicacions:

  • SGBD BaseX: dins una base de dades anomenada empresa.
  • SGBD eXist-db: dins una col·lecció anomenada empresa que penja de l’arrel.
  • SGBD Sedna: dins una col·lecció anomenada empresa que penja d’una base de dades anomenada db.

L’arxiu solució conté la carpeta doc, amb la documentació Java (generada amb javadoc) de les classes facilitades.

Observeu que tota la persistència es centra a la classe GestorBD, de manera que si canviem l’API d’accés només haurem de canviar aquesta classe.

Per generar els bytecode i comprovar-ne el funcionament, cal:

  1. Tenir els paquets on resideixen les llibreries XQJ facilitades per als SGBD incorporats al CLASSPATH actiu.
  2. Situar-se dins la carpeta on hem descomprimit l’arxiu solució i compilar els fonts: javac -d . *.java.
  3. Tenir els servidors eXist-db i Sedna engegats (per comprovar-ne el funcionament). El servidor BaseX no cal tenir-lo engegat, ja que l’API XQJ actual només permet accés local.
  4. Tenir el fitxer empresa.xml carregat tal com s’indica més amunt. El fitxer properties.xml que es facilita conté la configuració corresponent, però es pot canviar si el fitxer empresa.xml s’ubica en un lloc diferent a l’indicat.
  5. Executar el programa de prova:
    java -Dfile.encoding=cp850 empresa.ProvaGestorBD

Anar a la pàgina següent:
Exercicis d'autoavaluació