Autor Thema: Java db.getAllDocuments()  (Gelesen 1993 mal)

Offline BerndGreiner

  • Frischling
  • *
  • Beiträge: 4
Java db.getAllDocuments()
« 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.

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Java db.getAllDocuments()
« Antwort #1 am: 26.09.05 - 15:45:15 »
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
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline BerndGreiner

  • Frischling
  • *
  • Beiträge: 4
Re: Java db.getAllDocuments()
« Antwort #2 am: 26.09.05 - 17:06:52 »
Hallo Ralf,

es funktioniert ;-))

Vielen Dank für den Tip

Gruß Bernd

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Java db.getAllDocuments()
« Antwort #3 am: 26.09.05 - 17:09:13 »
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
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Java db.getAllDocuments()
« Antwort #4 am: 26.09.05 - 18:18:34 »
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
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz