JDO con OJB

0
24953

Introducción a JDO y OJB

Desde hace años, hemos vistos como distintas soluciones para mapear nuestras
clases persistentes a bases de datos, no han acabado de consolidarse ….

La única diferencia actual, respecto a los modelos anteriores, es que parece
que se ha realizado una normalización a nivel internacional.

Bajo el JCP o Java
Community process JSR-12
se ha definido las especificación de como deben
ser la implementaciones de JDO. Nosotros vamos a utilizar una implementación
gratuita de apache llamada ObJectRelationalBridge
(OJB)
.

Me ha costado un poco montarlo (muchas más horas de lo que me hubiera
gustado) porque las instrucciones no son excesivamente intuitivas (jejejeje, ya
lo veréis) pero hay que destacar que, el resultado final, me ha sorprendido
gratamente……. No os asustéis porque aunque os describo los pasos, al final,
podemos saltarnos casi todos …….

La gracia de este sistema es que, una clase normal, sin realizar
transformaciones sobre ella, puede mapearse a una base de datos y permitir una
manipulación trivial de datos.

Resumiendo lo que vamos a hacer:

  • Instalamos el entorno
  • Generamos el esqueleto de las futuras aplicaciones (ojb-blank.jar)
  • Construimos nuestra clase persistente (Tutoriales.java)
  • Construimos la clase que utiliza la persistente (Test.java)
  • Modificamos los ficheros de configuración de OJB
  • Empaquetamos el resultado
  • Generamos las tablas en base de datos
  • Desplegamos el resultado
  • Ejecutamos la prueba

 

Descarga de OJB

Como siempre, vamos a empezar descargándonos
el entorno y haciendo un ejemplo simple.

Nos bajamos la versión binaria en ZIP y la descomprimimos. 

También descargaremos los fuentes, ya que queremos obtener de ellos un
fichero con la estructura básica de un proyecto (ojb-blank.jar).

Éste es el aspecto una vez descomprimidos ambos zips (código y binarios)

Vamos a seguir el tutorial y contaros como hemos ido arreglando los problemas
que nos hemos encontrado http://db.apache.org/ojb/getting-started.html.

En tutorial nos guía pero requiere mucho esfuerzo e imaginación. 

Descarga de ANT

Es necesaria una  versión de ANT (nos hemos descargado la versión
1.6). Podéis
recordar como se hacia en otro de nuestros tutoriales
.

Recordar que hay que establecer la variable de entorno ANT_HOME e incluir el
trayecto de ant en el path.

 

Generación de ojb-blank.jar

Seguimos las instrucciones para generar el paquete de ojb-blank.jar

Para ello, ejecutamos el comando:

ant ojb-blank

Y nos falla… porque nos faltan ficheros jar … (ejecutar ant ojb-blank
-verbose
para más información)

Debemos ir al siguiente enlace para ver donde encontrarlos: 

http://db.apache.org/ojb/dependencies.html

Para que nos funcione tenemos que obtener los siguiente ficheros (seguir los
enlaces de j2ee, jta y jdo)

Si volvemos ahora al comando ant, ya nos aparece el fichero ojb-blank.jar.

Vamos a descomprimir el fichero en un directorio.

En el futuro ya no tendremos que repetir lo anterior.

Código de nuestra aplicación

Y vamos a crear la clase que queremos que represente una tabla en base de
datos  (la copiaremos en el directorio src).

Es una clase completamente normal (Diríamos que es como un VO, Value Object).

Ahora creamos la clase de prueba que utiliza el API, para acceder de un modo
transparente a las capacidades persistentes.

Compilación de la aplicación

Vamos a compilar el proyecto sobre el esqueleto creado por ojb-blank.

Si vamos al directorio que hemos elegido …. y ejecutamos en comando ant
……  falla … 

Hay que hacer un pequeño cambio en los ficheros para que compile ….
aprovechamos y hacemos alguno más que nos sea interesante.

El build.properties posee variables sacadas del build.xml…. (las
ajustamos a MySql)

También cambiamos el build.xml (el script de ant).

Al final hemos añadido un target para ayudar a la ejecución futura (incluir
todos los jar en el classpath)

Hay que modificar otros ficheros para configurar el comportamiento del
sistema de mapping.

Modificamos el fichero repository_database.xml 

Y tenemos que especificar como queremos que se resuelva el mapeo entre los
elementos de la clase y las tablas, en el fichero repository_user.xml

 <!– Please keep user defined mappings in this file only
to avoid mixing user defined and system mappings. –>
<!– Mapping of User defined classes starts here –>

<!– The mappings for the tutorial classes are placed here to make it
easier to find them for OJB newbies.
Please remove them if you don’t need them in your environment. –>

<!– Definitions for org.apache.ojb.tutorial1.Product –>
<class-descriptor class=»roberto.Tutoriales» table=»TUTORIALESJDO»>
<field-descriptor name=»id»
column=»ID» jdbc-type=»INTEGER» primarykey=»true»
autoincrement=»true» />
<field-descriptor name=»titulo»
column=»TITULO» jdbc-type=»VARCHAR» />
<field-descriptor name=»descripcion»
column=»DESCRIPCION» jdbc-type=»VARCHAR» />
<field-descriptor name=»enlace»
column=»ENLACE» jdbc-type=»VARCHAR»/>
</class-descriptor>
 

Y si compilamos y empaquetamos….. por fin funciona. Las clases compilan
….

El comando utilizado ahora es:

  ant jar

El fichero jar debería tener todo lo necesario para que la aplicación
funcione (en ejecución) ….. aunque si lo intentamos, le falta el fichero
repository.xml
…. graciosamente, el más importante ….

Lo localizaremos en nuestro ordenador y lo introduciremos en nuestro
directorio de trabajo (para que en sucesivas ocasiones se empaquete con los
demás).

Creación de la Base de Datos

Obviamente, necesitamos las tablas (las creamos a mano)

Insertamos algún dato.

Ejecución

Vamos a descomprimir el fichero jar que hemos obtenido como el
resultado.

y también copiamos todas las librerías a un directorio lib.

Y podemos probar el programa, ejecutando (que es el target que añadimos
anteriormente)

ant ejecuta

Conclusión

El montaje ha sido costoso pero si os quedais con el concepto…. solo hemos
escrito dos clases relativamente sencillas y tenemos nuestro sistema JDO/OJB.

No os puedo comentar sobre el rendimiento pero …… si no se ha
transformado la clase original (como en otras soluciones JDO) nos da pistas que
todo se realiza a través de reflexión en tiempo real…..

Ya os contaremos ……

Sobre el
Autor ..

Dejar respuesta

Please enter your comment!
Please enter your name here