Autor Thema: Serverseitige Agenten Remote in Eclipse Debuggen  (Gelesen 4311 mal)

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Serverseitige Agenten Remote in Eclipse Debuggen
« am: 20.09.07 - 14:50:23 »
Hi,

1. In Eclipse muss ein Projekt dasein, das genau wie in Domino aussieht.
Also in Eclipse (ohne package) eine Klasse JavaAgent erstellen und dann den Code aus Notes da reinkopieren.
Eingebundene LotusNotes Script Bibliotheken vom Typ Java, eingebundene jars (inklusive Notes.jar) sollten auch besser in dieses Projekt kopiert werden.

2. In Notes Server folgende Notes.ini Parameter setzen.
JavaEnableDebug=1
JavaDebugOptions=transport=dt_socket,server=y,suspend=n,address=8888
Und zwar genauso. y ist keine Variable für einen realen Server. address legt den Port fest. Kann auch anderes Nümmerschen gewählt werden.
(macht das nicht in produktiven Anwendungen. Das kann sehr ausbremsen).


3. In Rechner wo das Eclipse ist, von dem aus debuggt wird
Das folgende in den PATH des OS einfügen:
<Domino Install Verzeichnis>\jvm\bin
Da sind 2 dlls dt_shmem.dll and dt_socket.dll, die müssen im  Pfad sein (wurde von verschiedenen IBM Dokus vornehm ignoriert. Warum kapiere ich nicht.

4. In Eclipse Run / Open Debug Dialog. 
Da öffnet sich ein Dialog Teil.  Links in der Liste Remote Java Application mit Rechter Maustaste draufklicken. new 
Projekt auswählen.
In Box Connection Type: Standard (Socket Attach)
Host und Port angeben. Bei Port natürlich derselbe wie unter Punkt 2 adress= gewählt.

5. Server neustarten.

6. Aus der in 4 besprochenen Box auf Debug Knopf drücken.

7. Jetzt kommts: Jeder Notes Agent läuft in seiner eigenen Java VM. Wenn der Server frisch neugestartet worden ist, ist die nicht vorhanden. Dh: Der Agent kann erst beim zweiten Lauf debugt werden. In Eclipse Projekt aus 1) einen Breakpoint setzen. Diese Info fehlt in den auf Notes.net veröffentlichten Tutorials. Warum, weiss ich nicht. 

8. Warten. Wenn alles richtig gelaufen ist,  stoppt der Agent beim Breakpoint und kann remote debugged werden.  :D

Leider sieht man im Debugger nicht die lokalen V

Voll nervig, aber es geht. irgendwelche Felder im NAB sind gar nicht zu füllen.
Das läuft voll über JPDA (Java Platform Debugging Architecture).
In Tomcat oder WAS  geht das ähnlich (http://www.eclipsezone.com/eclipse/forums/t53459.html) , aber Domino hat ein paar Spezialitäten, die es ein wenig schwerer machen. 

Dieser Beitrag von Andrew lichtete den Nebel http://domiclipse.proboards57.com/index.cgi?board=general&action=display&thread=1165087117&page=1#1168628682
Einige auf notes.net veröffentliche Tutorials leider nicht.

Gruß Axel
« Letzte Änderung: 20.09.07 - 15:25:41 von Axel Janssen »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline gossifu

  • Senior Mitglied
  • ****
  • Beiträge: 352
  • Geschlecht: Männlich
  • Dummheit schafft Freizeit
Re: Serverseitige Agenten Remote in Eclipse Debuggen
« Antwort #1 am: 31.08.09 - 09:01:58 »
Hallo,

ich hab eine kleine Info zu Punkt 7.

Die Agenten laufen nicht jeder in seiner eigenen JVM.
Dies kann man ganz schnell testen, indem man ein JAR baut, welches eine Klasse mit der Deklaration
einer statischen Variable hat:

Code
package de.tests.testjvm;

public class IntAdd {
	public static int counter;	//Zähler für Agententest
}

Dieses JAR in lib\ext von Client und Server. Client wegen der Entwicklung. Server durchstarten, damit das JAR eingelesen wird.
Dann erstellt man einen Java-Agenten mit folgendem Quelltext:

Code
import lotus.domino.*;
import de.tests.testjvm.*;

public class JVMTest extends AgentBase {

	public void NotesMain() {

		try {
			IntAdd ia = new IntAdd(); 				//Klasse aus der JAR
						
			ia.counter++; 						//Zähler eins hochzählen
			System.out.println("Counter: " + ia.counter); 	//Zähler in Konsole printen
			
		} catch(Exception e) {
			e.printStackTrace();
		} 
	}
}

Den Agenten kopieren und unter anderem Namen speichern.
Die Agenten aktivieren.

Dann sieht man in der Konsole, dass alle Agenten dieselbe Instanz der Variable counter benutzen.
Sie wird nämlich kontinuierlich hochgezählt.
Dies wäre nicht der Fall, wenn jeder seine eigene JVM benutzen würde, da dann jeder Agent seine eigene Instanz von counter hätte.
Es wird ür jeden Agenten nur ein neuer Thread in der JVM aufgemacht.

Ansonsten sehr guter Beitrag.

mfg

Kjeld
Immer lustig und vergnügt, bis der A.... im Sarge liegt. ;-)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz