Domino 9 und frühere Versionen > ND8: Entwicklung

Thread Problem im Agenten

(1/2) > >>

lightnoweb:
Hallo zusammen,

ich habe ein Problem mit einem Agenten und gerade keine Ahnung woran es liegt.

--- Code: ---import lotus.domino.*;

public class JavaAgent extends AgentBase {

public void NotesMain() {

try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Agent ag = agentContext.getCurrentAgent();
System.out.println("start workflow...for following noteId: " + ag.getParameterDocID());
Database db = agentContext.getCurrentDatabase();

     Document curDoc = db.getDocumentByID(ag.getParameterDocID());


     String strResponsible = curDoc.getItemValueString("Responsible");
         String strDateFrom = curDoc.getItemValueDateTimeArray("DateFrom").toString();
         String strDateTo = curDoc.getItemValueDateTimeArray("DateTo").toString();
System.out.println(strResponsible);

//RUN sametime
LotusSametime sametime = new LotusSametime("Test" + strDateFrom + " bis zum " + strDateTo + " beantragen.", strResponsible);

Thread th_same1 = new Thread(sametime);
th_same1.start();

//Thread.sleep(10000);

} catch(Exception e) {
e.printStackTrace();
}
}
}

--- Ende Code ---

Wenn ich den Agenten starte, dann endet die Java Debug Console mit:
java.lang.ThreadDeath
   at java.lang.Thread.stop(Thread.java:1007)
   at java.lang.ThreadGroup.stopHelper(ThreadGroup.java:684)
   at java.lang.ThreadGroup.stop(ThreadGroup.java:667)
   at lotus.domino.AgentLauncher.run(Unknown Source)
   at lotus.domino.NotesThread.run(Unknown Source)
Error cleaning up agent threads

Meine LotusSametime Klasse soll eigentlich per Sametime eine Nachricht verschicken.
Bloß passiert das in diesem Notes Agenten nicht, weil anscheinend mit dem Enden des Agenten Threads auch der Sametime Thread geschlossen wird. Kann das sein? Denn wenn ich das Thread.sleep oben nicht auskommentiere, dann wird die Sametime Nachricht noch verschickt.

Ich hoffe, ihr könnt mein Problem nachvollziehen. Ich habe gerade erst angefangen mich mit Notes / Agenten / Sametime und Threads auseinanderzusetzen und es bisher auch noch nicht hinbekommen, den Agenten mit Eclipse zu debuggen. Aber vllt. sieht von euch ja jmd. auf den ersten Blick, wo mein Fehler liegt. Oder kann mir einen Hinweis geben, wo ich nähere Info's zu dem Problem finde, bzw. wo es genau liegt.

Schönen gruß und Danke für eventuelle Antworten

Alex

Ralf_M_Petter:
Du hast meiner Meinung nach dass Problem richtig erkannt und darfst den Agent erst enden lassen, wenn der von dir erstellte Thread beendet ist. Der Agentmanager prüft am Agentende ob noch threads offen sind und beendet diese Threads. Dies ist eine Vorsichtsmaßnahme damit keine Zombiethreads mit jedem Agent lauf erstellt werden.

Grüße

Ralf m Petter

lightnoweb:
Hallo Ralf,

danke erstmal für deine Antwort.

Nur wie löse ich das Problem? Kann ich unterbinden, dass der Agent meinen Thread killt?

edit: Denn wenn der Agent so lange wartet, bis auch der Sametime Thread beendet ist, dann muss der Nutzer, der den Agenten gestartet hat auch so lange warten, oder?
Und dann, wie bringe ich den Agenten dazu, so lange zu warten bis der Sametime thread beendet ist?


gruß

alex

Ralf_M_Petter:
Zu Frage 1 meines Wissens nach nicht, habe aber noch nicht viel in diese Richtung experimentiert.

Meiner Meinung nach bleibt dir nur über den Thread in einer Schleife solange auf Erledigung zu prüfen, bis der Sametimethread fertig ist. Eventuell gäbe es noch Möglichkeiten mit Wait zu warten. Das würde mir hier aber zu kompliziert erscheinen. Noch besser wäre hier aber zu beleuchten, ob das ganze überhaupt aus einem Agent getriggert werden muß. In Notes8 gibt es ja teilweise viel elegantere methoden so was zu machen. Erzähl mal wie deine Funktionalität aussieht.

Grüße

Ralf

lightnoweb:
Also letztendlich geht es darum, Informationen aus Notesdokumenten mit einer Frage versehen per Sametime Nachricht zu verschicken. Die Antwort des Sametime Nutzers soll hinterher in dem Notes Dokument gespeichert werden. Hintergrund ist die Möglichkeit simple Workflows zügig über Sametime abwickeln zu können.

Wenn dies einfacher / effizienter / eleganter zu lösen ist, als mit einem Agenten - umso besser.

gruß

alex

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln