2022年基于JNDI的应用程序开发Java教程.docx
-
资源ID:62188567
资源大小:14.83KB
全文页数:9页
- 资源格式: DOCX
下载积分:9.9金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
2022年基于JNDI的应用程序开发Java教程.docx
2022年基于JNDI的应用程序开发Java教程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,时,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和JNDIJava 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)服务供应者更多的服务供应者可以在如下网址找到可以下载的服务供应者列表: 特殊有意思的或许是如下网址供应的Windows 注册表JNDI服务供应者: 这个服务供应者使你可以访问Windows XP/2000/NT/Me/9x的windows注册表。也可以在如下网址下载JNDI/LDAP Booster Pack: 这个Booster Pack包含了对流行的LDAP限制的支持和扩展。它代替了与LDAP 1.2.1服务供应者捆绑在一起的booster pack。关于限制和扩展的更多信息可以在如下网站看到: 另一个好玩的服务供应者是Sun的支持DSML v2.0(Directory Service Markup Language,书目服务标记语言)的服务供应者。DSML的目的是在书目服务和XML之间架起一座桥梁。JNDI APIJNDI 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方法返回一个对象,这个对象表示的是你想要找的上下文的儿子。 2022年3月28日 2022年3月28日