Java JNDI(二)——JNDI概览

目录

2.JNDI概览

2.1命名包

2.2目录与LDAP包

2.3事件与服务提供者包

翻译源:Java tutorial JNDI篇


2.JNDI概览

JNDI(The Java Naming and Directory Interface)是一个应用程序接口,它向使用Java语言编写的应用提供了命名与目录功能。

JNDI被定义为独立于任何特定目录实现,所以可以使用通用的方法访问不同的实现。

架构

JNDI架构由PI与SPI(service provider interface)构成。

java应用使用JNDI应用程序接口访问不同的命名与目录服务。

SPI允许通过透明方式加载不同的命名与目录服务,因此允许Java应用通过JNDI API访问它们的服务。

JNDI属于Java SE平台。如果要使用JNDI,必需具有JNDI类与一个或多个服务提供者。

JDK包含的服务提供者:

  • Lightweight Directory Access Protocol(LDAP)
  • Commom Object Request Broker Architecture(CORBA)Common Object Services(COS)name service
  • Java Remote Method Invocation(RMI) Registry
  • Domain Name Service(DNS)

JDNI被分为五个包

  • javax.naming
  • javax.naming.directory
  • javax.naming.ldap
  • javax.naming.event
  • javax.naming.spi

2.1命名包

javax.naming包中包含了用于访问命名服务的类与接口。

Context

javax.naming包定义了Context接口,用于寻找、绑定/接触绑定、重命名对象与创建销毁子上下文。

  • Lookup:lookup()用于查找给定名称对应的对象。
  • Bindings:listBindings()返回名称与对象绑定的枚举。绑定是一个名称、类、对象的元组。
  • List:方法返回对象名称与对象类名的枚举。由于此操作不会返回对象,所以比listBindings()开销小。
  • Name:Name是表示一般名称的接口(零个或),命名系统使用此接口定义复合命名规范的名称。
  • References:一个reference是一个对象的紧凑表示,JDNI定义Referece类表示引用。

JNDI将在目录中查找到的引用转化为Java对象,这样可以使客户端产生存储在目录中的是java对象的错觉。

初始Context

JNDI之中,所有的命名与目录操作的执行都涉及context。

由于没有绝对根目录,JNDI定义了InitialContext,用于提供命名与目录操作的起始点。

一旦有了一个初始context,那么就可以利用它来查找其他context与对象。

Exceptions

JNDI定义了一个类异常体系,用于表示执行命名与目录操作的期间发生的异常。

此异常体系的根是NamingException。

处理特定异常的程序可以用于捕获异常的对应子类。

2.2目录与LDAP包

目录包

javax.naming.directory包扩展了javax.naming包用于提供访问目录服务的的功能。

这个包使应用可以检索存储在目录中关联的对象,或使用特定的属性搜索对象。

目录context

DirContext接口表示一个目录上下文。DirContext扩展了Context接口,所以目录对象可以提供命名上下文。

DirContext定义了检测更新关联目录条目的属性的方法。

Attributes:

getAttributes()方法检索关联目录条目的属性。modifyAttributes()方法用于添加、替换、移除属性或属性值。

Searches:

通过将属性集合提交给search()方法来检索对象。重载的search()方法可以使用搜索过滤器进行更复杂的搜索。

LDAP包

javax.naming.ldap包括使用LDAP v3特性的类与接口,这些特性还没有被javax.naming.directory所覆盖。

事实上,大多数使用LDAP的JNDI应用使用javax.naming.directory中的操作就足够了。

javax.naming.ldap主要用于需要扩展操作、控制或主动通知的应用。

扩展操作

除了指定意义明确的操作如搜索与修改,LDAP v3指定了一种在客户端与服务端传输未定义操作的方式。

这些操作称为"extended"操作。

扩展操作需要被标准组织或提供商进行定义。

控制

LDAP v3允许请求与响应使用未定义的修饰符进行扩展,这些未定义的修饰符称为控制。

与请求一起发送的控制称之为请求控制,与响应一起发送的控制称之为响应控制。

控制可以被标准组织或提供商定义。

控制控制与响应控制并不需要成对出现。

LdapContext接口表示用于执行扩展操作、发送请求控制、接收响应控制的上下文。

2.3事件与服务提供者包

事件包

javax.naming.event包含的类与接口在命名与目录服务中提供事件通知功能。

Events,NamingEvent表示一个由命名/目录服务产生的事件。这个事件包含一个type域,用于表示事件的类型。

Listener,NamingListener是一个用于监听NamingEvent的对象。每一类事件都有一个对应类型的NamingListener。

为了接收事件,监听器需要注册在EventContext或EventDirContext中。

一旦注册,当对应类型的改变发生在命名/目录服务中,这个监听器将会接收事件通知。

服务提供者包

javax.naming.spi提供了一组应用调用JNDI的公共接口,用于使用不同命名/目录服务提供者的开发者开发的实现。

插入架构

javax.naming.spi允许不同实现动态插入。这些实现包括initial context与可以通过initial context到达的contexts。

java对象支持

java.naming.spi支持Context.lookup()与相关方法的实现返回Java对象。

java.naming.spi支持Context.bind()与相关方法的实现接收Java对象,然后将对象以命名/目录服务接受的形式存储。

多命名系统

JNDI操作允许应用提供跨多命名系统的名称。

完成此操作,一个服务提供者需要与其他服务提供者进行交互。


翻译源:Java tutorial JNDI篇

猜你喜欢

转载自blog.csdn.net/qq_32165041/article/details/82767013