JNDI的用途:

1)你可以用jndi来得到object类的属性

Attribute attr =directory.getAttributes(personName).get("email");
String email = (String)attr.get();

2)你可以用jndi来搜索对象

foxes = directory.search("o=Wiz,c=US", "sn=Fox", controls);
查找谁的名字叫Fox在wiz部门的员工?

3)你可以用jndi通过naming/directory服务查询像printers和databases的对象

如:查询 Printer
Printer printer = (Printer)namespace.lookup(printerName);
printer.print(document);

4)你可以用jndi列表出命名空间的特殊级别的内容

NamingEnumeration list = namespace.list("o=Widget, c=US");
while (list.hasMore()) {
NameClassPair entry = (NameClassPair)list.next();
display(entry.getName(), entry.getClassName());
}

JNDI API包含以下5个package:
javax.naming
javax.naming.directory
javax.naming.event
javax.naming.ldap
javax.naming.spi
其中前面4个package定义了JNDI客户端接口,面向使用命名和目录服务的应用。

最后的javax.naming.spi定义了JNDI服务提供者接口(SPI),面向不同的命名和目录服务提供者。

命名服务主要API javax.naming

1、Context接口和InitialContext类
Context是命名服务的核心接口,提供对象查找,绑定/解除绑定,重命名对象,创建和销毁子上下文等操作。
InitialContext类实现了Context接口,是访问命名服务的起始上下文,通过它可查找对象和子上下文。

Object lookup(Name name)
Object lookup(String name)
根据名称获取对象
void bind(Name name, Object obj)
void bind(String name, Object obj)
绑定名称到对象
void unbind(Name name)
void unbind(String name)
解除绑定,释放对象
void rebind(Name name, Object obj)
void rebind(String name, Object obj)
将对象和一个已经存在的名称重新绑定
void rename(Name oldName, Name newName)
void rename(String oldName, String newName)
修改对象名称
NamingEnumeration<NameClassPair> list(Name name)
NamingEnumeration<NameClassPair> list(String name)
列出上下文中的所有对象名称信息。NameClassPair包含对象名称和对象类名。
NamingEnumeration<Binding> listBindings(Name name)
NamingEnumeration<Binding> listBindings(String name)
列出上下文中的所有绑定。
Context createSubcontext(Name name)
Context createSubcontext(String name)
创建子上下文
void destroySubcontext(Name name)
void destroySubcontext(String name)
销毁子上下文

2、Name接口

对应于命名服务概念中的对象名称。它的具体实现可能是一个简单的字符串,也可能是一个复杂对象。CompoundName类和CompositeName类均实现了Name接口,分别代表复合名称和混合名称。

3、Binding类
对应于命名服务概念中的绑定。一个Binding包含对象名称,对象的类名称,对象本身。

String getName()
void setName(String name)
获取/设置对象名称
String getClassName()
setClassName(String name)
获取/设置对象类名
Object getObject()
void setObject(Object obj)
获取/设置对象

4、Referenceable接口和Reference类
命名服务中对象的存储方式各不相同。有的将对象直接序列化,这时实现标准的Serializable接口接口。有的要将对象存储在命名系统外部,这就要用到Referenceable接口和Reference类了。Reference类包含了怎样构造出一个实际对象的信息,实际对象则需要实现Referenceable接口。
Referenceable主要方法:
Reference getReference() 返回对象的引用。
当将一个实现了Referenceable接口的对象绑定到Context时,实际上通过getReference()得到它的Reference进行绑定。而如何从Reference中创建出Referenceable实例,则由具体的SPI实现,JNDI客户不用关心。

目录服务主要API javax.naming.directory

1、DirContext接口和InitialDirContext类
DirContext是目录服务的核心接口,它扩展了Context接口,除了提供了命名服务的各种操作外,还提供了访问和更新目录对象属性的操作,以及Search操作。
InitialDirContext类扩展InitialContext类并实现了DirContext接口,是访问目录服务的起始点。
DirContext主要方法:
binding/rebing/unbinding等方法与Context类似,区别是各个方法中均添加了Attributes参数,表示绑定的是一个目录对象,其中有对象本身,还有对象的属性集合。这里不再列举。

Attributes getAttributes(Name name)
获取对象的属性集合
void modifyAttributes(Name name, int mod_op, Attributes attrs)
修改对象的属性集合
NamingEnumeration<SearchResult> search(Name name, Attributes matchingAttributes)
搜索包含匹配的属性的对象。
NamingEnumeration<SearchResult> search(Name name, String filter, SearchControls cons)
通过查询过滤条件进行搜索,同时指定了搜索控制。

2、Attribute接口和Attributes接口
Attribute接口对应于目录服务概念中的属性。Attributes表示属性的集合。

3、SearchResult类和SearchControls类
SearchResult类继承自Binding类,表示DirContext的search操作的结果。SearchControls类用于对搜索操作进行更精细的控制,如指定搜索范围(Scope),时间限制(TimeLimit)和结果数量限制(CountLimit)。

命名和目录服务事件API javax.naming.event

1、EventContext接口和EventDirContext接口
分别表示支持事件通知的上下文,提供了添加和删除事件监听器的操作。

