Archive for the ‘Java’ Category

Cáñamo, de OREO a Licurgo

Tuesday, August 2nd, 2005

A aquellos que ya conoceis Cáñamo sin duda os sonará OREO, su motor de persistencia, basado en módelos dinámicos. Si quereis saber más sobre ellos no dudeis en preguntar a Al, sin duda os dará una charla sobre sus bondades :). Y gracias a él ahora tenemos otro motor de persistencia, Licurgo, también basado en modelos dinámicos pero esta vez con el objetivo de ser una implementación de Service Data Objects (SDO, JSR 235).

¿Y a qué viene todo esto? Bueno como me han pedido un pequeño manual de como se pasa de OREO a Licurgo que mejor sitio para ponerlo que en mi “concurrido” weblog :D.
El paso es muy sencillo, ya que no requiere cambios en el código de nuestras aplicaciones, solo en los ficheros de configuración.

  1. Servicio de persistencia:

    Lo primero que tenemos que hacer es cambiar el servicio de persistencia. Este se encuentra en “WEB-INF/conf/services.xml”. Tendremos algo como esto:

        <!-- Servicio de persistencia -->
        <service name="persistence"
                 class="org.javahispano.canyamo.services.persistence.oreo.OreoDataSource">
        </service>
        

    Que tendremos que sustituir por:

        <!-- Servicio de persistencia -->
        <service name="persistence"
                 class="org.javahispano.canyamo.services.persistence.licurgo.LicurgoService“>
        </service>
        

    De esta forma indicamos a Cáñamo que use Licurgo en vez de OREO.

  2. Datasource:

    El fichero que indica la BD a utilizar, “datasources.xml” también a cambiado un poco. Ahora su nombre es “licurgo-datasources.xml” aunque se encuentra en el mismo lugar “WEB-INF/conf”. Y el formato pasa de:

    <?xml version="1.0"?>
    
    <!DOCTYPE DATASOURCES SYSTEM "classpath:/org/oreodata/metadata/datasources.dtd">
    <DATASOURCES>
    
      <DATASOURCE CLASS="org.javahispano.canyamo.services.persistence.oreo.CanyamoRecordSet" NAME="canyamo" >
            <PROPERTY KEY="JDBC_DRIVER_CLASS" VALUE="@JDBC_DRIVER@" />
            <PROPERTY KEY="JDBC_URL" VALUE="@JDBC_URL@" />
            <PROPERTY KEY="USER" VALUE="@JDBC_USER@" />
            <PROPERTY KEY="PASSWORD" VALUE="@JDBC_PASSWORD@" />
            <PROPERTY KEY="MAX_CACHE_SIZE" VALUE="0" />
            <PROPERTY KEY="DOUBLE_QUOTE_LITERAL" VALUE="N" />
            <PROPERTY KEY="CONNECTION_POOL_MINIMUM" VALUE="3" />
            <PROPERTY KEY="CONNECTION_POOL_MAXIMUM" VALUE="15" />
        </DATASOURCE>
    
    </DATASOURCES>
    

    a:

    <?xml version="1.0" encoding="UTF-8"?>
    <datasources>
    
        <datasource name="canyamo" class="org.licurgo.jdbc.JDBCDataSource">
            <pool class="org.licurgo.jdbc.pools.ProxoolPool">
                <property name="min-size" value="3"/>
                <property name="max-size" value="15"/>
            </pool>
            <connection>
                <property name="driver" value="@JDBC_DRIVER@"/>
                <property name="url" value="@JDBC_URL@"/>
                <property name="username" value="@JDBC_USER@"/>
                <property name="password" value="@JDBC_PASSWORD@"/>
            </connection>
        </datasource>
    
    </datasources>
    
  3. Ficheros de persistencia:

    Este es el paso que más tiempo lleva, aunque no es complejo. Hay que ir modificando todos los ficheros de persistencia de nuestra aplicación. Así que directorio a directorio dentro de “WEB-INF/conf” abrimos los persistence.xml y hacemos los siguientes cambios:

    No hay que olvidarse del fichero “canyamo-defs.xml” que contiene la definición del usuario y que ahora pasa a llamarse “licurgo-tables.xml”. Es el que usaré de ejemplo, este tiene 2 tablas definidas (users,role)

    <?xml version="1.0"?>
    
    <!DOCTYPE RECORDDEFS SYSTEM "classpath:/org/oreodata/metadata/recorddefs.dtd">
    <RECORDDEFS>
    
        <RECORD TYPE="users"
          PRIMARY_KEY="login"
          DATASOURCE="canyamo"
          TABLE_NAME="users">
            <FIELD NAME="name" CLASS="&STRING;" REQUIRED="Y" >
               <PROPERTY KEY="MAX_LENGTH" VALUE="30" />
            </FIELD>
            <FIELD NAME="login" CLASS="&STRING;" REQUIRED="Y" >
               <PROPERTY KEY="MAX_LENGTH" VALUE="12" />
            </FIELD>
            <FIELD NAME="password" CLASS="&STRING;" >
                <PROPERTY KEY="MAX_LENGTH" VALUE="25" />
            </FIELD>
            <FIELD NAME="email" CLASS="&STRING;">
                <PROPERTY KEY="MAX_LENGTH" VALUE="50" />
            </FIELD>
            <FIELD NAME="lang" CLASS="&STRING;">
                <PROPERTY KEY="MAX_LENGTH" VALUE="5" />
            </FIELD>
            <FIELD NAME="roles" CLASS="&STRING;">
                <PROPERTY KEY="MAX_LENGTH" VALUE="100" />
            </FIELD>
            <FIELD NAME="date" CLASS="&DATE;" />
            <FIELD NAME="lastlogin" CLASS="&DATE;" />
            <FIELD NAME="active" CLASS="&STRING;">
                <PROPERTY KEY="MAX_LENGTH" VALUE="1" />
            </FIELD>
            <FIELD NAME="online" CLASS="&STRING;">
                <PROPERTY KEY="MAX_LENGTH" VALUE="1" />
            </FIELD>
             <!--
            The SQL_TYPE="TEXT" is probably specific to MySQL. In MySQL, the maximum
            length of VARCHAR is 255 characters. For other DBMS's, you
             may need to replace or simply delete that attribute
             -->
             <!--
            <FIELD NAME="columns_content" CLASS="&STRING;" SQL_TYPE="TEXT" REQUIRED="N" >
               <PROPERTY KEY="MAX_LENGTH" VALUE="8000" />
            </FIELD>
            <FIELD NAME="columns_width" CLASS="&STRING;">
                <PROPERTY KEY="MAX_LENGTH" VALUE="20" />
            </FIELD>
            -->
        </RECORD>
    
        <RECORD TYPE="role"
          PRIMARY_KEY="id"
          DATASOURCE="canyamo"
          TABLE_NAME="roles">
            <FIELD NAME="id" CLASS="&STRING;" REQUIRED="Y" >
               <PROPERTY KEY="MAX_LENGTH" VALUE="12" />
            </FIELD>
            <FIELD NAME="text" CLASS="&STRING;" REQUIRED="Y" >
               <PROPERTY KEY="MAX_LENGTH" VALUE="25" />
            </FIELD>
            <FIELD NAME="systemrole" CLASS="&STRING;" REQUIRED="Y" >
               <PROPERTY KEY="MAX_LENGTH" VALUE="1" />
            </FIELD>
        </RECORD>
    
    </RECORDDEFS>
    

    Lo convertimos en:

    <?xml version="1.0" encoding="UTF-8"?>
    <dataobjects>
        <dataobject name="users"
                    datasource="canyamo"
                    primary-key="login"
                >
        </dataobject>
    
        <dataobject name="role"
                    datasource="canyamo"
                    primary-key="id"
                />
    </dataobjects>
    

    ¿Sencillo, no?. Esta simplificación se debe a que Licurgo se encarga de descubrir los campos de las tablas en el arranque de Cáñamo, se acabó el “me equivoqué en una letra, mira que no poner la s, ay! se me olvido cambiar el persistence,…” y demás escusas que ponemos por ser humanos ;).

    Otra de las cosas que hay que modificar es si tenemos autonuméricos en este caso añadiremos:

    <uid-generator class="org.licurgo.jdbc.uid.SequenceUIDGenerator"
                            type="java.lang.Integer"
                    />
    

    dentro del “dataobject” correspondiente.

