`

JNDI简单介绍(转)

阅读更多
JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。

  命名或目录服务使你可以集中存储共有信息,这一点在网络应用中是重要的,因为这使得这样的应用更协调、更容易管理。例如,可以将打印机设置存储在目录服务中,以便被与打印机有关的应用使用。

  本文用代码示例的方式给出了一个快速教程,使你可以开始使用JNDI。它:

  1、提供了JNDI概述

  2、描述了JNDI的特点

  3、体验了一下用JNDI开发应用

  4、表明了如何利用JNDI访问LDAP服务器,例如,Sun ONE 目录服务器

  5、表明了如何利用JNDI访问J2EE服务

  6、提供了示例代码,你可以将其改编为自己的应用

  JNDI概述

  我们大家每天都不知不觉地使用了命名服务。例如,当你在web浏览器输入URL,http://java.sun.com时,DNS(Domain Name System,域名系统)将这个符号URL名转换成通讯标识(IP地址)。命名系统中的对象可以是DNS记录中的名称、应用服务器中的EJB组件(Enterprise JavaBeans Component)、LDAP(Lightweight Directory Access Protocol)中的用户Profile。

  目录服务是命名服务的自然扩展。两者之间的关键差别是目录服务中对象可以有属性(例如,用户有email地址),而命名服务中对象没有属性。因此,在目录服务中,你可以根据属性搜索对象。JNDI允许你访问文件系统中的文件,定位远程RMI注册的对象,访问象LDAP这样的目录服务,定位网络上的EJB组件。

  对于象LDAP 客户端、应用launcher、类浏览器、网络管理实用程序,甚至地址薄这样的应用来说,JNDI是一个很好的选择。

  JNDI架构

  JNDI架构提供了一组标准的独立于命名系统的API,这些API构建在与命名系统有关的驱动之上。这一层有助于将应用与实际数据源分离,因此不管应用访问的是LDAP、RMI、DNS、还是其他的目录服务。换句话说,JNDI独立于目录服务的具体实现,只要你有目录的服务提供接口(或驱动),你就可以使用目录。如图1所示。 图1:JNDI架构

  关于JNDI要注意的重要一点是,它提供了应用编程接口(application programming interface,API)和服务提供者接口(service provider interface,SPI)。这一点的真正含义是,要让你的应用与命名服务或目录服务交互,必须有这个服务的JNDI服务提供者,这正是JNDI SPI发挥作用的地方。服务提供者基本上是一组类,这些类为各种具体的命名和目录服务实现了JNDI接口—很象JDBC驱动为各种具体的数据库系统实现了JDBC接口一样。作为一个应用开发者,你不必操心JNDI SPI。你只需要确认你要使用的每一个命名或目录服务都有服务提供者。

  J2SE和JNDI

  Java 2 SDK 1.3及以上的版本包含了JNDI。对于JDK 1.1和1.2也有一个标准的扩展。Java 2 SDK 1.4.x的最新版本包括了几个增强和下面的命名/目录服务提供者:

  1、LDAP(Lightweight Directory Access Protocol)服务提供者

  2、CORBA COS(Common Object Request Broker Architecture Common Object Services)命名服务提供者

  3、RMI(Java Remote Method Invocation)注册服务提供者 l DNS(Domain Name System)服务提供者

  更多的服务提供者

  可以在如下网址找到可以下载的服务提供者列表:http://java.sun.com/products/jndi/serviceproviders.html 特别有意思的或许是如下网址提供的Windows 注册表JNDI服务提供者:http://cogentlogic.com/cocoon/CogentLogicCorporation/JNDI.xml 这个服务提供者使你可以访问Windows XP/2000/NT/Me/9x的windows注册表。也可以在如下网址下载JNDI/LDAP Booster Pack:http://java.sun.com/products/jndi/ 这个Booster Pack包含了对流行的LDAP控制的支持和扩展。它代替了与LDAP 1.2.1服务提供者捆绑在一起的booster pack。关于控制和扩展的更多信息可以在如下网站看到: http://java.sun.com/products/jndi/tutorial/ldap/ext/index.html 另一个有趣的服务提供者是Sun的支持DSML v2.0(Directory Service Markup Language,目录服务标记语言)的服务提供者。DSML的目的是在目录服务和XML之间架起一座桥梁。

  JNDI API

  JNDI API由5个包组成:

  1、Javax.naming:包含了访问命名服务的类和接口。例如,它定义了Context接口,这是命名服务执行查询的入口。

  2、Javax.naming.directory:对命名包的扩充,提供了访问目录服务的类和接口。例如,它为属性增加了新的类,提供了表示目录上下文的DirContext接口,定义了检查和更新目录对象的属性的方法。

  3、Javax.naming.event:提供了对访问命名和目录服务时的时间通知的支持。例如,定义了NamingEvent类,这个类用来表示命名/目录服务产生的事件,定义了侦听NamingEvents的NamingListener接口。

  4、Javax.naming.ldap:这个包提供了对LDAP 版本3扩充的操作和控制的支持,通用包javax.naming.directory没有包含这些操作和控制。

  5、Javax.naming.spi:这个包提供了一个方法,通过javax.naming和有关包动态增加对访问命名和目录服务的支持。这个包是为有兴趣创建服务提供者的开发者提供的。

  JNDI 上下文

  正如在前面提到的,命名服务将名称和对象联系起来。这种联系称之为绑定(binding)。一组这样的绑定称之为上下文(context),上下文提供了解析(即返回对象的查找操作)。其他操作包括:名称的绑定和取消绑定,列出绑定的名称。注意到一个上下文对象的名称可以绑定到有同样的命名约定的另一个上下文对象。这称之为子上下文。例如,如果UNIX中目录/home是一个上下文,那么相对于这个目录的子目录就是子上下文—例如,/home/guests中guests就是home的子上下文。在JNDI中,上下文用接口javax.naming.Context表示,这个接口是与命名服务交互的关键接口。在Context(或稍后讨论的

  DirContext)接口中的每一个命名方法都有两种重载形式:

  1、Lookup(String name):接受串名

  2、Lookup(javax.naming.Name):接受结构名,例如,CompositeName(跨越了多个命名系统的名称)或CompondName(单个命名系统中的名称);它们都实现了Name接口。Compound name的一个例子是:cn=mydir,cn=Q Mahmoud,ou=People,composite name的一个例子是:cn=mydir,cn=Q Mahmoud,ou=People/myfiles/max.txt(这里,myfiles/max.txt是表示第二部分的文件名) Javax.naming.InitialContext是实现了Context接口的类。用这个类作为命名服务的入口。为了创建InitialContext对象,构造器以java.util.Hashtable或者是其子类(例如,Properties)的形式设置一组属性。下面给出了一个例子:

Hashtable env = new Hashtable(); // select a service provider factory env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContext"); // create the initial context Context contxt = new InitialContext(env);

  INITIAL_CONTEXT_FACTORY指定了JNDI服务提供者中工厂类(factory class)的名称。Factory负责为其服务创建适当的InitialContext对象。在上面的代码片断中,为文件系统服务提供者指定了工厂类。表1给出了所支持的服务提供者的工厂类。要注意的是文件系统服务提供者的工厂类需要从Sun公司单独下载,J2SE 1.4.x没有包含这些类。

  表1:上下文INITIAL_CONTEXT_FACTORY的值

Name Service Provider Factory File System com.sun.jndi.fscontext.RefFSContextFactory LDAP com.sun.jndi.ldap.LdapCtxFactory RMI com.sun.jndi.rmi.registry.RegistryContextFactory CORBA com.sun.jndi.cosnaming.CNCtxFactory DNS com.sun.jndi.dns.DnsContextFactory

  为了用名称从命名服务或目录中取得或解析对象,使用Context的lookup方法:Object obj=contxt.lookup(name)。Lookup方法返回一个对象,这个对象表示的是你想要找的上下文的儿子。
分享到:
评论

相关推荐

    Jndi.pdf

    ### Java Naming and Directory Interface (JNDI) 技术介绍 #### 一、引言 Java Naming and Directory Interface(简称 JNDI)是 Sun Microsystems 开发的一种标准接口,用于访问各种命名和目录服务。它为应用程序...

    史上最强-Kettle-培训教程.pdf

    - **Simple-jndi**:JNDI数据源连接配置。 - **Ui**:启动界面和配置信息。 ### Kettle菜单介绍 - **Transformation**的Main Tree菜单列出了转换的基本属性,如DB连接、Steps和Hops,用户可在此配置和查看转换的...

    1日速成-Kettle-培训教程(史上最强中文完整).doc

    - **Simple-jndi**:用于JNDI方式连接数据源的配置。 - **Ui**:界面相关的资源和配置。 通过上述介绍,我们可以看出Kettle是一个功能全面、易用的ETL工具,适合新手快速上手。对于数据集成项目,Kettle提供了强大...

    osb12cjms消息发送简单示例

    在Oracle Service Bus (Osb-12c)中,创建JMS (Java Message Service)消息发送的简单示例涉及多个步骤,主要分为配置WebLogic Server的JMS组件和使用JDeveloper开发工具创建业务服务。以下将详细介绍这些过程: 1. *...

    Kettle简单应用.pptx

    Kettle 简单应用 Kettle 是一款国外开源的 ETL 工具,纯 Java 编写,可以在 Window、Linux、Unix 上运行,绿色无需安装,数据抽取高效稳定。Kettle 中文名称叫水壶,该项目的主程序员 MATT 希望把各种数据放到一个...

    java面试宝典

    31、java 中会存在内存泄漏吗,请简单描述。 11 32、abstract 的method 是否可同时是static,是否可同时是native,是否可同时是synchronized? 11 33、静态变量和实例变量的区别? 11 34、是否可以从一个static 方法...

    j2ee的13种核心技术

    本文将详细介绍支持J2EE的13种核心技术:JDBC、JNDI、EJBs、RMI、JSP、Java Servlets、XML、JMS、Java IDL、JTS、JTA、JavaMail以及JAF,并探讨它们的应用场景及如何协同工作。 #### 1. JDBC (Java Database ...

    J2EE的13种核心技术简介

    除了简单的查找,JNDI还提供了更多的方法来进行如下操作: - 将一个对象插入或绑定到context,这是在你部署一个EJB时非常有效的。 - 从context中移除对象。 - 列出context中所有的对象。 - 创建或删除子context。 ...

    Kettle从零开始

    - **模块化设计**:Kettle的模块化设计允许用户通过简单的拖拽操作实现复杂的ETL流程。 **核心组件**: - **Transformation(转换)**:负责执行数据的提取、转换等基础操作。 - **Job(作业)**:用于管理一系列...

    Java Data Access

    接下来将详细介绍这些技术的核心概念、用途及应用场景。 ### JDBC(Java数据库连接) JDBC是Java平台上的标准SQL数据库访问接口。它为开发人员提供了一种与各种关系型数据库交互的方式。JDBC使得Java应用程序能够...

    J2EE中常见术语解释

    本文介绍了J2EE中几个核心概念,包括RMI、CORBA、RMI-IIOP、JNDI以及STUB与SKELETON。通过理解这些概念,可以帮助开发者更好地理解和使用J2EE框架及其相关技术。此外,对于如何选择合适的远程通信方式(RMI vs CORBA...

    J2EE软件工程师内部培训资料

    - **JDBC对标准的扩展(JNDI)**:介绍如何使用Java命名和目录接口(JNDI)来查找和获取数据库连接。 #### Hibernate 3.0 - **Hibernate的简介**:概述Hibernate框架的核心概念和优势。 - **Hibernate的工作原理**:...

    hibernate 英文文档

    - **JNDI 绑定的 SessionFactory**:说明了如何通过 JNDI 来访问和使用 SessionFactory。 - **JTA 会话上下文管理**:解释了如何在支持 JTA 的环境中管理 Hibernate 的会话。 - **JMX 部署**:介绍了如何通过 JMX...

    SSM框架常用核心接口和类.txt

    本文将详细介绍SSM框架中的核心接口与类,帮助开发者更好地理解和运用这些组件。 #### 二、核心组件详解 ##### 1. Web.xml配置 **SpringContextLoaderListener** - **功能**: 负责在应用启动时加载Spring容器。 ...

    Tomcat 5 Unleashed

    - **第二部分**:涵盖了Web应用程序开发的相关内容,包括J2EE介绍、使用Ant和CVS创建稳健的开发环境、Servlet、JSP 2.0、JSTL、过滤器、监听器、XSLT、JNDI、JTA和log4j的开发方法。 - **第三部分**:深入探讨Tomcat...

Global site tag (gtag.js) - Google Analytics