Autor Thema: Periodisch laufender Agent bleibt stehen  (Gelesen 2519 mal)

Offline noeffred

  • Frischling
  • *
  • Beiträge: 11
Periodisch laufender Agent bleibt stehen
« am: 12.05.09 - 14:16:05 »
Hello

Ich habe einen Agent, er alle 5 Minuten läuft und - sofern Dokumente vorhanden sind - eine andere Datenbank öffnet.

Mein Problem ist jetzt, dass hin und wieder der andere Server nicht erreichbar ist, was weniger ein Problem ist, da das abgefangen wird (siehe unten.)

Allerdings wird der Verbindungsstatus scheinbar zwischengespeichert, denn sobald die Verbindung einmal weg war, bleibt sie für den Agent weg. Starte ich den Agent später wieder von Hand funktionierts wieder. Bis zum nächsten mal wenn die Verbindung nicht hinhaut.

Woran kann das liegen und wie kann den Agent überreden es immer wieder von neuem zu versuchen? Kann ich wo ein Timeout oder dgl. setzen? (müsste ja fast gehen)

Code
Dim targetdb As New NotesDatabase( "server", "target.nsf" ) 

If Not targetdb.IsOpen Then
	Dim agentLog As New NotesLog("Agent log")
	Call agentLog.OpenAgentLog
	Call agentLog.LogAction("Couldn't connect to target Database!")
	Call agentLog.Close
	gotowork=False
Else
	gotowork=True
End If

lg

Offline FriFra

  • Senior Mitglied
  • ****
  • Beiträge: 397
  • Geschlecht: Männlich
Re: Periodisch laufender Agent bleibt stehen
« Antwort #1 am: 13.05.09 - 09:11:27 »
Ich gehe normalerweise immer über eine Session zur DB...

Code
dim s as new Notessession
dim db as notesdatabase

set db=s.currentdatabase bzw. s.getdatabase("server","db")

So wie Du es machst arbeitest Du immer im gleichen Session-Kontext und hast evtl. deshalb dieses Problem, welches ich noch nie hatte ::)
Gruß
Michael


IBM Certified Advanced Application Developer (PCLP AD 8.5,8,7,6,5)
IBM Certified Associate System Administrator (CLS SA 8.5)
Domino 10.0.1 (Windows Server 2016)
Inventor of the 00.00.200x?

Offline noeffred

  • Frischling
  • *
  • Beiträge: 11
Re: Periodisch laufender Agent bleibt stehen
« Antwort #2 am: 14.05.09 - 12:43:33 »
Beendet er nach beendigung des Skripts nicht sowieso die Session? Ich war der Meinung, dass sowieso immer eine neue Session gestartet wird, wenn der Agent läuft? Insofern sollte es doch egal sein, wie ich die Datenbank öffne?

Abgesehen davon: wenn ich auf eine DB zugreife, muss das doch immer wieder von neuem gemacht werden. Nur weils vorher nicht ging heisst das ja nicht dass es beim 2. mal per definition auch nicht geht, oder?

Immerhin, im Moment läuft der Agent wieder, da er statt alle 5 nur mehr alle 10 Minuten gestartet wird. Warums nicht ging weiss ich zwar nicht, aber wenigstens geht er jetzt.

Offline FriFra

  • Senior Mitglied
  • ****
  • Beiträge: 397
  • Geschlecht: Männlich
Re: Periodisch laufender Agent bleibt stehen
« Antwort #3 am: 14.05.09 - 19:15:52 »
Beendet er nach beendigung des Skripts nicht sowieso die Session?
Welche? Ich sehe in Deinem Code keine Session... So wie Du Dein Datenbankobjekt erzeugst hängt das IMHO an der globalen Session und die wird mit dem Script eben nicht beendet...

Hast du es mal so wie oben geschrieben getestet?
Gruß
Michael


IBM Certified Advanced Application Developer (PCLP AD 8.5,8,7,6,5)
IBM Certified Associate System Administrator (CLS SA 8.5)
Domino 10.0.1 (Windows Server 2016)
Inventor of the 00.00.200x?

Offline noeffred

  • Frischling
  • *
  • Beiträge: 11
Re: Periodisch laufender Agent bleibt stehen
« Antwort #4 am: 15.05.09 - 15:42:06 »
Ausprobiert hab ich das nicht, da der Agent funktioniert wenn er nur alle 10 Minuten läuft.

Slightly Off-Topic:
Ich gehe davon aus, dass alle Sessions die der Agent verwenden kann beendet werden, wenn der Agent beendet wird. Denn laut Doku der NotesSession Klasse gibt es immer nur eine Session per Skript.

Zitat
O-Ton von IBM:
Since there can only be one session per script, the New method always returns the same object each time you call it.

Das würde implizieren, dass es nur eine Session gibt, die beim Start des Agents zurechtgelegt wird. Wenn ich mehrere Sessions initialisiere, ist das für die Katz', denn ich würde immer nur diese eine bekommen.
Weiters sehe ich keine Methode eine Session zu schliessen, was in meinen Augen bedeutet, dass sobald das Skript am Ende ist, die Session(s?) automatisch zerstört wird. Läuft kein Agent und benutzt keiner die Datenbank gibt es keine Sessions - erst wenn ein Agent wieder anstartet.


Ein kleiner Test dazu:
Code
Sub Initialize
	Dim session As New NotesSession
	Dim doc1 As NotesDocument
	Set doc1 = session.SavedData
	
	Sleep(2)
	
	Dim session2 As New NotesSession
	Dim doc2 As NotesDocument
	Set doc2 = session.SavedData
	
	If (doc1.UniversalID = doc2.UniversalID) Then
		Print "Gleiches Dokument?!"
	End If
	
End Sub
Starte ich das Skript oben, sollten 2 Session initialisiert werden, aber das SavedData Dokument ist bei beiden das gleiche, obwohl das ja Session-spezifisch sein sollte. Das würde bedeuten, dass es wirklich immer nur eine Session pro Agent gibt (wie die Doku auch meint). Die wird am Ende des Skripts zerstört und beim neuen Starten wieder neu erstellt, da die UniversalID vom SavedData Dokument immer unterschiedlich ist.

Kann mich natürlich auch irren, aber zumindest sehe ich das so.  ;)

Offline FriFra

  • Senior Mitglied
  • ****
  • Beiträge: 397
  • Geschlecht: Männlich
Re: Periodisch laufender Agent bleibt stehen
« Antwort #5 am: 15.05.09 - 18:04:34 »
[EDIT]:Zelbstzensur ;)
« Letzte Änderung: 18.05.09 - 13:53:43 von FriFra »
Gruß
Michael


IBM Certified Advanced Application Developer (PCLP AD 8.5,8,7,6,5)
IBM Certified Associate System Administrator (CLS SA 8.5)
Domino 10.0.1 (Windows Server 2016)
Inventor of the 00.00.200x?

Offline noeffred

  • Frischling
  • *
  • Beiträge: 11
Re: Periodisch laufender Agent bleibt stehen
« Antwort #6 am: 18.05.09 - 11:35:11 »
Mir scheint du hast den Post nicht ganz gelesen? Das Problem hatte sich schon längst erledigt (alle 10 statt 5 Minuten laufen lassen) und der 2. Post dreht sich off-topic allgemein um Sessions in Notes. Von Sessions hast ja du angefangen und da hab ich gedacht dich interessiert ein kleines Gedankenexperiment dazu vielliecht.

Warum du da so auszuckst is mir nicht klar, aber warum nicht? - ein bisschen Wut ist gut fürs Blut!  ;D

Nix für ungut meinerseits.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz