走在架構(gòu)師的大道上 Jack.Wang's home

          Java, C++, linux c, C#.net 技術(shù),軟件架構(gòu),領(lǐng)域建模,IT 項目管理 Dict.CN 在線詞典, 英語學習, 在線翻譯

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

          公告

          重構(gòu)
          新浪博客:新浪 blog
          MSN: wbjeasygo@163.com
          Email:  wbjeasygo@163.com
          QQ 精英群: 47763528 
          空間QQ空間

          淘寶店:新開淘寶書店
          致謝:
           感謝雷老師幾年的指導
           感謝導師在學業(yè)上的關(guān)懷,
           感謝老婆的支持,
           感謝我的同學和同事,
           在我成長的路上有你

          留言簿(26)

          我參與的團隊

          隨筆分類(232)

          隨筆檔案(190)

          我的鄰居們

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

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

          例子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.
                    基于文件系統(tǒng)的 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.
                  基于文件系統(tǒng)的 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();
          }
          }




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

          Feedback

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

          主站蜘蛛池模板: 乐亭县| 修水县| 蛟河市| 德庆县| 原平市| 蓝田县| 高碑店市| 大英县| 白银市| 建始县| 改则县| 咸阳市| 临泽县| 博客| 西青区| 泰来县| 云林县| 牡丹江市| 柳林县| 西乌| 湘潭县| 嘉鱼县| 光泽县| 东乌珠穆沁旗| 开远市| 防城港市| 弋阳县| 手游| 诏安县| 廊坊市| 平潭县| 宿州市| 克什克腾旗| 吉木乃县| 福安市| 廉江市| 巴中市| 平利县| 米泉市| 泽州县| 永清县|