May 23, 2007

JDeveloper: Από άκρη εις άκρη debugging Java και PL/SQL

Ένα από τα πιο ισχυρά χαρακτηριστικά του JDeveloper, αν και όχι επαρκώς τεκμηριωμένο ή προβεβλημένο, είναι η δυνατότητα αποσφαλμάτωσης (debugging) Java και PL/SQL κώδικα την ίδια στιγμή. Με άλλα λόγια debugging εφαρμογών, που διαθέτουν front-end και middle-tier υλοποιημένο σε Java, που με τη σειρά τους χρησιμοποιούν επιχειρηματική λογική που είναι αποθηκευμένη σε μια Oracle βάση δεδομένων. Και όλα αυτά, μέσα από το ίδιο περιβάλλον εργασίας που παρέχει debugging πληροφορίες τόσο για την κατάσταση εκτέλεσης του Java κώδικα, όσο και όταν θα γίνει κλήση σε μια stored procedure ή η αυτόματη εκτέλεση ενός trigger, για την κατάσταση εκτέλεσης της PL/SQL.

Η αρχιτεκτονική του ενοποιημένου debugging, έχει να κάνει με ένα process στο οποίο γράφει πληροφορία το πρόγραμμα PL/SQL και το οποίο παρακολουθεί και παρουσιάζει ο JDeveloper (remote debugging). Το δε debugging του Java κώδικα, γίνεται με τον κανονικό τρόπο (local debugging)

Τα προαπαιτούμενα για την ενοποιημένη αποσφαλμάτωση είναι:

1. Να δημιουργηθεί στον JDeveloper ένα database connection στο σχήμα που μας ενδιαφέρει για debugging

2. Στο database σχήμα που θα έχει υλοποιηθεί η stored procedure/trigger για έλεγχο να έχουν δοθεί τα δικαιώματα DEBUG ANY PROCEDURE, DEBUG CONNECT SESSION

3. Στην αρχή του PL/SQL procedure/function/trigger που θέλουμε να κάνουμε debug, αρκεί να προσθέσουμε την γραμμή:

DBMS_DEBUG_JDWP.CONNECT_TCP(jdeveloper_host, port );


ώστε να γίνει η αποστολή των πληροφοριών, μέσω του remote debugging στον JDeveloper (προσοχή σε πιθανά firewalls μεταξύ JDeveloper και Oracle). Για παράδειγμα, αν η βάση δεδομένων και ο JDeveloper είναι στην ίδια μηχανή:

DBMS_DEBUG_JDWP.CONNECT_TCP( 'localhost', '4003' );

4. Να έχει γίνει compile o PL/SQL κώδικας με την υπόδειξη παραγωγής debugging πληροφορίας. Αυτό είναι εφικτό, αν γίνει compile απευθείας από τον JDeveloper, όπως διακρίνεται από την επιλογή που βρίσκεται στο μενού Tools-->Preferences.

5. Δημιουργούμε ένα κενό project στον JDeveloper (έστω με το όνομα PLSQL_Debug) και το ρυθμίζουμε από το Tools-->Project Properties-->Run/Debug ώστε να ενεργοποιηθεί το Remote Debugging, αναφορικά με το database connection που μας ενδιαφέρει.



6. Στο τελευταίο βήμα, ρυθμίζουμε τον Remote Debugger του JDeveloper με το πρωτόκολλο "Listen for JPDA" (αντίθετα με ένα τυπικό Remote Debugging μιας JEE εφαρμογής που θα επιλέγαμε "Attach to JPDA") χρησιμοποιώντας ως port number, αυτό που ορίσαμε και στην PL/SQL procedure.

7. Θέτουμε τα breakpoints μας τόσο στον Java όσο και στον PL/SQL κώδικα.

8. Επιλέγουμε ξανά το project PLSQL_Debug και πηγαίνουμε στον Connection Navigator, διαλέγουμε την procedure που μας ενδιαφέρει και στην οποία έχουμε προσθέσει την γραμμή για το debug κάνοντας δεξί click ξεκινούμε τον Remote Debugger. Ταυτόχρονα μια listener διαδικασία εμφανίζεται στον Run Manager.



Ξεκινάμε το πρόγραμμά μας (της Java) από τον κανονικό Debugger και παρακολουθούμε πως ενεργοποιούνται τα breakpoints.

To ίδιο συμβαίνει και όταν γίνεται κλήση σε PL/SQL, όπου μπορούμε να δούμε τις παραμέτρους εισόδου. Όλες οι πληροφορίες debugging αλλά και ενέργειες (step into, step over, watch/inspect expression) είναι όμοια διαθέσιμες και εδώ, όπως για παράδειγμα "live" αλλαγής της τιμής μιας μεταβλητής!

No comments: