`
lixinye0123
  • 浏览: 333313 次
  • 性别: Icon_minigender_1
  • 来自: 温州
社区版块
存档分类
最新评论

基于JNDI的应用开发

    博客分类:
  • Java
阅读更多
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方法返回一个对象,这个对象表示的是你想要找的上下文的儿子。
分享到:
评论

相关推荐

    websphere上发布基于jndi的应用

    在IT行业中,WebSphere是一款由IBM开发的企业级应用服务器,广泛用于部署和管理Java应用程序,尤其是基于JNDI(Java Naming and Directory Interface)的应用。JNDI是Java平台的一个核心API,它为Java应用程序提供了...

    2022年基于JNDI的应用程序开发Java教程.docx

    在实际开发中,JNDI广泛应用于企业级Java应用,如EJB组件的定位、配置信息的存储、网络资源的管理和访问。通过JNDI,开发者可以方便地集成各种服务,提高代码的可移植性和灵活性。 JNDI的基本操作包括查找(lookup...

    Spring JMS消息处理-不基于JNDI

    JNDI通常用于查找JMS资源,如ConnectionFactory和Destination,但在某些环境中,我们可能需要避免使用JNDI,例如在本地开发或测试时。 首先,让我们了解JMS的基本概念。JMS是一个Java API,定义了生产、消费、队列...

    基于JNDI的应用程序开发

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

    Spring JMS 消息处理-基于JNDI

    在IT行业中,Spring框架是Java开发中的重要工具,它提供了丰富的功能来简化应用程序的构建,尤其是在企业级应用中。Spring JMS(Java消息服务)模块是Spring框架的一部分,用于处理消息队列通信,这是一种异步处理和...

    基于JNDI的数据库连接池技术及应用

    在分析数据库连接池工作原理的基础上,给出了Tomcat服务器数据库连接池的配置实例,以及在JSP页面中使用此连接池进行数据库访问的Java代码。在大型Web站点的开发中,使用数据库连接池技术是必要的,也是可取的。

    Tomcat中JNDI原理

    在Tomcat中,JNDI实现是基于标准JNDI API的,但针对Web应用服务器做了特定优化。它使用`org.apache.naming.NamingContext`作为其上下文实现,这使得开发者可以通过简单的JNDI调用来访问配置的资源。 ##### 2.2 ...

    基于WADE平台的WEB应用开发指南

    基于WADE平台的WEB应用开发指南 WADE平台是基于J2EE的Web开发框架,旨在提供一种高效、灵活、可靠的Web应用开发解决方案。该平台提供了强大的开发工具、灵活的框架结构和完善的开发文档,帮助开发者快速、高效地...

    基于J2EE的BS方案数据应用开发

    【基于J2EE的BS方案数据应用开发】深入解析 J2EE(Java 2 Platform, Enterprise Edition)是由Sun Microsystems公司推出的面向企业级应用开发的平台,它建立在J2SE(Java 2 Platform, Standard Edition)之上,为...

    连接基于文件系统实现的JNDI服务器所需要的JAR包

    在实际应用中,这种基于文件系统的JNDI实现可能用于简化配置,或者在没有实际目录服务的情况下进行快速原型设计。然而,它的功能相对有限,不适合大规模的生产环境,因为文件系统不是设计用来处理并发访问和复杂的...

    J2EE应用开发详解

    内容为J2EE应用开发详解中的源代码 第1章 Java Web应用开发简介 1 1.1 Java EE应用概述 1 1.2 Java EE概念 1 1.2.1 Java EE多层模型 1 1.2.2 Java EE体系结构 2 1.3 Java EE的核心API与组件 4 1.4 Web服务器和应用...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    例如,JSF作为Sun公司提供的Java EE标准技术之一,是用于简化基于组件的Java Web应用开发的框架。EJB 3规范则是基于注解和POJO(Plain Old Java Object)的轻量级服务端组件模型,它在Java EE平台中扮演了业务逻辑层...

    基于WADE平台的WEB应用开发指南.doc

    《基于WADE平台的WEB应用开发指南》 在进行基于WADE平台的WEB应用开发时,首先需要确保拥有正确的开发环境和工具。该文档详细介绍了如何搭建开发环境以及如何运行和配置QuickStart应用,这对于理解WADE平台的开发...

    Struts+Jndi+Ajax

    Struts是Apache软件基金会的一个开源项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架。Struts提供了处理HTTP请求、业务逻辑控制和视图展示的结构,使得开发者能够更好地组织代码,...

    基于Java的实例开发源码-EJB中JNDI的使用源码例子.zip

    总的来说,JNDI在Java和EJB开发中扮演着关键角色,它为应用程序提供了一种统一的方式来访问和管理各种资源和服务。通过深入学习和实践,开发者可以更好地利用Java EE提供的强大功能,构建更高效、可扩展的企业级应用...

    开发基于JBoss的J2EE应用

    尽管JBoss作为开源项目存在文档相对较少的挑战,但其强大的社区支持和丰富的资源库使得开发者仍能高效地进行基于JBoss的J2EE应用开发。本文介绍的配置与实践技巧,旨在帮助开发者更好地理解和掌握在JBoss 3.2.1环境...

    基于JAVA的企业级应用开发复习资料

    ### 基于JAVA的企业级应用开发复习资料知识点解析 #### 一、简答题解析 **1) 解释下面关于J2EE的名词** - **RMI (Remote Method Invocation)**:RMI是一种允许一个Java虚拟机上的对象调用另一个可能位于不同虚拟...

    网站开发JNDI与连接池.pptx

    在实际的Web应用开发中,JNDI常被用来查找和获取数据源,而连接池如DBCP和C3P0则负责管理和优化数据库连接的使用。开发者通过配置连接池参数,可以调整连接池的行为以适应不同的应用场景,比如调整最小和最大连接数...

    JNDI 详细解读

    为了更好地解决远程对象查找的问题,Java 社区开发出了 RMI 和 RMI-IIOP 技术,而 JNDI 技术则是在此基础上进一步发展而来,它使得查找远程或本地对象变得更加方便。 #### 三、JNDI 支持的服务 JNDI 可以访问多种...

Global site tag (gtag.js) - Google Analytics