Dienstag, 4. März 2014

Java Web Start Anwendungen remote debuggen

Heute habe ich eine JNLP bzw. Java Web Start-Anwendung debugged. Naja, ich wollte gerne. Ging aber nicht. Manchmal sind die Sachen, die eigentlich trivial sein sollten die schlimmsten. Die übliche Vorgehensweise ist wie folgt (in cmd.exe):

set JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000“ (unter WinXP/Windows 2008 Server ohne Anführungszeichen)
javaws http://server_name_or_ip/jnlpfile.jnlp  (JNLP-Datei der Anwendung aufrufen)

Das funktioniert auf den ersten Blick auch ganz gut. Die Anwendung wird geladen, gestartet und man kann sich mittels Eclipse damit verbinden und sieht die Threads der Anwendung. Jetzt kommt das Problem: Man möchte fröhlich drauf los debuggen, plötzlich wird die Verbindung beendet. Was ist passiert? Man hat den JNLP-Launcher debugged. Er beendet sich und startet die eigentliche Anwendung. Die weiss leider nichts davon, dass man sie gerne debuggen möchte.

In diesem Fall wird mit Java 6 u 45 gearbeitet. Ähnliche Probleme scheint es aber auch mit Java 7 zu geben.

Was tun? Alle Tipps, die ich finden konnte funktionierten nicht: z.B. die -Xnofork Option. Oder die Argumente mittels javaws -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 zu übergeben.

Irgendwo hatte ich gelesen, dass bestimmte Java-Optionen (z.B. Debug-Optionen!) wenn sie im JNLP-File stehen von JWS ausgefiltert werden. Sollte dies tatsächlich das Problem sein? 

Ein Blick in die JNLP-Datei offenbarte die folgende Zeile:
<j2se version="1.6.0_07+" java-vm-args="-Xss512K" initial-heap-size="128m" max-heap-size="512m" href="http://java.sun.com/products/autodl/j2se"/>

Nachdem ich sie wie folgt abgeändert hatte funktioniert auch das debuggen: <j2se version="1.6.0_07+" href="http://java.sun.com/products/autodl/j2se"/>

Fazit: Scheinbar werden die Java-Optionen von JAVAWS_VM_ARGS irgendwo mit denen aus der JNLP-Datei gemerged und dann ausgefiltert! Natürlich nur dann, wenn in der JNLP-Datei Java-Optionen stehen. Entfernt man also alle Optionen, die zu "-X" Optionen übersetzt werden können aus der JNLP-Datei läuft es erwartungsgemäß. Grummel.



Keine Kommentare:

Kommentar veröffentlichen