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

简介:

以前经常在诸如 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();
}
}

本文转自BlogJava 新浪blog的博客,原文链接:Java 在基于文件系统的 JNDI 和 JNDI+LDAP 协议应用实例,如需转载请自行联系原博主。

相关文章
|
16天前
|
存储 Java
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
30 1
|
8天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
1天前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
11 3
|
11天前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
21 7
|
9天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
24 3
|
9天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
24 2
|
11天前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
9 1
|
14天前
|
Java
Java中的反射机制与应用实例
【10月更文挑战第22天】Java作为一门面向对象的编程语言,提供了丰富的特性来支持对象的创建、操作和交互。其中,反射机制是Java的一项核心特性,它允许程序在运行时动态地获取类的信息、创建对象、调用方法、访问属性等。本文将从三个部分探讨Java中的反射机制及其应用实例:一是反射机制的基本概念和原理;二是反射机制在Java中的应用场景;三是通过实例深入理解反射机制的使用方法和技巧。
14 4
|
14天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
14天前
|
SQL 监控 Java
Java性能优化:提升应用效率与响应速度的全面指南
【10月更文挑战第21】Java性能优化:提升应用效率与响应速度的全面指南
下一篇
无影云桌面