关闭

JNDI(二) 之 Overview of JNDI

标签: JNDIapijava se
350人阅读 评论(0) 收藏 举报
分类:

Java命名和目录接口(JNDI)是一个应用程序接口(API),为使用Java语言编写的应用程序提供基础的命名和目录服务。他被定义为独立于其他目录服务实现。因此可以使用同意的方法去访问许多新建的和已经存在的目录。

Architecture(架构)

JNDI架构由一个API和一个服务提供接口(SPI)构成。Java程序可以使用JNDI API去访问各种各样的命名和目录服务。SPI确保各种各样的命名和目录服务透明地插入,因此允许Java应用程序使用JNDI API访问他们的程序。看下面的图:


Packaging(封装)

JNDI被包括在JavaSE平台中。相使用JNDI,你必须有JNDI类和一些服务提供者。

       JDK包括以下的命名/目录服务:

  • 轻量级目录访问协议(LDAP)
  •  通用对象请求代理体系结构(CORBA)公共对象服务(COS)命名服务
  • Java远程方法调用(RMI)注册
  • 域名服务(DNS)

其他的服务提供者可以下载从JNDI页面或者从其他的提供商

JNDI分为5个包:

Naming Package

javax.naming包包含了访问命名服务的类和接口。

a)     Context

Java.naming包中定义了Context接口,一个查找、绑定/解绑、重命名对象、创建和销毁子上下文的核心接口。

Lookup

       最常用的操作是lookup()。你提供一个要查找对象的名字给lookup()方法,然后它返回绑定到这个名字上的对象给你。

Bindings

       listBindings()返回一个名字到对象绑定的枚举。一个绑定是一个元组(行记录),包括绑定对象的名字,绑定对象的类名和对象自己。

List

       list()方法和listBindings()方法很相似,除了它返回的是包含对象的名字和对象的类名的枚举。当你需要浏览上下文中绑定对象的信息,但不需要实际的对象的时候,list()方 法非常有用。尽管listBindings()提供了同样的信息,但是它需要花费更多的操作。

Name

       Name是一个描述通用名字的接口—零或者多个组件的有序序列。命名系统使用这个接口定义符合约定的名字。

References

       对象被命名和目录服务用不同的方式存储。引用是一个非常紧凑的形式描述对象。

       JNDI定义Reference类来描述引用。一个引用包含了构造一个对象副本的信息。JNDI试图将它在目录中找到的引用转换成Java对象以便JNDI客户端有一个错觉,目录中存 储的是Java对象。

b)     The Initial Context(初始化上下文)

在JNDI中所有的命名和目录操作执行都相对于上下文。这儿没有绝对的根。因此,JNDI定义一个InitialContext,提供命名和目录操作的始点。一旦你有一个初始化上 下文,你可以使用它查找其他的上下文和对象。

c)     Exceptions

JNDI定义了一系列继承的异常类,可以在你执行命名和目录操作的过程中抛出。类继承层次的根异常类是NamingException。处理一个程序感兴趣的特殊异常可以捕 抓相关的子异常类。否则,就捕抓NamingException。

Directory Package

Javax.naming.directory包扩展自javax.naming提供了访问目录服务的基础服务,除了命名服务。这个包允许应用程序检索存储在目录中的相关对象,也可以使用对象的指定属性去搜索。

a)     The Directory Context

DirContext接口描述了目录上下文。DirContext也扮演一个命名上下文角色,因为扩展自Context接口。也就是说,目录对象也可以扮演一个命名上下文。它也定义了 检查和更新相关联目录实体的方法。

b)     Attributes

你可以使用getAttributes()方法检索相关联目录实体(你提供名字的)的属性。可以使用modifyAttributes()方法修改属性。你可以使用这个操作增加、替换、或者删除属 性。

c)     Searches

DirContext包含基于目录查找的方法。最简单和常用的场景是应用程序指定一系列需要匹配的属性值然后提交给search()方法。其他search()重载方法支持更复杂的搜 索过滤。

LDAP Package

Javax.naming.ldap包包含使用LDAP v3(还没有被更一般的javax.naming.directory包转换的)特性的类和接口。事实上,大多数使用JNDI的应用程序将发现javax.naming.directory包中的功能已经充分够用,一点儿也不需要javax.naming.ldap包。这个包最主要的目的是为应用程序提供 “扩展的”操作,

控制或者主动通知。

a)     “Extended“Operation(扩展操作)

为了指定良好的操作如:搜索和修改,LDAP v3(RFC2251)指定了还未定义的操作怎样在客户端和服务器之间传输。这些操作叫做扩展操作。一个扩展操作可以被标准化组织定义,例如:国际互联网工程任务组(The Internet Engineering Task Force,简称 IETF)或者一个厂商。

b)     Controls(控制)

LDAP v3允许使用还未定义的修饰符增强请求或者响应,叫做控制。一个控制和请求一起发送叫做请求控制,一个控制和一个响应一起发送叫做响应控制。一个控制可 以被可以被标准化组织定义,例如:国际互联网工程任务组(The Internet Engineering Task Force,简称 IETF)或者一个厂商。请求控制和响应控制不一定是成对出现的, 也就是说,不需要为每个请求控制发送响应控制,反之亦然。

c)     Unsolicited Notifications(主动通知)

除了正常Intenet客户端和服务器的请求/响应风格之外,LDAP v3提供了主动通知—消息主动以异步的形式发给客户端,不是为了回复客户端的请求。

d)     The LDAP Context

LdapContext接口描述了执行扩展操作,发送请求控制和接收响应控制的上下文。怎样使用JNDI这些特性的例子在控制和扩展这节。

Event and Service Provider Packages