2、NamingEvent类
命名和目录服务产生的事件。包含一个type表示不同的事件类型。

3、NamingListener/NamespaceChangeListener/ObjectChangeListener
NamingListener是处理NamingEvent事件监听器的接口,NamespaceChangeListener和ObjectChangeListener是它的两个子接口,分别定义了各自感兴趣的NamingEvent事件类型的处理方法。

Java技术回顾之JNDI--JNDI API相关推荐

  1. Java技术回顾之JNDI--实例

    一.JNDI在Java EE中的应用 JNDI 技术是Java EE规范中的一个重要"幕后"角色,它为Java EE容器.组件提供者和应用程序之间提供了桥梁作用:Java EE容器 ...

  2. Java技术回顾之JNDI--命名和目录服务基本概念

    命名服务的相关概念: Naming Service 命名服务 命名服务将名称和对象进行关联,提供通过名称找到对象的操作. 例如:DNS系统将计算机名和IP地址进行关联.文件系统将文件名和文件句柄进行关 ...

  3. J2EE总结:Java命名与目录接口JNDI(转载)

    J2EE总结:Java命名与目录接口JNDI 2011-12-31 15:24 zhaosg/jnqqls zhaosg/jnqqls的博客 我要评论(0) 字号:T | T 一键收藏,随时查看,分享 ...

  4. Java:comp/env/讲解与JNDI

    转载自   "Java:comp/env/"讲解与JNDI 我们在使用JNDI调用某个对象时,会有下述两种方式 context.lookup("java:comp/env ...

  5. Java这十年 - Java技术本纪 (3)

    Java技术本纪 Java虚拟机的  10    年 文/曹晓刚 Java虚拟机的起源与构造 当我们说到"Java"这个词的时候,指的是四个相互关联的概念:Java语言.Java ...

  6. Java技术本纪(2005.08.18 来自:《程序员》杂志)

    Java虚拟机的  10    年 文/曹晓刚 Java虚拟机的起源与构造当我们说到"Java"这个词的时候,指的是四个相互关联的概念:Java语言.Java API.Java C ...

  7. Java技术在多数据库系统中的应用研究

    在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java专业知识,广州疯狂java培训为你讲解; 摘 要 本文讨论的是在多种异构 ...

  8. Tomcat系列之Java技术详解

    一.概述 1.前言 在前面几篇博客中,我们和大家说了负载均衡器服务器.Web服务器.反向代理服务器.缓存服务器,从这篇博客开始我们和大家说说应用程序服务器,对于上述内容不了解的博友可以去参考一下我们前 ...

  9. java技术文章在哪里看呢_谈论Java技术似乎无处不在,但究竟是什么呢?文章末尾有福利...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 谈论Java技术似乎无处不在,但究竟是什么呢? 下面的部分将解释Java技术如何既是一种编程语言,又是一种平台,并概述这种技术可以为您做些什么. Java ...

最新文章

  1. 以Linux系统上的gcc为例,解密C语言编译背后的全过程!
  2. 黑客声称盗取微软GitHub账号500GB数据,网友:这些最终都会开源的
  3. C语言之父,UNIX之父丹尼斯·里奇去世 享年70岁
  4. Myeclipse10下载,安装,破解,插件,优化介绍.
  5. P4196-[CQOI2006]凸多边形/[模板]半平面交【计算几何】
  6. C# 函数 传入 C++动态库中 做回调函数
  7. EIGRP中非等价负载均衡的实现
  8. LeetCode 1626. 无矛盾的最佳球队(最大上升子序DP)
  9. 利用c语言建立交易系统,【图】手把手教会你构建自己的交易系统 - 4_股票论坛,炒股公式,股票指标,股票公式,选股公式_数据、教程交流论坛_理想论坛 - 股票论坛...
  10. ansys怎么使用anand模型_当SpaceClaim 遇上ANSYS
  11. 【微信小程序】——wxss引用外部CSS文件及iconfont
  12. 十九、Math和Random类
  13. [UNIX]The UNIXHATERS Handbook
  14. html 转换 pdf 工具
  15. 利用jieba对已爬取好的中国地名信息进行分词
  16. c语言斐波那契数列_大自然的神奇数列—斐波那契数列详解
  17. android fps 检测工具,Android FPS监测 方法总结
  18. 克隆硬盘后进不去系统_Windows 10克隆后ssd硬盘不能引导启动
  19. Linux版本查看及PS1配置
  20. 画虎画皮难画骨,编程编码难编译

热门文章

  1. 去腾讯等BAT面试完的Mysql面试55题总结,含答案大赠送!
  2. 论文浅尝 | 面向跨语言实体对齐的知识图谱与实体描述协同嵌入方法
  3. docker 部署Python项目 以及dockerfile文件的编写
  4. www.sirim-global.com
  5. 如何阻止button默认的刷新页面操作
  6. CORS预检请求详谈
  7. 三极管稳压管组成的线性电源关键理解
  8. js `` 手机不支持
  9. 转:mysql group by 用法解析(详细)
  10. linux网络编程——webserver服务器编写