(gehe davon aus wir reden über Domino5)
A. debuggen:
-> bei Notes Menü File // Tools // Java Debug Console
bekommst das gleichnamige Teil.
Hier kannst du zumindest mit System.out.println debuggen (so habe ich auch in nicht ganz kleinen Projekten gearbeitet).
--> Es gibt eine Möglichkeit über Visual Age for Java (Agent Runner). Ich war nie ein grosser VAJ Freund, habe aber den Agent Runner mal gestestet. lief. Falls ihr kein VAJ habt, würde ich es mir schenken. Lohnt sich nicht. Die Nachfolgeprogramm Galaxis Eclipse/WSAD & Plugins bietet meines Wissens keine Testumgebung für Domino - Agenten. Kann mich aber hier auch irren.
--> Bei wirklich grösseren Projekten entweder darüber nachdenken auf Domino6 upzugraden oder sich mit Log4u (logging framework) beschäftigen. Das ist zwar auch kein debugging, aber sehr viel besser als System.out..
B. Code
gut.
Offenbar, wenn man keine Berechtigungen auf die Datenbank hat, wirft database.open() immer eine NotesException. Ich dachte es würde nur false zurückgeben, stimmt aber nicht.
Warum eigentlich?
Hat vermutlich irgendwelche Sicherheitsgründe.
Die erste Lösung funktioniert aber bei mir (Version 5.08). (ohh bei dir ja auch...)Der Trick ist das "innere try-catch".
Das ist so wie ich das gemacht habe nicht ganz die feine englische.
So schlimm ist das aber wieder auch nicht.
Es wird ja jegliche Exception im catch der System.out.println("Datenbank konnte nicht geöffnet werden...");
abgefangen.
Hier könnte man nach Optimierungen suchen.
Also erstmal catch NotesException.
Und dann vielleicht noch feingranularer auf die spezifische Exception eingrenzen (versuchtes open, ohne das user Zugriff hat).
Denke drüber nach, wenn ich Zeit habe.
Exceptions und try-catch werden besser als ich das je könnte im gratis downloadbaren Handbuch der Java Programmierung (3. Auflage) erklärt
http://www.javabuch.de, Kapitel 12.
hier ist code:
wäre unnötig, wenn ich lesen könnte Schreibe nur den richtigen SERVER_NAME da hin.
import lotus.domino.*;
public class JavaAgent extends AgentBase {
private static String SERVER_NAME = "srv01";
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
DbDirectory dir = session.getDbDirectory(SERVER_NAME);
Database db = dir.getFirstDatabase (DbDirectory.DATABASE);
while (db != null) {
try {
db.open();
if (db.isOpen()) {
DocumentCollection dc = db.getAllDocuments();
System.out.println("Last modified: " +
db.getLastModified().getLocalTime() + dc.getCount());
} // end db.isOpen
db = dir.getNextDatabase();
} // end if try
catch (Exception e) {
System.out.println("Datenbank konnte nicht geöffnet werden...");
db = dir.getNextDatabase();
} // end catch
} //end while
} catch(Exception e) {
e.printStackTrace();
}
}
}
Halt. Noch ein BonutipWas mir mal 1 Tag gekostet hat, war die Tatsache, das viele Methoden, die in Skript in NotesSession stehen, in der Java Implementierung der Domino-Klassen in AgentContext stehen. Also
getCurrentDatabase
getDocumentContext
etc.
Ansonsten ist das quasi wie LotusScript