Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino
JAVA Agent / LDAP-Notes
Manfred Dillmann:
Hallo Axel!
>>Ich finde das völligst in Ordnung und es ist mehr ein Selbstschutz.<<
Man muss seine Schwerpunkte richtig setzen, keine Frage.
Ich bin ja mit meinem Problem auch halbwegs zurande gekommen, es funktioniert scheinbar jetzt auch mit Proxy-Auth. Ich würde Dir aber gerne noch mal den aktuellen Code senden - von wegen error-handling, also diese "catch" Anweisungen. In Deinem Code hast Du da ja (wenn erforderlich) noch mal expizit den Input-Stream "zugemacht".
Gruss
Manfred
Axel_Janssen:
--- Zitat von: Manfred Dillmann am 10.01.04 - 00:49:23 ---Hallo Axel!
>>Ich finde das völligst in Ordnung und es ist mehr ein Selbstschutz.<<
Man muss seine Schwerpunkte richtig setzen, keine Frage.
Ich bin ja mit meinem Problem auch halbwegs zurande gekommen, es funktioniert scheinbar jetzt auch mit Proxy-Auth. Ich würde Dir aber gerne noch mal den aktuellen Code senden - von wegen error-handling, also diese "catch" Anweisungen. In Deinem Code hast Du da ja (wenn erforderlich) noch mal expizit den Input-Stream "zugemacht".
--- Ende Zitat ---
Das sind allgemeine best practices, die in jedem besseren Java-Buch stehen.
Überleg dir einfach:
Zeile 1: try
Zeile 2: openStream()
Zeile 3: doStuff
Zeile 4: doMoreStuff
Zeile 5: closeStream()
Zeile 6 catch IOException
Was ist, wenn in Zeile 3 oder 4 ein Error auftritt?
Der Stream wird nicht geschlossen.
Der Stream ist dann eine blockierte Ressource (nicht gut).
Gruß Axel
arcon:
So habe den Fehler gefunden, im "javax.naming.directory.Attribute" gibt es die Methode get()die man verwenden sollte ::)
Das heist attrs.get("uid") gibt das Objekt ansich zurück und mit der Methode attrs.get("uid").get() bekommt man den Wert. Darum konnte Notes nichts damit anfangen beim Zuweisen.
System.out.println("Result= " + attrs.get("uid")) => Funktioniert auch ohne get(), aus den von Axel erklärten gründen.
THX for Help Arcon
Hier vollständigkeitshalber der funktionierende Code.
import lotus.domino.*;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.DirContext;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import java.util.Vector;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
System.out.println("Hashtabelle fuer Properties");
Hashtable env = new Hashtable(11);
System.out.println("INITIAL_CONTEXT_FACTORY : com.sun.jndi.ldap.LdapCtxFactory");
env.put( Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
System.out.println("PROVIDER_URL : ldap://ldap.xxx.at");
env.put( Context.PROVIDER_URL,"ldap://ldap.xxx.at/o=xxx,c=at");
System.out.println("Context");
try {
// initialisieren des Contextes
System.out.println("Initialisieren des Contextes");
DirContext ctx = new InitialDirContext(env);
// Suchparameter
SearchControls constraints = new SearchControls();
// Auch Unterebenen durchsuchen
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
// Suche starten
NamingEnumeration results =
ctx.search("ou=personen", "o=wds", constraints);
// Durch alle gefundenen Datensätze durchgehen
while (results != null && results.hasMore()) {
// Das nächste Ergebnis aussuchen
SearchResult si = (SearchResult) results.next();
// Attribute
Attributes attrs = si.getAttributes();
if (attrs == null)
System.out.println("No attributes");
else // Nur die UID ausgeben
try {
Database db = agentContext.getCurrentDatabase();
Document doc = db.createDocument();
doc.appendItemValue("Form", "LDAP");
doc.appendItemValue("Subject", "Test Document");
doc.appendItemValue("UID",attrs.get("uid").get());
System.out.println("Result= " + attrs.get("uid"));
doc.save();
doc.recycle();
db.recycle();
}catch(Exception e) {e.printStackTrace();}
}
// und tschüss ...
ctx.close();
} catch (NamingException e) {
System.err.println("Problem : " + e);
}
session.recycle();
} catch(Exception e) {
e.printStackTrace();
}
}
}
Axel_Janssen:
danke für den code.
WICHTIGER TIPP: Recycle die Notes-Objekte. Das kann zu memory leaks führen.
morgen mehr.
arcon:
Hab es geändert, hoffe nix übersehen zu haben !
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln