jueves, 31 de marzo de 2011

Como hacer debug de PL/SQL con SQL Developer y un servidor de Aplicaciones

Uno de mis principales problemas (de mi equipo de desarrollo) era:
¿cómo puedeo hacer debug integrado entre Java (Eclipse) y mis packages de BBDD.

He visto algunas soluciones por ahí, pero implicaba tocar código (añadiendo instrucciones a las clases java antes de hacer las llamadas.

Pero trasteando hemos encontrado una solución.
El kit de trabajo es Eclipse 3.4, WebLogic 8.1SP3, Oracle 10.2.
Las herramientas: SQL Developer 3.0

1.- Arrancar Eclipse
Lo primero, asumo que el que lea esto sabe hacer debug de java dentro de Eclipse. Esa parte me la salto.

2.- Arrancar SQL Developer 3.0 y activar el debug remoto
Dentro de SQLDeveloper 3.0 seleccionamos la conexión que deseamos debuggear. Pulsamso botón derecho y elegimos "Depuración Remota".
Nos pide 3 campos
Port: Dejamos el 4000 (si tenemos problemas de firewalls entre nuestro PC y el servidor de BBDD, se puede cambiar)
Timeout: 0
Local Adress: muchos ejemplos hablan de poner 127.0.0.01. Yo siempre he usado la IP real de mi PC de trabajo. Imaginemos 10.10.10.10

3.- Arrancamos Weblogic y abrimos la consola
http://localhost:8100/console

4.- Activar el debug remoto en Weblogic (en la conexión de Oracle)
Vamos al pool de conexiones, seleccionamos la conexión adecuada y elegimos la pestaña "Connections". al fina de ella pinchamos en "Show" para ver las propiedades avanzadas.
Dentro de ellas está (la última) el "init SQL".
Ponemos: SQL BEGIN DBMS_DEBUG_JDWP.CONNECT_TCP('10.10.10.10','4000'); END;
Si hemos modificado el puerto, pues ya sabéis, lo cambiáis.
Apply y IMPORTANTE reiniciamos Weblogic

5.- Reiniciar Weblogic
Si todo esta bien, al reiniciar el Weblogic, el SQL Developer deberá detectar las conexiones (tantas como tenga el pool)

6.- Poner el PL/SQL en modo debug con un punto de ruptura
Elegís una función, procedure o package a debuggear, lo compiláis para DEBUG y le ponéis un Punto de ruptura.

7.- Debuggear!!
Al trabajar con la aplicación del Weblogic, cuando haga la llamada al PL compilado para debug, se debería de establecer la conexión y poder empezar a debuggear en el SQL Developer.
¡YA ESTÁ!
Si habesis puesto un punto de ruptura en Java, Eclipse debería de haber entrado en modo debug en ese momento.

Nota: Mucho cuidado. Si el debug tarda mucho, posiblemente la aplicación detecte un timeout en la conexión y falle la aplicación. qué hacer en ese momento o como aumentar ese timeout de la conexión de java es otra historia.

Saludos, Javier.




lunes, 23 de junio de 2008

Como generar un informe del catalogo Oracle Designer

De forma similar a otra entrada de este blog en que os proponía como hacer un informe de las tablas y campos de un usuario determinado, a veces me he encontrado con la necesidad de saber que está definido en Oracle Designer para un modelo determinado de datos. Y, sinceramente, nunca he conseguido hacer funcionar bien los supuestos informes del Designer.
Así que me curré esta consulta para tener una visión completa del modelo que estaba definiendo.
Espero que sea de ayuda.
SELECT tab.created_by app,
tab.NAME, tab.remark,col.NAME,col.remark,
(CASE
WHEN datatype = 'NUMBER'
THEN datatype || '(' || maximum_length || NVL2 (decimal_places, ',' || decimal_places, NULL) || ')'
WHEN datatype = 'DATE'
THEN datatype
ELSE datatype || '(' || maximum_length || ')'
END
) tipo, col.null_indicator nulo, col.sequence_number
FROM ci_table_definitions tab, ci_columns col
WHERE col.table_reference = tab.ID
AND tab.table_type = 'TABLE' AND tab.created_by = :USUARIO_DESIGNER
AND tab.NAME LIKE :USUARIO_MODELO
ORDER BY tab.NAME,
col.sequence_number;

Como generar un pseudo catalogo de datos en Oracle

Muchas veces a lo largo de un desarrollo nos vemos obligados a generar un catalogo de datos del modelo de datos que estamos usando, ya que (seamos sinceros) una vez que comienza el desarrollo el modelo de datos y el modelo diseñado empiezan a divergir.
Esto significa que hay que revisar la definición de tablas y campos.
La siguiente consulta permite obtener el modelo de datos de una BBDD ordenado por tablas y con los comentarios de tablas y columnas integrados. Todavía no incluye el marcar los campos que forman parte de la Primary Key, pero todo se andará.
Como sé que puede mejorarse (LOB's, ...) se aceptan consejos.
SELECT (CASE
WHEN column_id = 1 THEN col.table_name
WHEN column_id = 2 THEN tab.comments
ELSE NULL
END ) tabla,
col.column_name columna,colcom.comments,
(CASE WHEN data_type = 'NUMBER'
THEN (CASE WHEN data_precision IS NULL THEN data_type ELSE data_type || '(' || data_precision || ',' || data_scale || ')' END )
WHEN data_type = 'DATE' THEN data_type
ELSE data_type || '(' || data_length || ')'
END ) tipo,
(CASE
WHEN nullable = 'Y' THEN 'NULL'
ELSE 'NOT NULL'
END) nullable
FROM user_objects obj, user_tab_columns col, user_tab_comments tab, user_col_comments colcom
WHERE col.table_name = obj.object_name AND col.table_name = tab.table_name
AND col.table_name = colcom.table_name AND col.column_name = colcom.column_name
AND obj.object_type = 'TABLE'
ORDER BY col.table_name, col.column_id;

MindMapping & Freemind (y además es gratis)

Hace ya bastante tiempo que me encontré con una herramienta open-source que se llama freemind. Es una herramienta de Mind Mapping (o Mapas Mentales) que permite estructurar contenidos, ideas, tareas, ... Además almacena todo en XML, con lo que permite manipular la información de forma automatizada (si queremos).
Yo la utilizo ampliamente para mis proyectos, ya sea para mantener las tareas a realizar, gestionar contenidos funcionales, o simplemente no olvidarme de cosas importantes.
Aunque oficialmente no ha llegado a la versión 1.0, os aseguro que es muy estable.
Espero que os sea de ayuda.

Se inicia el blog de getxo17

Esta es la primera entrada que escribo en un blog. Y prefiero que sea en el mio.
¿Cuál es el objeto de esto blog? Por ahora, y si no hago un cambio de misión por el camino, me servirá para publicar mis experiencias técnicas o de gestión en este mundillo de la informática que a tantos nos da de comer. Eso supondrá que intentaré registrar opiniones, pensamientos, ideas u enlaces que me parezcan interesantes.
En realidad, no es importante que nadie me lea. Con tal de que me sirva de registro propio de ciertas ideas o trozos de código que considere interesantes, me doy con un canto en los dientes.