您的位置:首页 > 编程语言 > Java开发

Java 在基于文件系统的 JNDI 和 JNDI+LDAP 协议应用实例(转)

2009-04-30 20:46 721 查看
以前经常在诸如 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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: