JDO con TJDO
Hoy vamos a ver otra implementación gratuita de JDO llamada TJDO.
En este caso, se parece más al modo estándar de realizar las
implementaciones JDO, …… las clases se ven transformadas a partir de si
binario, para adaptarse a la especificación JDO.
Los pasos que vamos a realizar son:
- Descargarnos el entorno
- Descargar los jar que necesita para que funcione
- Construir el código de la clase persistencia.
- Construir la clase cliente
- Crear el fichero descriptor JDO
- Cambiamos el script ant de construcción.
- Ampliar nuestra clase para añadirlas los métodos necesarios para que
funciones JDO - Ejecutar el ejemplo, creando las tablas si no existen.
Descargamos el código
Vamos a la página principal http://tjdo.sourceforge.net/
Y nos descargaremos
el Software.
Siguiendo el tutorial
oficial podemos ver los pasos a seguir.
Debemos descargarnos algunos ficheros para que nos funcione
correctamente (Xerces, extensiones de JDBC, JDO de referencia, driver JDBC
de MySQL, Log4J, etc)
Con estos ficheros funciona ….
Nuestras clases
Creamos nuestra clase persistente
package roberto; /** * Tutoriales.java * * Created on February 19, 2004, 1:16 PM * @author Roberto Canales */ public class Tutoriales { private int id; private String titulo; private String descripcion; private String enlace; public Tutoriales() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public java.lang.String getTitulo() { return titulo; } public void setTitulo(java.lang.String titulo) { this.titulo = titulo; } public java.lang.String getDescripcion() { return descripcion; } public void setDescripcion(java.lang.String descripcion) { this.descripcion = descripcion; } public java.lang.String getEnlace() { return enlace; } public void setEnlace(java.lang.String enlace) { this.enlace = enlace; } } |
Y la clase cliente
package roberto; import java.util.*; import javax.jdo.*; public class Test { public static void main(String[] args) { Properties props = new Properties(); // Set the PersistenceManagerFactoryClass to the TJDO class. props.setProperty("javax.jdo.PersistenceManagerFactoryClass", "com.triactive.jdo.PersistenceManagerFactoryImpl"); props.setProperty("javax.jdo.option.ConnectionDriverName", "com.mysql.jdbc.Driver"); props.setProperty("javax.jdo.option.ConnectionURL", "jdbc:mysql://localhost/tutoriales"); props.setProperty("javax.jdo.option.ConnectionUserName", "root"); props.setProperty("javax.jdo.option.ConnectionPassword", ""); PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(props); PersistenceManager pm = pmf.getPersistenceManager(); Transaction tx = pm.currentTransaction(); try { tx.begin(); Tutoriales nuevo = new Tutoriales(); nuevo.setTitulo("Utilidades JDO"); nuevo.setEnlace("jdotools"); nuevo.setDescripcion("Os mostramos como utilizar herramientas automáticas con JDO"); pm.makePersistent(nuevo); tx.commit(); } finally { if (tx.isActive()) tx.rollback(); pm.close(); } return; } } |
Fichero JDO
Creamos el fichero JDO. Lo único especial son las extensiones de fabricante
<?xml version="1.0"?> <!DOCTYPE jdo PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 1.0//EN" "http://java.sun.com/dtd/jdo_1_0.dtd"> <jdo> <package name="roberto"> <class name="Tutoriales"> <field name="id"/> <field name="enlace"> <extension vendor-name="triactive" key="length" value="max 255"/> </field> <field name="descripcion"> <extension vendor-name="triactive" key="length" value="max 255"/> </field> <field name="titulo"> <extension vendor-name="triactive" key="length" value="max 255"/> </field> </class> </package> </jdo> |
Ojo… debemos copiar este fichero al directorio donde están las clases (.class)
….
Creación del Script ant
Reutilizando conocimientos, automatizamos la construcción, transformación y
ejecución con ANT.
El build.properties
############################################ # source.dir=src source.java.dir=${source.dir} build.dir=. build.classes.dir=${build.dir}/ lib.dir=lib target.dir=target |
Y el build.xml
<project name="construir" default="compilar" basedir="."> <property file="build.properties"/> <path id="ejecucion-classpath"> <fileset dir="."> <include name="**/*.jar"/> <include name="**/*.zip"/> </fileset> <pathelement path="."/> </path> <target name="compilar"> <tstamp/> <mkdir dir="${build.dir}"/> <mkdir dir="${build.classes.dir}"/> <javac srcdir="${source.java.dir}" destdir="${build.classes.dir}"> <classpath refid="ejecucion-classpath"/> </javac> </target> <target name="jar" depends="compilar"> <mkdir dir="${target.dir}"/> <jar index="true" jarfile="${target.dir}/${jar.name}"> <fileset dir="${build.classes.dir}/"> <include name="**/*.class"/> </fileset> <fileset dir="${build.resource.dir}"> <include name="**/*"/> </fileset> </jar> </target> <target name="ejecuta" depends=""> <java fork="no" classname="roberto.Test" failonerror="true" classpathref="ejecucion-classpath"> <sysproperty key="com.triactive.jdo.autoCreateTables" value="true"/> </java> </target> <target name="enhance" depends=""> <java fork="no" classname="com.triactive.jdo.enhance.SunReferenceEnhancer" failonerror="true" classpathref="ejecucion-classpath"> <arg value="src/Tutoriales.jdo"/> </java> </target> <target name="enhanceR" depends=""> <java fork="yes" failonerror="yes" classname="com.sun.jdori.enhancer.Main" classpathref="ejecucion-classpath"> <arg line="-v -f -d . src/Tutoriales.jdo roberto/Tutoriales.class"/> </java> </target> </project> |
Tenemos ya los comandos para compilar, empaquetar, expandir las clases
persistentes (enhance, por dos sistemas distintos) y ejecutar.
La estructura queda tal como (sin el directorio de documentación):
C:. │ build.properties │ build.xml │ jdo.log │ LICENSE.txt │ log4j.properties │ README.txt │ ├───lib │ btree.jar │ jdbc2_0-stdext.jar │ jdo-1_0_1-ri.zip │ jdo.jar │ jdori-enhancer.jar │ jdori.jar │ log4j-1.2.8.jar │ mysql-connector-java-3.0.7-stable-bin.jar │ pg72jdbc2-tjdo.jar │ resolver.jar │ tjdo.jar │ xercesImpl.jar │ xercesSamples.jar │ xml-apis.jar │ xmlParserAPIs.jar │ ├───roberto │ Test.class │ Tutoriales.class │ Tutoriales.jad │ Tutoriales.jdo │ └───src Test.java Tutoriales.java Tutoriales.jdo |
Configuramos LOG4J
Solo tenemos que renombrar el fichero de configuración …
Compilamos, y ampliamos las clases
Lo hacemos desde la línea de comando, utilizando ANT.
C:\java\tjdo>ant Buildfile: build.xml compilar: [javac] Compiling 2 source files to C:\java\tjdo BUILD SUCCESSFUL Total time: 2 seconds C:\java\tjdo>ant enhance Buildfile: build.xml enhance: [java] Enhancing class roberto.Tutoriales [java] done. BUILD SUCCESSFUL Total time: 2 seconds C:\java\tjdo>ant ejecuta Buildfile: build.xml ejecuta: BUILD SUCCESSFUL Total time: 3 seconds |
Y podemos ver, decompilando la clase generada, como se ha ampliado el código
Y también podemos ver como se han creado las tablas en la base de datos e
insertado el registro
Podemos ver nuestro registro.
Conclusión
Ya podemos entender más fácilmente concepto de JDO…. aunque tenemos que
utilizar herramientas donde todo esto esté integrado ….
Pronto os mostraremos pluggins de NetBeans y Eclipse… con lo que nuestra
vida es más sencilla.