Domino 9 und frühere Versionen > ND6: Administration & Userprobleme
Einen periodischen Agent ohne AMgr starten?
eknori:
Die TriggerHappy Geschichte hat auch einen gewissen Charme. Das Ganze lässt sich zentral konfigurieren und ist damit auch für weitere Datenbanken mit ähnlichen Anforderungen geeignet.
Die Frage ist nur: " Welches Ereignis muss eintreten, damit der Agent happy getriggert wird ?"
BTW. Im Source Code sind ja schon alle Routinen enthalten, die man benötigt, um auch einen addin gesteuerten Trigger zu realisieren. ( Dafür habe ich ein stabiles C / C++ Teil bereits fertig; hier müssten lediglich die Routinen zum Starten des Agenten eingebaut werden )
Mark³:
Der Vorteil an dem Java-Serveraddin ist eigentlich, dass ich keinen Agenten mehr benötige, weil mein Addin die Arbeit leistet.
Im Beispiel von jNotes werden zwar Agenten durch den Addin gestartet, ich würde aber die Logik vom Addin machen lassen. Hier kann man vielleicht auch die 2h durch ein paar parallele Threads verkürzen.
flaite:
--- Zitat von: eknori am 02.02.06 - 11:14:41 ---Spontan würde mir nur ein ServerAddin einfallen, welches periodisch den Agenten in der Datenbank antriggert ...
--- Ende Zitat ---
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:
--- Code: ---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
--- Ende Code ---
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.
Mark³:
bei jNotes gibt es nur ein laufendes Beispiel, natürlich darf man die Seite auch meiden... Das eigentliche Addin besteht nur aus folgenden Zeilen:
--- Code: ---import lotus.notes.addins.*;
import lotus.notes.*;
public class MyAddin extends JavaServerAddin {
/** main method of JavaServerAddin */
public void runNotes() {
// do all without an agent
}
}
--- Ende Code ---
Das finde ich wesentlich eleganter als mit OLE oder VB auf dem Server anzufangen.
smoki:
Hallo!
Man kann auch via C++ API einen Agenten über Kommandozeile starten.
Ich habe da mal vor Jahren geschrieben.
Syntax:
startagent Datenbank.nsf AgentName
oder mit Serverangabe
startagent Servername!!Datenbank.nsf AgentName
Eigentlich sollte dir das weiterhelfen. Die noch benötigte lncpp30.dll bekommt man bei der Lotus C++ API 3.0!
Viel Erfolg!
Gruss
Chris
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln