Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: BerndGreiner am 26.09.05 - 15:22:06
-
Hallo zusammen,
ich verwende Notes in der Version 6.5 und habe folgendes Problem:
Wenn ich mittels db.getAllDocuments() eine NotesDB mit ca 20.000 Dokumenten
durchgehe, bekomme ich nach ca 6.500 Dokumenten folgenden Fehler:
"AllocHandle: OUT OF PRIVATE HANDLES! -- pid 00000F14 Handles used so far 6399, Maximum handles = 16409, error = 0x107"
Der Sourcecode sieht ungefähr so aus:
Database db = session.getDatabase(serverName, databaseName);
DocumentCollection docColl = db.getAllDocuments();
Document doc = docColl.getFirstDocument();
while (doc != null) {
//hole Daten aus dem Dokument, bspw.
String documentUNID = doc.getUniversalID();
doc = docColl.getNextDocument();
}
Ist das Problem, von Java aus auf etwas größere Notes-DB's zuzugreifen?
Für einen konstruktiven Tip wäre ich sehr dankbar.
-
Mit deinem Code hast du jetzt ca. 6500 Dokumente offen, da get selbst dem besten Computer irgenwann die Ressourcen aus. Probier das selbe mal mit Lotus script da wird es genauso nicht gehen.
Das Zauberwort heisst Recycle. Jedes Java Domino objekt hat diese Methode. Entweder du suchst hier im Forum. Wurde schon oft behandelt oder du suchst in der Hilfe des Designers.
Dein Code sollte mindestens so aussehen.
Database db = session.getDatabase(serverName, databaseName);
DocumentCollection docColl = db.getAllDocuments();
Document doc = docColl.getFirstDocument();
while (doc != null) {
//hole Daten aus dem Dokument, bspw.
String documentUNID = doc.getUniversalID();
Document docMerker=doc;
doc = docColl.getNextDocument();
docMerker.recycle();
}
if (doc!=null){
doc.recycle();
}
Falls dein Code in einem Agenten ausgeführt wird solltest du unbedingt auch das Datenbankobjekt recyceln, falls dein Code nicht in einem Agenten steht solltest du die Session recyclen.
Falls du noch Fragen hast. Gerne.
Grüße
Ralf
P.S. Für diese Fragen gibt es eigentlich das Javaforum auf Atnotes
-
Hallo Ralf,
es funktioniert ;-))
Vielen Dank für den Tip
Gruß Bernd
-
Freut mich, dass es funktioniert, aber ich empfehle trotzdem dringend, dass du dich etwas in die Materie vertiefst, wenn du mehr mit Java in Domino machen willst. Das recycle Thema ist oft nicht ganz einfach, vor allem in Multithreading Umgebungen. Falls du noch Fragen dazu hast einfach mal einen Thread im Java Forum von Atnotes aufmachen.
Grüße
Ralf
-
Ich würd das auch als einen typischen Fall von Implementierungsverwirrung nennen.
Ein Java Objekt com.notes.Document ist ja nur auf einem Abstraktionsniveau des Anwendungsentwicklers eine Abstraktion eines Notes-Dokuments.
Aus der Perspektive eines anderen Abstraktionsniveaus (Implementierung) kann es verschiedene Sachen sein:
- Ein Wrapper um einen Corba Stub
- Ein Wrapper um einen Notes RPC Handle.
Und genau diese Implementierungsperspektive ist hier durchgeschlagen.
Praktisch ist es eine Schicht unter der Schicht auf der sich in einer idealen Welt Anwendungsentwickler bewegen sollten. Leider gibt es diese ideale Welt nirgendwo.
Axel