Bueno ya está bien por hoy, seguro que me dejo cosas pero para comenzar debería valer y además así tengo algo de lo que volver a escribir ;).

Processing, nuevo contendiente para el arte digital

Friday, September 5th, 2003




Como ya estoy de vuelta de mis vacaciones y no soy el único,
Aitor
también ha vuelto y gracias a él y a la revista "WIRED" que me ha
traido de recuerdo, por cierto muy bonita
portada
;), he descubierto un nuevo lenguaje llamado
Processing
. Es un lenguaje creado teniendo en mente el "arte digital",
proponiendo una alternativa a Flash, dominador absoluto actualmente, y a
Java. La sintaxis del lenguaje es similar a Java, en realidad es una
extension, aunque se le ha provisto de funciones especificas para el
manejo de imagenes (2D y 3D) y para proporcionar interactividad. La
plataforma sobre la que se ejecuta es Java ;), consiguiendo así ser
multiplataforma y evitar el desarrollo de plugins. Un applet es el
encargado de visualizarlo de una forma muy fluida como se puede apreciar
en los ejemplos
disponibles
. Es un proyecto open source aunque actualmente solo esta
disponible el codigo en el cvs de sourceforge pero esperan poder completar
la version 1.0 en breve, como siempre en esto del open source ;). Tiene
disponible una documentación bastante aceptable, con muchos ejemplos, que
quieren tener en castellano para la versión BETA y viene con su propio
entorno de desarrollo.

