Quick Tip: Κάνοντας remote debugging στον application server

ΟΚ φανταστείται το εξής σενάριο: Εϊναι 3 η ώρα το πρωί και ο μετρητής καφέδων δείχνει 10+. Κλασικά η εφαρμογή έπρεπε να είναι έτοιμη για demo στο UAT περιβάλλον χτες… (ως συνήθως) αλλά πατώντας το Submit σκάει. Το πρόβλημα με το Null pointer exception που φαίνεται στα logs είναι αδύνατο να εντοπιστεί σε τί οφείλεται παρόλο που ο ίδιος κώδικας “παίζει” στο δικό σας PC. Πανικός !!!

Ευτυχώς όμως μπορούμε να κάνουμε remote debugging και να δούμε βήμα προς βήμα που είναι το πρόβλημα. Στο συγκεκριμένο παράδειγμα θα χρησιμοποιήσουμε Glassfish V3 και Eclipse αλλά παρόμοια διαδικασία υπάρχει για άλλους application servers και IDEs.

ΑΝΑΛΥΤΙΚΑ ΒΗΜΑΤΑ

Settings στον Glassfish V3

1) Ανοίγουμε την admin console στη διευθυνση http://localhost:4848 και κάνουμε login

2) Στο δεξιό μενού ανοίγουμε το Configuration => JVM Settings

3) Επιλέγουμε από το tab General τα εξής

    – Debug : ticked

    – Debug Options: -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9009

4) Κάνουμε save και παρατηρούμε ότι πάνω αριστερα εμφανίζεται το “Restart Server” το οποίο και πατάμε. Περιμένουμε την επανεκίννηση.

Settings στον Eclipse

1) Κάνουμε right click πάνω στο project που έχει το source code και επιλέγουμε Debug As => Debug Configuration

2) Από τη λίστα στο αριστερό μενού επιλέγουμε Remote Java Application => “Όνομα του Project“.

3) Στο tab Connect βάζουμε τις τιμές

    – Connection Type: Standard (Socket attach)

    – Host: To IP ή DNS του remote host που είναι ο Glassfish

    – Port: 9009 (να ταιριάζει με αυτή που βάλαμε στα Debug Options του Glassfisg)

    – Πατήστε Apply και μετά Debug (βεβαιωθείτε πριν ότι ο Glassfish έχει ξεκινήσει.

Αυτό ήτανε. Για δοκιμή βάλτε ένα break point κάπου στον κώδικα από όπου ξέρετε ότι “παιρνάει” η ροή του προγραμματος (πχ στον κώδικα του login). Όταν η ροή περάσει από αυτό το σημείο ο remote server θα σταματήσει και θα είναι υπό τον πλήρη έλεγχό σας.

Σημείωση: επειδή το debugging setting είναι στο επίπεδο του JVM , τις ίδιες ακριβώς παραμέτρους δέχονται και οι υπόλοιποι Sun JVM application servers.

Καλή διασκέδαση. 😆

Passionate Archer, Runner, Linux lover and JAVA Geek! That's about everything! Alexius Dionysius Diakogiannis is a Senior Java Solutions Architect and Squad Lead at the European Investment Bank. He has over 20 years of experience in Java/JEE development, with a strong focus on enterprise architecture, security and performance optimization. He is proficient in a wide range of technologies, including Spring, Hibernate and JakartaEE. Alexius is a certified Scrum Master and is passionate about agile development. He is also an experienced trainer and speaker, and has given presentations at a number of conferences and meetups. In his current role, Alexius is responsible for leading a team of developers in the development of mission-critical applications. He is also responsible for designing and implementing the architecture for these applications, focusing on performance optimization and security.