Hallo,
ich habe einen Java Agenten (von einem ehemaligen Kollegen übernommen
), welcher über das Domino Directory ($VIMPeople) huscht und diverse Daten ausliest und verarbeitet.
Zum Schluss wird eine Datei generiert und per FTP an eine andere Maschine übertragen.
Wenn ich den Agenten lokal laufen lasse, funktioniert er problemlos. Wenn er auf dem Server läuft, hört er kurz vor Ende (immer so bei einem Personeneintrag mit Anfangsbuchstabe V oder W) ohne eine Fehlermeldung auf.
Auf der Konsole wird die Meldung
08/06/2007 15:52:16 AMgr: Agent 'agentName' in 'admin/application.nsf' ran successfully; elapsed time was '6492' ticks
ausgegeben.
Die erlaubte Ausführungszeit für Agenten liegt bei 30 Minuten (der Agent selber braucht ca. 2 Minuten).
Hat jemand eine Idee, wo man da ansetzen kann? Ich habe schon JavaVerbose=1 eingetragen, sehe dort aber ebenfalls keine Fehlermeldung.
Hier mal der Code:
import lotus.domino.*;
import java.io.*;
import java.net.*;
import java.util.*;
import org.doomdark.uuid.UUIDGenerator;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
StringBuffer sb = new StringBuffer();
StringBuffer sbNotConform = new StringBuffer();
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Database db = agentContext.getCurrentDatabase();
View v = db.getView("PersonUID");
View vName = db.getView("(PersonName)");
String server = db.getServer();
Form form = db.getForm("NABFields");
Vector fields = form.getFields();
int fs = fields.size();
//
Database nabdb = session.getDatabase(server, "names.nsf");
if(nabdb != null) {
int k = 0;
View nabview = nabdb.getView("($VIMPeople)");
if(nabview == null) System.out.println("view is nothing");
Document nabdoc = nabview.getFirstDocument();
while(nabdoc != null ) {
System.out.println("Total Memory"+Runtime.getRuntime().totalMemory());
System.out.println("Free Memory"+Runtime.getRuntime().freeMemory());
System.out.println("UNID: " + nabdoc.getUniversalID());
System.out.println("MAIL: " + nabdoc.getItemValueString("MailFile"));
String mail = nabdoc.getItemValueString("InternetAddress");
System.out.println("Mail: " + mail);
String firstname = nabdoc.getItemValueString("FirstName");
System.out.println("Firstname: " + firstname);
String midname = nabdoc.getItemValueString("MiddleInitial");
System.out.println("Midname: " + midname);
String name = nabdoc.getItemValueString("LastName");
System.out.println("last name: " + name);
String cur_uid = nabdoc.getItemValueString("EspritUID");
System.out.println("Cur_id: " + cur_uid);
System.out.println("Name: " + firstname + " " + name);
if (!(firstname == null || firstname.equals("") || name == null || name.equals("") || mail == null || mail.equals(""))) {
System.out.println("processing");
if (cur_uid == null || cur_uid.equals("")) {
// Process document ...
String esprit_uuid = "" + UUIDGenerator.getInstance().generateTimeBasedUUID();
System.out.println("Created UID: " + esprit_uuid);
nabdoc.replaceItemValue("EspritUID", esprit_uuid);
nabdoc.save();
cur_uid = esprit_uuid;
}
if(midname == null) midname="";
if(!midname.equals("")) midname = midname + ".";
String concretEmailAddress = firstname + "." + midname + name;
concretEmailAddress = concretEmailAddress.replace(' ', '.');
if (mail.equalsIgnoreCase(concretEmailAddress + "@meinedomaene.com")) {
Document doc = v.getDocumentByKey(cur_uid);
if(doc == null) {
doc = db.createDocument();
doc.replaceItemValue("Form", "Person");
System.out.println("Document created");
}
int flag = 0;
if(fs != 0) {
for(int i=0; i < fs; i++) {
String fieldName = (String)fields.elementAt(i);
String dbField = doc.getItemValueString(fieldName);
String nabField = nabdoc.getItemValueString(fieldName);
//case 1: formerly empty field has been filled in nab
//case 2: field value has been changed
if (((dbField == null || dbField.equals("")) && (nabField != null && !nabField.equals(""))) ||
((nabField == null || nabField.equals("")) && (dbField != null && !dbField.equals(""))) ||
(nabField != null && dbField != null && !nabField.equals(dbField))) {
System.out.println("replicated: " + firstname + " " + name + ". Field: " + fieldName);
doc.replaceItemValue(fieldName, nabdoc.getItemValueString(fieldName));
flag++;
}
}
}
if(flag > 0) {
DateTime dt = session.createDateTime("Today");
dt.setNow();
//String sLocalTime = dt.getLocalTime();
//doc.replaceItemValue("LastReplicated", sLocalTime);
doc.replaceItemValue("LastReplicated", dt);
System.out.println("Time stamp set.");
doc.save();
sb.append(cur_uid);
sb.append("\n");
}
//destroy the doc object
doc.recycle();
} else {
//user doesn't have a correct email address
System.out.println("No correct email address");
sbNotConform.append(cur_uid);
sbNotConform.append("\n");
}
}
nabdoc = nabview.getNextDocument(nabdoc);
System.out.println("Getting next document");
if (nabdoc != null)
{
System.out.println("Dokument gefunden");
}
else
{
System.out.println("Dokument NICHT gefunden");
}
}
//System.out.println(k);
/*****************************
upload string to the server
*****************************/
String s = new String(sb);
Linlyn u = new Linlyn("einserver", "user", "passwort");
u.upload(".", "newuseruids.txt",s);
System.out.println("Created newuserids.txt");
//second upload
String snc = new String(sbNotConform);
Linlyn unc = new Linlyn("einserver", "user", "passwort");
unc.upload(".", "notconformuser.txt", snc);
System.out.println("Recycle session");
session.recycle();
}
} catch(Throwable e) {
e.printStackTrace();
}
}
}
Die letzte Ausgabe auf der Konsole ist immer
08/06/2007 15:51:22 AMgr: Agent ('agentName' in 'admin/application.nsf') printing: Getting next document
Gruß
Stefan