Vuelvo a intentarlo con Eclipse

Thursday, March 6th, 2003

Por problemas de convivencia del IDEA
en mi PC, no arranca y ya no se porque es. Después de probar 1000 y 1
opciones he decidido descargarme Eclipse.
Mis impresiones anteriores no eran muy buenas, no me convencía su forma
de tratar los proyectos, quizás por las diferencias con el Netbeans,
con el que estaba acostumbrado a desarrollar, y no me hacía al entorno.
Esta vez la cosa ha empezado mejor y la primera gran sorpresa, es que también
tiene cuadradito verde como el IDEA, bueno y rojo
y amarillo. Esto comienza bien y continua mejor,
también sugiere acciones a realizar en los casos amarillos (uy como de
parece al IDEA). Bueno por hoy me parece suficiente a ver si mañana pruebo
el CVS, que antes tampoco me convencía.

Grand Rapid por fin un navegador java

Monday, March 3rd, 2003

Mientras navegaba por "la internés" después
de realizar mis tests de conducir diarios (que coñazo!!) he descubierto
un navegador hecho en java que hasta funciona!!!. Su nombre: Grand-Rapid.
Pues si señores lectores y encima le vale con las JDK 1.1 y no es feo,
vale quizás no es perfecto pero para ser una primera versión me
ha sorprendido por su velocidad y por tener un gestor de descargas integrado
y por alguna cosilla más. Ahora solo le falta mejorar un poco el soporte
de algunas cosas como flash (en la página pone que lo soporta, pero a
mi no me funciona) y los iframes y ponerle pestañas y quizás me
piense dejar de usar Phoenix,
bueno no jeje, pero no estaría mal que algún día me surgiera
la duda de cual usar

Me gusta el <font color="#00CC00">Verde</font>

Wednesday, February 19th, 2003

Definitivamente me gusta el color verde, como supongo que le
ocurrirá a cualquier usuario de IDEA.
Hay que ver lo que engancha ese cuadradito verde
de la esquina superior derecha. De todas formas esto creo que empieza a ser
enfermizo, YA NO PUEDO VER UNA CLASE AMARILLA!!!
y no digamos nada de una roja. No puedo resistir
la tentación de optimizar imports, quitar castings innecesarios y demás
cosas maravillosas que sugiere el IDEA
antes de empezar a mirar el código, es que se me van los ojos.

Tornado OpenGL y Java

Thursday, February 13th, 2003

He puesto mi PFC (Proyecto Fin de Carrera) para poderlo descargar.
Se supone que es un simulador de tornados en tiempo real, más bien una
aproximación visual. Para ello desarrollé un sistema de partículas
bastante sencillo que permite generar fuego y cosas así. Actualmente
es una versión programada en C++ usando OpenGL, pero una vez descubierta
la librería LWJGL
he decidido portarlo a Java. Ya iré contando como me va. Si alguién
quiere el codigo fuente (que no es ninguna maravilla) puede mandarme un mail
sin problemas.