Mahlzeit,
ich hoffe mal das wird auch hier behandelt, denn wirklich viele Posts über Java habe ich hier nicht gefunden...
Das Problem ist folgendes:
Ich habe einen Agenten geschrieben, der in einer DocumentCollection jedes einzelne Dokument anpackt, speichert und danach in eine andere DB kopiert. Das funktioniert auch eigentlich hervorragend, allerdings scheint sich die Performance exponentiell zu verschlechtern. Grob geschätzt: Jedesmal wenn sich die Anzahl der Dokumente in der DC verdoppelt, dann verzehnfacht sich die Laufzeit des Agenten - und nein, ich arbeite nicht rekursiv, sondern mit einer einfachen Schleife Bis 50 Dokumente kein Problem, bis 100 noch erträglich, bei 200 dauert es ewig, bei 300 oder mehr scheint der Client sich einfach wegzuhängen.
Abgesehen von der Tatsache, dass es von mir hirnverbrannt ist jedes Dokument einzeln in die DB zu kopieren und es viel performanter wäre die DC komplett rüber zu kopieren (ich habe es irgendwie nicht sinnvoll hinbekommen...), wo könnte in folgendem Code der Hund begraben sein?
Habt erbarmen mit mir, ich bin eigentlich kein Notes Admin, sondern nur für die externen Mailrelays zuständig - aber die SpamDatenbanken fallen in mein Ressort Daher ist das mein erster wirklicher Agent und mag vielleicht nicht besonders gut geschrieben sein.
Danke im vorraus,
Sascha
import lotus.domino.*;
public class JMoveToSpamDB extends AgentBase {
public void NotesMain() {
try {
// Initilisierung der Variablen für den Agenten
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// Nur bisher nicht bearbeitete Dokumente holen (aus Sicht des Agenten)
DocumentCollection dc = agentContext.getUnprocessedDocuments();
// Öffnen der Spam Datenbank
DbDirectory remoteDir = session.getDbDirectory("NSAPP01");
Database spamDB = remoteDir.openDatabase("Diverses\\SPAM.nsf");
// Iteration über alle markierten Dokumente
Document doc = dc.getFirstDocument();
while (doc != null) {
// Entfernen des Subject-Tags von SA
Item itemSubject = doc.getFirstItem("Subject");
String strSubject = itemSubject.getText();
if ((strSubject != null) && (strSubject.regionMatches(0,"XX_",0 ,3))) {
itemSubject.setValueString(strSubject.substring(strSubject.indexOf(") ")+2));
}
System.out.println("Bearbeite Mail: " + strSubject);
// Entfernen der Header-Tags von SA
doc.removeItem("X_Spam_Score");
doc.removeItem("X_Spam_Report");
doc.removeItem("X_Spam_Flag");
doc.removeItem("X_Spam_Category");
// speichern der Änderungen im Dokument
doc.save();
// Einfügen des veränderten Dokuments in die SpamDB
doc.copyToDatabase(spamDB);
// nächstes Dokument und wieder von vorne
doc = dc.getNextDocument();
}
// Löschen aller Dokumente die der Agent bearbeitet hat (no-force, soft delete)
dc.removeAll(false);
} catch(Exception e) {
// Wir machen keine Fehler ;)
e.printStackTrace();
}
}
}
Alles anzeigen