走在架構師的大道上 Jack.Wang's home

          Java, C++, linux c, C#.net 技術,軟件架構,領域建模,IT 項目管理 Dict.CN 在線詞典, 英語學習, 在線翻譯

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            195 Posts :: 3 Stories :: 728 Comments :: 0 Trackbacks

                 以前經常在諸如 weblogic, jboss, tomcat 服務器上配置 JNDI 服務,代碼也很簡單。但還沒有用過 LDAP 服務器. LDAP 用層次(樹) 結構存儲數據。 要引用樹中的項目,就需要列出樹中的節點名稱。從所要項目開始,一直向樹頂跟蹤。樹中每個節點都有 nodetype=value 形式的唯一 COM 域。 域組件的節點類型為 DC ,葉子節點類型為 O, LDAP 有屬性的概念,同時也有類的概念。因此,可以依據屬性或類檢索。
                 Java 很是方便只要通過 JNDI 透過 LDAP 就可操作 LDAP, NIS, NDS, NT 等目錄服務器.

          例子1.
                 通過屬性檢索

          import javax.naming.NamingEnumeration;
          import javax.naming.directory.Attribute;
          import javax.naming.directory.Attributes;
          import javax.naming.directory.BasicAttributes;
          import javax.naming.directory.InitialDirContext;
          import javax.naming.directory.SearchResult;

          /**
          * @author Jack.Wang
          *
          */
          public class NameSearch {
          public static void main(String args[]) {
          try {
          InitialDirContext ctx = new InitialDirContext();
          BasicAttributes searchAttrs = new BasicAttributes();
          searchAttrs.put("sn", "Tippin");
          NamingEnumeration objs = ctx.search(
          "ldap://ldap.jack.com/o=test search, dc=test,dc=com",
          searchAttrs);
          while (objs.hasMoreElements()) {
          SearchResult match = (SearchResult) objs.nextElement();
          System.out.println(match.getName());
          Attributes attrs = match.getAttributes();
          NamingEnumeration e = attrs.getAll();
          while (e.hasMoreElements()) {

          Attribute attr = (Attribute) e.nextElement();
          System.out.println(attr.getID());
          for (int i = 0; i < attr.size(); i++) {
          if (i > 0) {
          System.out.println(",");
          } else {
          System.out.println(attr.get(i));
          }
          }
          }
          }
          } catch (Exception e) {
          e.printStackTrace();
          }
          }
          }

                 例子2.
                     通過類名字檢索
          import javax.naming.NamingEnumeration;
          import javax.naming.NamingException;
          import javax.naming.directory.Attribute;
          import javax.naming.directory.Attributes;
          import javax.naming.directory.BasicAttributes;
          import javax.naming.directory.InitialDirContext;
          import javax.naming.directory.SearchControls;
          import javax.naming.directory.SearchResult;

          /**
          * @author Jack.Wang
          *
          */
          public class AllSearch {
          public static void main(String[] args) {
          try {
          InitialDirContext ctx = new InitialDirContext();
          SearchControls searchControls = new SearchControls();
          searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
          NamingEnumeration objs = ctx
          .search(
          "ldap://ldap.jack.com/o=test search, dc=test,dc=com",
          "(objectClass=*)", searchControls);
          while (objs.hasMoreElements()) {

          SearchResult match = (SearchResult) objs.nextElement();
          System.out.println(match.getName());
          Attributes attrs = match.getAttributes();
          NamingEnumeration e = attrs.getAll();
          while (e.hasMoreElements()) {

          Attribute attr = (Attribute) e.nextElement();
          System.out.println(attr.getID());
          for (int i = 0; i < attr.size(); i++) {
          if (i > 0) {
          System.out.println(",");
          } else {
          System.out.println(attr.get(i));
          }
          }
          }
          }
          } catch (NamingException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          }
          BasicAttributes searchAttrs = new BasicAttributes();
          }
          }
               例子3.
                    基于文件系統的 binding

          import java.util.Hashtable;

          import javax.naming.Context;
          import javax.naming.InitialContext;

          public class TestBinding {
          private String serverName = "jackhost";

          private int portNumber = 1433;

          private String login = "jack";

          private String password = "19810622";

          private String databaseName = "jack";

          private String filePath = "jdbc/jack";

          public TestBinding() {
          Hashtable env = new Hashtable();
          env.put(Context.INITIAL_CONTEXT_FACTORY,
          "com.sun.jndi.fscontext.RefFSContextFactory");
          env.put(javax.naming.Context.PROVIDER_URL, "file:d:\\");
          try {
          Context ctx = new InitialContext(env);
          AnalogyDB ds = new AnalogyDB();
          ds.setServerName(serverName);
          ds.setPortNumber(portNumber);
          ds.setUser(login);
          ds.setPassword(password);
          ds.setDatabaseName(databaseName);
          ds.setDescription("JDBC Datasource connection.");
          ctx.bind(filePath, ds);
          ctx.close();
          } catch (Exception e) {
          System.err.println("ERROR " + e.getMessage());
          }
          }

          public static void main(String[] args) {
          TestBinding test = new TestBinding();
          }
          }

                  例子3.
                  基于文件系統的 lookup
          import java.sql.Connection;
          import java.util.Hashtable;

          import javax.naming.Context;
          import javax.naming.InitialContext;

          /**
          *
          * @author Jack.Wang
          *
          */
          public class TestLookup {
          public TestLookup() {
          try {
          Hashtable env = new Hashtable();
          env.put(Context.INITIAL_CONTEXT_FACTORY,
          "com.sun.jndi.fscontext.RefFSContextFactory");
          env.put(javax.naming.Context.PROVIDER_URL, "file:d:\\");
          Context ctx = new InitialContext(env);
          AnalogyDB ds = (AnalogyDB) ctx
          .lookup("jdbc/jack");
          Connection connection = ds.getConnection();
          System.out.println("Connection Established.");
          connection.close();
          } catch (Exception e) {
          e.printStackTrace();
          }
          }

          public static void main(String[] args) {
          TestLookup test = new TestLookup();
          }
          }




          本博客為學習交流用,凡未注明引用的均為本人作品,轉載請注明出處,如有版權問題請及時通知。由于博客時間倉促,錯誤之處敬請諒解,有任何意見可給我留言,愿共同學習進步。
          posted on 2007-11-07 21:03 Jack.Wang 閱讀(3604) 評論(1)  編輯  收藏 所屬分類: 開發技術

          Feedback

          # re: Java 在基于文件系統的 JNDI 和 JNDI+LDAP 協議應用實例[未登錄] 2008-03-21 08:47 jack
          不知道你 有沒有使用JNDI來和openldap服務器連接?  回復  更多評論
            

          主站蜘蛛池模板: 铜山县| 芮城县| 瑞金市| 来凤县| 伊宁县| 花莲县| 临澧县| 安塞县| 青田县| 五华县| 外汇| 聂拉木县| 浦江县| 桐城市| 邓州市| 枝江市| 雷州市| 黄平县| 英德市| 惠东县| 遂川县| 新乐市| 宁安市| 望都县| 滦南县| 会东县| 修武县| 濉溪县| 昌图县| 泾阳县| 嘉祥县| 迁西县| 广饶县| 九龙城区| 三原县| 辽宁省| 南郑县| 赤城县| 漳平市| 巴东县| 息烽县|