1,JNDI(命名服务和目录服务):
命名服务和目录服务一般简称为命名服务,是分布式系统的基本公共服务。JavaRMI技术,JavaCORBA技术,J2EE技术都涉及命名和目录服务。
命名是给一个对象起一个名字,也称为把名字绑定(binding)到对象上,命名的目的是用人们容易理解的名字来代替计算机中描述存储的对象,以后就可以通过这个名字来查找对应的对象。对象可以是一个一般的类对象(比如一个字符串),也可以是一个域名,一个文件,甚至是一个目录。
对象名与对应的对象构成的集合被称为对象上下文(Context)。例如,在文件命名系统中,一个目录就是一个Context,其内容是文件名和对应的文件的集合。一个Context可能还有子上下文(SubContext),例如java\lib中,java和lib都是Context,而lib是java的SubContext。
一个系统中所有名字的集合又称为名字空间。如文件系统的名字空间是系统上的所有文件名和目录名组成的集合。
不同用途的对象,其命名规则是不同的,例如命名文件用类似于C:\autoexec.bat的格式,域名命名用类似于 www.hostname.com的格式。命名系统就是具有同样命名规则的Context的集合。
命名服务(Naming Service)是命名系统提供的服务功能。不同的对象构成不同的命名系统,因而构成不同的命名服务,如对象命名服务,文件命名服务,域名服务等等。它们提供不同用途的服务,如对象命名服务把名字对应到对象,而文件命名服务把文件名对应到文件,域名服务则把域名对应到一个IP地址。
目录服务(Directory Service)是命名服务的扩展。它不仅把名字与对象对应起来,并且把名字与对象属性(Attribute)联系在一起,因此不仅可以通过名字还可以通过属性来搜索对象,目录服务可用于以下方面:
1),以分布式存储有关系统构成的信息,在多个服务器中复制目录,用户能够通过查询本地服务器得到所需要的信息;
2),允许单一用户登陆,查询并使用服务,资源和应用程序。
3),把资源管理放在与位置无关的点上,管理工具不必集中放置。
4),复制数据提供一致性访问,对目录的任何改变能及时地在网上传播,以便访问目录的应用程序无论何时何地都能看到改变后的一致信息。
JNDI就是JAVA的命名和目录服务接口。
命名服务程序开发步骤:
(1),为了通过Context和与其相关的接口和类实现命名服务的操作,必须首先建立Context或子类,子接口的对象,方法。
(2),建立HashTable对象ht,存放Context的环境特征,
即指定命名服务类型和命名服务提供商软件:
HashTable ht = new HashTable();
ht.put(context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.wlinitialcontextfactory");
指定命名服务范围,命名服务只能在这个范围进行:
ht.put(context.PROVIDER_URL, "t3://localhost:7001");
调用InitialContext构造函数获取初始的Context对象,实际上此时已开始执行JNDI操作:
Context ctx = new InitialContext(ht);
绑定对象:
ctx.rebind("JNDIName", obj);
查找对象:
Object object = ctx.lookup("JNDIName");
关闭Context。