Otra implementación JDO con TJDO

0
18155

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.

Sobre el
Autor ..

 

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad