Ich nutze Java-Agenten in Notes, um auf HP Openview Service Desk mit der web-api zuzugreifen. Für diejenigen, die Openview nicht kennen: Mittels der web-api erzeuge ich ein Objekt vom Typ ApiSDSession, mit welchem ich alle Aktionen im Openview Service Desk ausführen kann. Der Server dazu steht irgendwo im WAN.
Der Fehler 'error cleaning up agent threads' entsteht dadurch, dass ein Notesagent andere Threads startet und beim Beenden nicht weiß, ob die anderen Threads alle ebenfalls beendet wurden. Das Objekt ApiSDSession hat die Methode closeConnection(), womit die Verbindung zum Openview-Server beendet wird. Nun kann man das Objekt auf null setzen und alles ist im Lot. Nur merkt Notes das leider nicht.
Bei Notes.net gibt es eine Technote, um den Fehler einzugrenzen. Dafür sammelt man alle Threads aus der Threadgroup, in der der aktuelle Agent läuft. Normal findet man zwei Threads, die beide zum Notesagenten gehören. Bei mir finde ich 4 Threads, zwei haben den Namen 'WeakReference Plumber' die wohl zu dem Openview-Objekt gehören.
Zu WeakReference habe ich in einer Javadokumentation gefunden, dass solche Objekte ruhig garbage collected werden können auch wenn man nicht sicher ist ob sie ordentlich finalisiert wurden (ich bin hier nicht so der Experte auf diesem Gebiet). Scheinbar hilft Notes das nicht.
Wenn ich diesen Agenten nun mehrmals hintereinander aufrufe bekomme ich einen Speicherüberlauf in der JVM (die DB liegt auf dem Server, den Agenten starte ich über einen Button in einem Dokument). Dies scheint aber nur bei unseren 6.03-Installationen aufzutreten. Beim 6.54 bekomme ich zwar auch den '...cleaning up...'-Fehler in der Konsole, aber keinen Speicherüberlauf.
Habt ihr noch Ideen, wie ich das umschiffen könnte? Die web-api.jar (und auch die anderen Java-Klassen) nutze ich übrigens, indem ich alle Klassen in Eclipse entwickle und als Notes Agent mit Imported Java ausführe (keine Einträge in der Notes.ini oder so)
Jede Anregung willkommen...