JNDI与JDBC

命名服务的相关概念:

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


Name 名称
要在命名系统中查找对象,需要提供对象的名称。
对象的名称就是用来标识该对象的易于人理解的名称。
例如:
     DNS系统用机器名来表示IP地址。
     文件系统用文件名来标识文件对象。


Naming Convention 命名规范`
一个命名系统中的所有名称必须遵循的语法规则称为命名规范。
例如:UNIX文件系统的命名规范要求文件名是一个相对于根目录的路径,
      路径中的每一部分以/分隔。如:/usr/bin。


Binding 绑定
一个名称和一个对象的关联称为一个绑定。
例如:文件系统中,文件名绑定到文件。DNS系统中,机器名绑定到IP地址。


Reference 引用
在一些命名服务系统中,系统并不是直接将对象存储在系统中,而是保持对象的引用。引用包含了如何访问实际对象的信息。


Address 地址
引用通常用一个或多个地址(通信端口)来表示。


Context 上下文
一个上下文是一系列名称和对象的绑定的集合。每个上下文都有与之关联的命名规范。一个上下文通常提供一个lookup操作来返回对象,也可能提供绑定,解除绑定,列举绑定名等操作。一个上下文中的名称可以绑定到一个具有相同命名规范的上下文中,称之为子上下文(subcontext)。
例如:在文件系统中,/usr是一个Context,/usr/bin是usr的subcontext。

Naming System 命名系统
一个相同类型的Context的集合。
一个命名系统向客户提供命名服务来执行命名相关的操作。
如DNS系统,LDAP系统(电话簿)等。
(DNS实质:域名地址转为IP地址;
         将域名和IP地址相互映射的一个分布式数据库;
           域名服务器是指保存有该网络中所有主机的域名和对应IP地址;
           域名解析服务器:域名解析


目录服务的相关概念

Directory Service 目录服务
目录服务是命名服务的扩展,除了提供名称和对象的关联,还允许对象具有属性。目录服务中的对象称之为目录对象。目录服务提供创建、添加、删除目录对象以及修改目录对象属性等操作。

Attribute 属性
一个目录对象可以包含属性。一个属性具有一个属性标识符和一系列属性值。
例如:一个打印机对象可以包含速度、分辨率等属性。
分辨率的属性标识是resolution,属性值可能是300dpi,600dpi等等。

Search Filter 查找过滤器
目录服务除了通过名称查找对象的操作,通常还提供通过目录对象的属性来查找对象的操作。这种的查找一般通过规定的表达式来表示,称之为查找过滤器。


JNDI服务

  JNDI is an API specified in Java technology that provides naming and directory functionality to applications written in the Java programming language.
It is designed especially for the Java platform using Java's object model.
  Using JNDI, applications based on Java technology can store and retrieve named Java objects of any type.
  In addition, JNDI provides methods for performing standard directory operations, such as associating attributes with objects and searching for objects using their attributes.

JNDI是用Java技术提供的一组的API,它为用Java编写的应用程序提供命名服务和目录服务功能。
它是为Java平台使用Java对象模型特别设计出来;
使用JNDI,基于Java的应用程序就可以存储和检索任何类型的Java对象了。
另外,JNDI为执行标准的目录服务操作提供方法,例如为对象关联属性,利用属性查找对象。

JNDI提供了一种统一的方式,可以用在网络上查找和访问服务。
通过指定一个资源名称,该名称对应于数据库或命名服务中的一个记录,
同时返回数据库连接建立所必须的信息。   

JNDI主要有两部分组成:应用程序编程接口和服务供应商接口。
应用程序编程接口提供了Java应用程序访问各种命名和目录服务的功能,
服务供应商接口提供了任意一种服务的供应商使用的功能。   
代码示例:   try{   Context cntxt = new InitialContext();   DataSource ds = (DataSource) cntxt.lookup("jdbc/dpt");   }   catch(NamingException ne){   ...   }




JNDI架构
JNDI架构提供了一个标准的、与命名系统无关的API,这个API构建在特定于命名系统的驱动程序之上。这一层帮助把应用程序和实际的数据源隔离开来,因此无论应用程序是访问LDAP、RMI、DNS还是其他的目录服务,这都没有关系。换句话说,JNDI与任何特定的目录服务实现无关,您可以使用任何目录,只要您拥有相应的服务提供程序接口(或驱动程序)即可

注意,关于JNDI有一点很重要,即它同时提供应用程序编程接口(Application Programming Interface ,API)和服务提供程序接口(Service Provider Interface ,SPI)。这样做的实际意义在于,对于您的与命名或目录服务交互的应用程序来说,必须存在用于该服务的一个JNDI服务提供程序,这便是JNDI SPI发挥作用的舞台。一个服务提供程序基本上就是一组类,这些类针对特定的命名和目录服务实现了各种JNDI接口——这与JDBC驱动程序针对特定的数据系统实现各种JDBC接口极为相似。作为一名应用程序开发人员,您不需要担心JNDI SPI.。您只需确保,您为每个想使用的命名或目录服务提供了一个服务提供程序。

(个人理解:所谓的JNDI SPI也就是我们不同的数据库连接需要不同的驱动程序。如连接oracle和连接Sql Server就需要把不同的驱动程序放到应用服务器的lib下)

猜你喜欢

转载自moor212.iteye.com/blog/1540239