Spontan würde mir nur ein ServerAddin einfallen, welches periodisch den Agenten in der Datenbank antriggert ...
Ich hab in einem Projekt einfach den Windows scheduler benutzt und hab dann mit einer vbs-Datei (windows scripting host) sogar über OLE (weil der Agent selbst Notes-Frontend Klassen nutzt) den Agenten gestartet.
Sofern du so wirkliche Serveragenten (d.h. ohne NotesUI-Klassen) triggerst ginge das auch über Java/Quartz-Framework oder Com (MS-Scheduling). Beides halte ich für robuster.
Wenn man ein bischen Java kann, braucht man nix von JNotes. Es ist wirklich einfach, dass mit Quartz selbst zu bauen. Quartz wird auch sehr viel eingesetzt und ist auch robust.
Meine für (auf dem Server-laufende) modifizierte OLE Lösung sieht so aus (wenn der Agent Frontend Klassen benutzt, ist OLE ein MUSS, wie ich feststellen mußte). Ein über Java getriggerter Agent kann keine Frontend Klassen nutzen, auch wenn der Agent selbst in LotusScript geschrieben ist. In Com sollte sich das ähnlich verhalten.
VBS-Script:
strServer = "server"
strDatabase = "dbPfad/dbName.nsf"
Set notesSession = CreateObject("Notes.NotesSession")
set notesDB = notesSession.getdatabase(strServer, strDatabase)
'msgbox notesDB.FilePath
set notesAgent = notesDB.getAgent("agentName")
notesAgent.runOnServer 'wenn der auf dem Server laufen soll (hiess vermutlich anders als .runOnServer
notesAgent = nothing
notesDb = nothing
notesSession = nothing
Die = nothing Zeilen sind nicht zum Spaß da.
Mark hat ja ähnliche Erfahrungen gemacht.
Das ist auf jeden Fall ein wichtiges Thema. Keine Memory Leaks beim selbstgebauten Scheduling.
Moderne Profiler können einem beim Erkennen helfen, aber mit diesen Teilen bin ich immer noch nicht so firm, obwohl es wichtig ist und in den letzten Jahren immer beliebter wurde.
Der Notes-Client (ich mache Frontend-Sachen) muß immer offen sein.
bei jNotes gibt es nur ein laufendes Beispiel, natürlich darf man die Seite auch meiden... Das eigentliche Addin besteht nur aus folgenden Zeilen:
import lotus.notes.addins.*;
import lotus.notes.*;
public class MyAddin extends JavaServerAddin {
/** main method of JavaServerAddin */
public void runNotes() {
// do all without an agent
}
}
Das finde ich wesentlich eleganter als mit OLE oder VB auf dem Server anzufangen.