Categorías del Tutorial

icono_twiter icono LinkedIn icono Facebook Icono Xing
Roberto Canales Mora

Creador y propietario de AdictosAlTrabajo.com, Director General de Autentia S.L., Ingeniero Técnico de Telecomunicaciones y Executive MBA por el Instituto de Empresa 2007.
Twitter:

Autor de los Libros: Planifica tu éxito: de aprendiz a empresario y Informática profesional, las reglas no escritas para triunfar en la empresa

Puedes consultar mi CV y alguna de mis primeras aplicaciones (de los 90) aquí

Ver todos los tutoriales del autor

Fecha de publicación del tutorial: 2004-02-20

Tutorial visitado 15.574 veces Descargar en PDF
JDO con TJDO

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

 

A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

Share |
Anímate y coméntanos lo que pienses sobre este TUTORIAL: