`

java高级编程:基于JNDI的应用开发

阅读更多
基于JNDI的应用开发

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

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

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

    l 提供了JNDI概述 l 描述了JNDI的特点 l 体验了一下用JNDI开发应用 l 表明了如何利用JNDI访问LDAP服务器,例如,Sun ONE 目录服务器 l 表明了如何利用JNDI访问J2EE服务 l 提供了示例代码,你可以将其改编为自己的应用

    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的最新版本包括了几个增强和下面的命名/目录服务提供者:

    l LDAP(Lightweight Directory Access Protocol)服务提供者 l CORBA COS(Common Object Request Broker Architecture Common Object Services)命名服务提供者 l 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个包组成:

    l Javax.naming:包含了访问命名服务的类和接口。例如,它定义了Context接口,这是命名服务执行查询的入口。 l Javax.naming.directory:对命名包的扩充,提供了访问目录服务的类和接口。例如,它为属性增加了新的类,提供了表示目录上下文的DirContext接口,定义了检查和更新目录对象的属性的方法。 l Javax.naming.event:提供了对访问命名和目录服务时的时间通知的支持。例如,定义了NamingEvent类,这个类用来表示命名/目录服务产生的事件,定义了侦听NamingEvents的NamingListener接口。 l Javax.naming.ldap:这个包提供了对LDAP 版本3扩充的操作和控制的支持,通用包javax.naming.directory没有包含这些操作和控制。 l Javax.naming.spi:这个包提供了一个方法,通过javax.naming和有关包动态增加对访问命名和目录服务的支持。这个包是为有兴趣创建服务提供者的开发者提供的。

    JNDI 上下文

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

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

    l Lookup(String name):接受串名 l 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方法返回一个对象,这个对象表示的是你想要找的上下文的儿子。

    转载:转载请保留本信息,本文来自http://www.matrix.org.cn/resource/article/1/1038.html感谢译者的辛勤工作,请大家参加Matrix的翻译计划:http://www.matrix.org.cn/translation/Wiki.jsp?page=Main

分享到:
评论

相关推荐

    java企业级应用开发指南电子书

    ### Java企业级应用开发指南知识点概述 #### 一、引言 随着Java技术的发展与成熟,它已经成为构建大型企业级应用程序的重要平台之一。本书《Java企业级应用开发指南》为开发者提供了一个全面深入地了解如何利用Java...

    Java Web编程技术

    Java Web编程技术是开发基于Web的应用程序的一种强大方法,它结合了Java语言的强大功能与Web的广泛可访问性。在Java Web开发中,开发者可以创建动态、交互式的网站,为用户提供丰富的用户体验。以下是对Java Web编程...

    Java Web整合开发进阶100例

    Java Web开发是基于Java语言构建Web应用程序的过程,它包括服务器端编程、动态网页生成、数据库交互等多个环节。这一领域的重要知识点包括: 1. **Servlet与JSP**:Servlet是Java Web的基础,用于处理HTTP请求,而...

    Java学习资料、项目源码 基于javaee的图书管理系统

    通过学习这个基于JavaEE的图书管理系统,你可以深入了解JavaEE的各个组件以及它们在实际项目中的应用,同时也可以提升你的Web应用开发能力。项目的源码分析将有助于你将理论知识转化为实践经验,为今后的项目开发...

    Java通用范例开发金典源代码

    《Java通用范例开发金典源代码》是一个包含大量Java编程示例的资源集合,旨在帮助开发者深入理解和掌握Java编程语言的各种特性和应用场景。这个压缩包文件中的源代码覆盖了Java语言的基础到高级各个方面,是Java学习...

    java 数据库编程

    - **Java作为企业开发工具**:Java因其平台无关性、面向对象的特性以及丰富的类库支持,成为企业级应用开发的首选语言之一。它可以轻松地与各种数据库系统进行交互,从而实现高效的数据处理。 #### 二、关系型...

    java web开发

    Java Web开发是构建基于互联网应用程序的过程,主要使用Java语言,结合相关技术和框架,来创建动态、交互式的网页应用。这个“java web开发”整套教程可能涵盖了从基础到高级的各个方面,帮助学习者全面理解并掌握...

    Java+Weblogic+Oracle整和开发培训教程

    首先,Java作为一种面向对象的编程语言,以其跨平台的特性、丰富的类库和强大的性能,成为企业级应用开发的首选。在本教程中,你会学习到Java的基础语法,包括类、对象、接口、异常处理、多线程等核心概念。此外,还...

    Java EE编程 源代码

    Java EE(Java Platform, Enterprise Edition)是Oracle公司提供的一个用于构建企业级分布式应用程序的平台,它基于Java语言,包含了各种服务、API和协议,旨在简化开发、部署和管理大型网络应用。这个压缩包文件的...

    【Java web】编程爱好者博客地带.zip

    以上只是Java Web开发的部分知识点,实际的学习和实践中,还会涉及到更多如性能优化、故障排查、分布式系统设计等高级话题。对于编程爱好者来说,这个博客地带应该包含了丰富的学习资料和实战经验分享,有助于提升...

    J2EE应用编程精典150例

    在Java世界中,J2EE(Java 2 Platform, Enterprise Edition)是企业级开发的重要框架,它为构建分布式、多层的Web应用程序提供了强大的支持。本资料“J2EE应用编程精典150例”显然是针对那些希望深入理解和掌握J2EE...

    JAVAWEB开发实战经典(课堂笔记)

    这对于理解Java Web开发至关重要,因为所有Web应用都是基于Java语言构建的。 2. **Servlet与JSP**:Servlet是Java Web开发中的重要组件,用于处理HTTP请求和响应。JSP(Java Server Pages)则提供了更便捷的视图层...

    java web 开发教程

    Java Web开发教程主要涵盖了一系列用于构建Web应用程序的技术和概念,这些技术主要基于Java语言。Java Web开发是将Java编程语言应用于创建动态、交互式的Web应用的过程。本教程旨在帮助初学者理解和掌握Java Web开发...

    Java数据库编程宝典3

    1.2 高级语言 1.2.1 结构化查询语言 1.2.2 数据定义语言 1.2.3 数据处理语言 1.2.4 数据查询语言 1.3 事务管理和事务控制命令 1.3.1 ACID测试 1.3.2 SQL中的事务管理 1.4 数据库安全和数据控制语言 1.4.1 ...

    java教程全集

    - **网络应用管理系统**:基于Java和Web技术的企业内部网(Intranet)应用开发变得越来越普遍。 - **图形、图像、动画及多媒体系统**:Java支持丰富的图形用户界面(GUI)和多媒体处理,适用于设计和开发各种多媒体应用...

    JAVA入门: J2EE的学习流程

    其中,J2EE主要面向企业级应用开发,它提供了构建复杂的企业级应用程序所需的各种服务和API。对于初学者而言,理解J2EE的学习路径至关重要。 #### 一、J2SE基础学习 1. **环境搭建**: - 配置Java开发环境,安装...

    Java web开发实战,javaweb开发实战经典pdf,Java源码.zip

    Java Web开发是构建基于互联网应用程序的关键技术,尤其在企业级应用中广泛应用。这份"Java Web开发实战"资源包含了从基础到高级的全方位教程,旨在帮助开发者深入理解和掌握Java Web开发的核心概念和技术。以下是对...

Global site tag (gtag.js) - Google Analytics