Configure Kettle debug session

Durante lo sviluppo e test di un plugin per Spoon, che ricordo essere l’ambiente dedicato al disegno dei processi ETL di Kettle, potrebbe essere utile avviare delle sessioni di debug[1] utili per l’individuazione di eventuali errori (bug) rilevati. In questo breve articolo vedremo come sia possibile per un plugin Kettle, avviare una sessione di debug dal nostro ambiente di sviluppo, che ipotizziamo, essere Eclipse. Il plugin oggetto di debug che prenderemo come esempio è quello distribuito da Pentaho stessa che prende il nome di DummyPlugin 3, maggiori dettagli su questo plugin sono reperibili all’indirizzo http://wiki.pentaho.com/display/EAI/DummyPlugin+3+plugin+page.

Esistono diversi modi per avviare Kettle in modalità di debug, la via più semplice è quella di modificare le opzioni di avvio della JVM indicando delle impostazioni tali per cui il debugger di Eclipse ma in generale qualunque tipo di debugger sarà in grado di connettersi al processo. Le nuove opzioni da impostare alla JVM sono:

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

Listato 1 Opzioni di avvio della JVM

Le opzioni indicate nel Listato 1 avvieranno Kettle in modalità di debug aprendo una connessione TCP/IP in listen sulla porta 8000 su tutte le interfacce di rete della propria workstation. Le nuove istruzioni per la JVM devono essere indicate sui seguenti file posizionati sulla root d’installazione di Kettle:

  • spoon.sh per gli ambienti Unix/Linux
  • spoon.bat per gli ambienti Windows
  • Info.plist per gli ambienti Mac OS X. Questo file risiede in due locazioni diverse:
    • Data Integration 64-bit.app/Contents
    • Data Integration 32-bit.app/Contents

Nel Listato 2 e Listato 3 sono evidenziate le modifiche apportate ai file spoon.sh e Info.plist, in modo analogo andrà fatto con il file spoon.bat.

OPT=”$OPT $PENTAHO_DI_JAVA_OPTIONS -Djava.library.path=$LIBPATH -DKETTLE_HOME=$KETTLE_HOME -DKETTLE_REPOSITORY=$KETTLE_REPOSITORY -DKETTLE_USER=$KETTLE_USER -DKETTLE_PASSWORD=$KETTLE_PASSWORD -DKETTLE_PLUGIN_PACKAGES=$KETTLE_PLUGIN_PACKAGES -DKETTLE_LOG_SIZE_LIMIT=$KETTLE_LOG_SIZE_LIMIT -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

Listato 2 Modifica apportata al file spoon.sh.

<key>VMOptions</key> 

<string>-Xmx256m -Xms256m -XX:MaxPermSize=128m -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000</string>

Listato 3 Modifica apportata al file Info.plist.

tcp4       0      0  *.8000 *.*           LISTEN 

[0x0-0x72072].Data Integration 64-bit[1556]: Listening for transport dt_socket at address: 8000

Log 1 Output del comando netstat e syslog

Al Log 1 è evidenziata l’apertura della connessione TCP/IP dopo l’avvio di Spoon.

Dopo aver configurato l’ambiente Kettle in modalità di debug, non resta che procedere con la configurazione del debugger di Eclipse. L’operazione di configurazione è molto semplice, basta aprire la configurazione del debugger dal menu Run->Debug Configurations e creare una nuova configurazione come Remote Java Application, così come indicato in Figura 1.

Configurazione dei debug per il plugin DummyPlugin3.

Figura 1 Configurazione dei debug per il plugin DummyPlugin3.

Una volta impostate le proprietà di connessione, è possibile cliccare sul pulsante debug per avviare la connessione con il server di debug Kettle in listen sulla porta TCP/IP 8000.

A questo punto, l’avvio di una sessione di debug diviene veramente semplice, è necessario impostare un breakpoint, per esempio sul metodo setValue() della classe DummyPluginMeta (vedi Figura 2) e successivamente provare a modificare i metadati del plugin dal designer Spoon. Alla conferma della modifica dei metadati, sarà avviata la sessione di debug dentro Eclipse. Le illustrazioni a seguire mostrano una sintesi degli step che consentono l’avvio della sessione di debug.

Consiglio la lettura dell’articolo Developing a custom Kettle Plugin: Looking up values in Voldemort e del blog dello stesso autore Slawomir Chodnicki. Commenti e correzioni sono bene accette.

Debug breakpoint sul metodo setValue() della classe DummyPluginMeta.

Figura 2 Debug breakpoint sul metodo setValue() della classe DummyPluginMeta.

Trasformazione che include il plugin DummyPlugin.

Figura 3 Trasformazione che include il plugin DummyPlugin.

Modifica dei metadati del plugin DummyPlugin.

Figura 4 Modifica dei metadati del plugin DummyPlugin.

Cambio prospettiva di Eclipse.

Figura 5 Cambio prospettiva di Eclipse.

Prospettiva di Debug di Eclipse durante la sessione di debug.

Figura 6 Prospettiva di Debug di Eclipse durante la sessione di debug.



[1] Debugging (o semplicemente debug) è un’attività che consiste nell’individuazione della porzione di software affetta da errore (bug) rilevati nei software a seguito dell’utilizzo del programma (vedi http://it.wikipedia.org/wiki/Debugging).

Antonio Musarra

I began my journey into the world of computing from an Olivetti M24 PC (http://it.wikipedia.org/wiki/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until … Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.

You may also like...