Sunday, February 24, 2013

Designer 9 hat endlich einen Debugger für SSJS in xPages

Ein großes Problem bei der Verwendung von Serverside Javascript in der xPage Entwicklung unter 8.5.x war das Fehlen eines Debuggers. In der heutigen Zeit kann man sich die Arbeit ohne leistungsfähigen Debugger eigentlich gar nicht mehr vorstellen und endlich mit Version 9 des Designers bekommen auch die xPages Entwickler diese in anderen Umgebungen selbstverständliche Hilfe.

Folgende Schritte sind für eine erfolgreiche Debug Session einzuhalten:

Als erste sollte man einen Testserver haben, da um SSJS zu Debuggen der Server mit speziellen notes.ini Variablen gestartet werden muss und diese Variablen erstens die Performance verschlechtern und auch Securityrisken mitbringen. Deshalb bitte die Testhilfeunterstützung auf keinen Fall auf produktiven Servern aktivieren!

Drei notes.ini Variablen müssen auf dem Testserver hinzugefügt werden.

JavaEnableDebug=1
JavascriptEnableDebug=1
JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=8000

Der Wert bei address gibt die Portnummer an, auf denen der Server auf Debugbefehle horchen soll. Beim Start des Debugclients im Designer muss dann genau wieder diese Portnummer angegeben werden. Der Port muss natürlich auch in einer eventuell vorhandenen Firewall freigeschalten werden.

Danach muss der Server durchgestartet werden. Laut Doku reicht das neustarten des HTTP Tasks, doch hat es in der Public Beta bei mir erst nach dem Neustart des gesamten Servers funktioniert.

Dann kann im Designer 9 eine Debugsitzung im Menü Tools gestartet werden.




Für die Debugsitzung kann man einen Namen vergeben, unter dem man die Debugkonfiguration später jederzeit wieder aktivieren kann.

Wichtig sind auch der Host und der Port. Der Host ist der Server und unter Portnummer muss die Nummer eingetragen werden, die unter "address" in der Notes.ini am Server eingetragen wurde.

Dann kann man noch einstellen, ob automatisch bei jedem Serverside javascript angehalten werden soll, oder ob nur bei explizit gesetzten Breakpoint der Debugger aktiviert werden soll.

Falls die Notes.ini Parameter nicht gesetzt sind oder der Server nicht durchgestartet wurde, bekommt man beim Start des Debuggers eine Fehlermeldung.


Wenn alles richtig gelaufen ist, bekommt man keine Fehlermeldung und beim nächsten Aufruf einer xPage auf dem Testserver wird automatisch der Debugger gestartet. Beim ersten Start des Debuggers fragt der Designer ob er zur Debugperspektive wechseln soll, was man natürlich bestätigen sollte.


Danach kann man den Javascript code Schritt für Schritt durchlaufen lassen und jederzeit die Variablen kontrollieren.


Wenn man mit dem Debuggen fertig ist, kann man die Verbindung zum Debugserver mit einem Rechtsklick auf die Verbindung und Auswahl von "Terminate" beenden.


Aufgrund der gewählten Architektur kann immer nur ein Client sich mit der Debugfunktion verbinden. Wenn ein weiterer Client eine Verbindung aufbaut, bekommt man die falsche Fehlermeldung, dass die notes.ini Variablen für die Debugfunktion nicht gesetzt sind. Deshalb sollte immer nur ein Entwickler gleichzeitig den Testserver verwenden.

Für weitere Infos zur neuen Version schauen Sie auch auf meine Übersicht über alle Postings zum Thema Notes/Domino 9 
Alle Postings zum Thema SSJS Debugger

6 comments:

  1. Funktioniert das Debugging auch wenn man den lokalen HTTP preview nutzt?

    ReplyDelete
  2. Habe ich noch nicht getestet, aber ich habe noch mehr Postings über das Debuggen in xPages in Planung.

    ReplyDelete
  3. Komischerweise erscheint zunächst die Nachricht "Debug connection succesfully created using x on port 8000"
    (x steht für unseren Server)

    Anschließend passiert gar nichts, aber wenn ich bei Notes unten auf die Meldungen klicke erscheint als nächster Eintrag "Server connection failed".

    Ab diesem Moment erscheint die Fehlermeldung, dass die Konfiguration nicht richtig eingestellt wurde, wenn ich den Debuger nochmal starte.


    Auf der Serverconsole erscheint folgender Fehler:
    HTTP JVM: 16:22:04.283 ERROR: [PacketDispatcher.cpp:95] Run: Exception in connection: TransportException [510/202] 'JDWP-Handshake' receiving error: premature EOF

    Ich habe auch schon danach gegoogelt aber konnte nichts finden :-/

    ReplyDelete
  4. Ich weiß nicht genau, was du meinst mit "Anschließend passiert gar nichts" meinst. Hast du nach dem ersten Starten des Debuggers eine xPage mit SSJS aufgerufen? Am besten startest du den Server nocheinmal durch. Verbindest dich mit dem Debugger und dann ruftst du eine xPage am Server auf.

    Sonst würde ich noch testweise die Windowsfirewall sowohl auf dem Client als auch auf dem Server zu deaktivieren. Weiters solltest du prüfen, ob der Port, den du für den Debugger verwendest, nicht schon benutzt wird. Du kannst die Belegung von Ports am besten mit folgenden TCPView http://petterralf.blogspot.co.at/2013/04/cool-tool-to-analyze-tcp-port-activity.html prüfen.

    ReplyDelete
    Replies
    1. Danke für deine Antwort.
      Mit "Anschließend passiert gar nichts" meine ich, dass eben nichts passiert nachdem ich den Debugger gestartet habe :-P
      Das komische an der Sache ist ja, dass ich zunächst eine Verbindung zum Server habe, die aber sobald ich den Debugger ausführe unterbrochen wird.

      Ich muss mal schauen wie ich das hinbiege, aber trotzdem vielen Dank für die Antwort! :-)

      Delete
    2. Wie gesagt, es soll doch gar nichts passieren nach dem du den Debugger gestartet hast. Erst wenn du eine xPage aufrufst und in der ein SSJS ausgeführt wird, wechselt der Designer in die Debugger Perspective. Wenn du nicht angegeben hast, dass er immer stoppen soll dann musst du auch noch einen Breakpoint im SSJS haben.

      Delete

ad