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.