Event Package

java.naming.event包包含支持在命名和目录服务中事件通知特性的类和接口。

事件通知的详细描述在Event Notification 章节。

a)     Events(事件)

NamingEvent描述了一个命名/目录服务生成的事件。这个事件包含一个type属性标识了事件的类型。例如,事件类型被影响到的命名空间分类为,“添加对象“,”改变 对象“,和其它。

b)     Listeners(监听器)

NamingListener是一个用来监听NamingEvent的对象。每一类的事件类型都有与之对应的NamingListener。例如,NamespaceChangeListener描述了对命名空间改 变的事件感兴趣的监听器,ObjectChangeListener描述了对对象改变事件感兴趣的监听器。

为了接收事件通知,监听器必须被注册到一个EventContext 或者EventDirContext。一旦注册,这个监听器将在命名/目录服务发生相关事件的时候收到一个通知。

Service Provider package

javax.naming.spi包提供了一种方法让不同开发者的命名/目录服务实现以一个合适的方法让应用程序使用JNDI访问。

a)     Plug-In Architecture(插件架构)

javax.naming.spi允许不同的实现动态的插入。这些实现包括初始化上下文和从上下文获取。

b)     Java Object Support

javax.naming.spi支持查找和相关方法的实现直接返回Java对象,这对Java程序员是自然和直观的。例如你使用一个打印机名字查找,并且期望返回一个可以操作的打 印机对象。这个场景被以对象特性的形式被支持。

这个包还提供相反的支持。也就是说Context.bind()和相关方法支持接收一个Java对象并以可访问的形式存储对象在底层的命名/目录服务中。。这个场景被以对象特性 的形式被支持。

c)     Multiple Naming Systems(Federation)(多个命名系统)

JNDI操作允许应用程序提供一个跨命名系统的名字。完成这个操作的过程中,一个服务提供者可能需要和另外一个交互,例如传递这个操作到下一个命名系统。这个 包提供了支持不同的供应者配合完成JNDI操作。

详细的服务提供者机制在Java教程文档中。








1
0
查看评论

Java技术回顾之JNDI:JNDI应用实例

一、JNDI在Java EE中的应用JNDI技术是Java EE规范中的一个重要“幕后”角色,它为Java EE容器、组件提供者和应用程序之间提供了桥梁作用:Java EE容器同时扮演JNDI提供者角色,组件提供者将某个服务的具体实现部署到容器上,应用程序通过标准的JNDI接口就可以从容器上发现并使...
  • EricXYY
  • EricXYY
  • 2008-01-13 00:04
  • 4826

Java技术回顾之JNDI--JNDI API

JNDI的用途: 1)你可以用jndi来得到object类的属性 Attribute attr =directory.getAttributes(personName).get("email"); String email = (String)attr.get(); ...
  • gqltt
  • gqltt
  • 2012-05-15 15:23
  • 1386

JNDI学习总结(1)——JNDI入门

JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB的知识。  那么,JNDI到底起什么作用?  ...
  • u012562943
  • u012562943
  • 2016-01-05 13:58
  • 1560

JNDI和C3P0和durid

链接:http://bbs.csdn.net/topics/390930795?page=1  --JNDI和C3P0连接池关系 链接:http://sishuok.com/forum/blogPost/list/1186.html --读完这个我懂了JNDI  链接:htt...
  • wabiaozia
  • wabiaozia
  • 2017-01-24 16:37
  • 473

JNDI参数设置

http://blog.csdn.net/fhm727/article/details/7444078 name:表示你的连接池的名称也就是你要访问连接池的地址 auth:是连接池管理权属性,Container表示容器管理 type:是对象的类型 driverClassN...
  • u013071311
  • u013071311
  • 2016-08-07 21:58
  • 1458

JNDI的使用

 Java命名和目录接口(the Java naming and directory interface,JNDI)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得读者可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。&...
  • zdwzzu2006
  • zdwzzu2006
  • 2008-11-06 22:55
  • 3590

jndi连接数据源报错解决

以前一直用MyEclipse,以后要慢慢学会用eclipse。最开始用的就是myeclipse,直到最近感觉后者更容易让自己了解项目的结构,不多说了,讲问题了! 昨天新检出了一个项目,了解后发现数据库连接方式是jndi建的数据源。没多想先启动了,报错如下: 严重: Conte
  • map612
  • map612
  • 2011-09-20 10:25
  • 2172

JNDI是用来做什么的?

.什么是JDNI     1.java Naming and Directory Interface,java命名和目录接口      2.是一组在Java应用中访问命名和目录服务的API    &#...
  • Blessed_
  • Blessed_
  • 2017-05-30 10:53
  • 770

关于JNDI配置以及运行报错详解

在介绍JNDI配置之前,先让我好好吐槽一下。先说说今天在Java社区里面逛,看到关于数据库连接池的技术已经发展到好几种了,还停留在dbcp技术的我也没脸说什么。得知现在Apache下的tomcat在7.0版本的时候已经推出了新的连接池技术-tomcatJDBC。     ...
  • helloworld1993
  • helloworld1993
  • 2015-07-17 19:48
  • 1039

原始 java 载入数据源 JNDI及直连

Java: package com.wonders.ips.common; import java.sql.*; import java.util.*; import javax.sql.*; import javax.naming.*; import com.wonders.ips.sysad...
  • z69183787
  • z69183787
  • 2013-11-13 13:04
  • 1432
    个人资料
    • 访问:185699次
    • 积分:2416
    • 等级:
    • 排名:第18107名
    • 原创:74篇
    • 转载:9篇
    • 译文:6篇
    • 评论:46条
    博客专栏
    最新评论