jump to navigation

Compilacion nativa de codigo Java febrero 23, 2007

Posted by superpiwi in Java.
2 comments

Hace unos cuantos meses que intente compilar nativamente una aplicacion que se conectaba a una base de datos Oracle mediante gcj

http://gcc.gnu.org/java/

Pero desisti, porque me daba problemas el driver de conexion de Oracle y la solucion era compilarlo nativamente (por entonces no tenia tiempo y lo cierto es que ahora tampoco, y lo deje aparcado). Pero el otro dia decidi echar otro vistazo y me alegro saber que ya estaba soportado.

Asi que corriendo me instale la nueva version de gcc (incluyendo gcj). Cuya instalacion comente en otro post.

instalacion de gcj

Vamos al tema. Como ejemplo voy a compilar nativamente una clase que implemente hace tiempo para copiar datos entre tablas. Esta formada por 2 clases «DatabaseUtil.java» y «Migracion.java». mas detalles sobre estas clases en el siguiente post:

copiar tablas entre bases de datos

el comando para compilar a ejecutable nativamente es el siguiente:

gcj --main=Migracion -o migrar DatabaseUtil.java Migracion.java

(ojo son 2 guiones –main)

se nos genera un ejecutable con el nombre «migrar» (por la opcion -o de output)

si comprobamos el tipo de fichero:

/export>file migrar
migrar: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped

Si queremos ejecutarlo, nos aseguramos de tener en la variable de entorno LD_LIBRARY_PATH las librerias necesarias, para ello hacemos:

export LD_LIBRARY_PATH=/usr/local/lib

El comando «ldd» nos permite ver las librerias que necesitamos para que funcione:

/export/gcj > ldd migrar
/etc/libcwait.so => /etc/libcwait.so (0xb75e7000)
libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 (0xb75dc000)
libgcj.so.7 => /usr/local/lib/libgcj.so.7 (0xb60eb000)
libm.so.6 => /lib/tls/libm.so.6 (0xb60bc000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb60ac000)
libdl.so.2 => /lib/libdl.so.2 (0xb60a9000)
libc.so.6 => /lib/tls/libc.so.6 (0xb5f71000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000)

En otro caso a la hora de ejecutar nos saltaria un mensaje de error indicando que no encuentra tal o cual libreria.

Otra cosa, al ejecutar nos dara un error de ClassNotFoundException:

./migrar -file migrar.cnf -verbose
[Migracion] [main] : activado trazas del proceso (verbose)
[Migracion] [imprimirParametros] : SOURCE_DRIVER: oracle.jdbc.driver.OracleDriver
[Migracion] [imprimirParametros] : TARGET_DRIVER: oracle.jdbc.driver.OracleDriver
[Migracion] [migrar] : @obtener conexiones
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}

Para solucionarlo indicamos en el CLASSPATH la ruta al driver Jdbc utilizado:

export CLASSPATH=./ojdbc14_g.jar

Ahora ya funciona correctamente:

[Migracion] [migrar] : @obtener conexiones
[Migracion] [migrar] : conexion origen:oracle.jdbc.driver.OracleConnection@53ded8
[Migracion] [migrar] : conexion destino:oracle.jdbc.driver.OracleConnection@53de10
[Migracion] [migrar] : @Procesar tablas
[Migracion] [migrar] : Procesando tabla:SMT_APPLICATION...
[DatabaseUtil] [copyTable] : creando conexion con el origen...
[DatabaseUtil] [copyTable] : creando origen creada...
[DatabaseUtil] [copyTable] : creando conexion con el destino...

Genial!!!. ya podemos desarrollar aplicaciones java con acceso a base de datos y compilarlas de manera nativa en nuestra plataforma.

Herramientas UML febrero 23, 2007

Posted by superpiwi in Java, UML.
add a comment

Si necesitas generar algun diagrama, aqui tienes un listado muy completo de herramientas:

http://www.objectsbydesign.com/tools/umltools_byCompany.html

Yo durante muchos años utilice Rational Rose (si te acabas acostumbrando no está mal). Otras que recomiendo son Omondo, ArgoUml o Poseidon. Sin embargo si necesitas generar de manera rapida y urgente un diagrama de clases a partir del codigo mediante ingenieria inversa y no dispones de mucho tiempo puedes usar Ess-Model:

http://essmodel.sourceforge.net/

ess.gif