Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino

JAVA Agent / LDAP-Notes

<< < (2/2)

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