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.
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.
[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).