JDO con OJB

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 ..