一种j2ee应用服务器高性能jndi服务的实现方法

文档序号:6612944阅读:136来源:国知局
专利名称:一种j2ee应用服务器高性能jndi服务的实现方法
技术领域
本发明涉及J2EE应用服务器领域,主要是一种J2EE应用服务器高性能JNDI服务的实现 方法。
背景技术
JNDI (Java Naming and Directory Interface)艮卩Java命名禾口目录接口是J2EE平台中 的一个重要组件,它是为了简化对高级网络应用开发中使用的目录结构的访问。目录是特殊 类型的数据库,提供对其所存储数据的快速访问。传统上,你可以使用不同的应用程序接口 去访问不同的目录服务,比如轻量级目录访问协议LDAP和Sun公司的网络信息服务NIS。然 而,JNDI提供了一种标准的应用程序接口来访问任何类型的目录,JNDI也可以用于来存取网 络上的Java对象。
JNDI是一组标准的Java应用程序接口 ,它提供了装载现有各种不同命名服务(域名服务 系统、轻量级目录访问协议、网络信息服务和文件系统等)的通用接口。 JNDI应用程序接口 逻辑上可分为 一组用于存取命名服务的客户端应用程序接口和一组允许用户创建命名服务 的服务程序接口。
目前,市场上占有率比较高的实现JNDI服务的商业产品中,各有千秋。但是他们都只是 针对某一类型的目录服务而设计的,如有的是针对重量级命名和目录服务,而轻量级命名和 目录的访问不能得到有效的支持;有的是针对轻量级命名和目录服务,而重量级命名和目录 的访问不能得到有效的支持。在国外,著名的开源公司JBoss在JBoss4.0版本中实现了一 个完善的重量级的命名服务,因而JBoss命名空间的存储结构只适宜大型的平台。在国内, 灰狐也是在参考了 JBoss的基础上,在自己的针对较轻量级J2EE平台的实现一JFox中,实 现了有自己特点的快速的命名服务,JFox命名空间则是用于较轻量级的平台。这两个JNDI 实现同时也代表了当前实现JNDI的两大方向, 一个是针对大的企业系统实现功能完善的 JNDI,另一个是实现快速的轻量级的JNDI。他们的优势是的有目共睹的,但是,不足也是显 而易见的,由于他们支持的命名和目录服务的局限性,导致他们不能高效的访问所有对象。
所以,如何将这两种JNDI的特性融合在一起,开发出一种既可以高效地访问重量级目录 服务又能高效地访问轻量级目录服务的JNDI即髙性能JNDI成为业界的迫切需要。

发明内容
本发明要解决上述技术所存在的缺陷,提供一种J2EE应用服务器高性能JNDI服务的实 现方法, 一种基于JNDI标准的既可以支持重量级目录快速访问又可以支持轻量级目录快速访 问的高性能JNDI服务。
本发明解决其技术问题所采用的技术方案本发明提出了一种全新的服务器端命名空间 存储结构,其目的在于开发实现一种高稳定的,高性能的命名服务,既能够适用于大型平台, 同时又能提高应用于较轻量级平台时的査找效率,为整个系统提供较好的服务基础。
这种J2EE应用服务器高性能JNDI服务的实现方法,命名服务实现过程中,将整个模块 划分为3个部分分别实现的,这3个部分分别是服务器端、客户端、客户端与服务器端的 连接;其中,服务器端主要实现命名空间存储结构的设计,以及服务器端的缓存策略;客户 端主要实现对服务器端缓存的处理;客户端与服务器端的连接主要是建立客户端与服务器端 的连接;
当客户端要通过JNDI査找服务器端某个对象时-
(1) 先在客户端缓存中查找;
(2) 若査找成功,则直接返回查找结果;
(3) 若上一步查找失败,客户端通过客户端与服务器端的连接在服务器上查找;
(4) 若服务器端缓存中査找到,则直接返回査找结果;
(5) 若上一步査找失败,则在服务器端命名空间存储结构中查找;
(6) 若査找成功,则直接返回查找结果,否则查找失败返回。
本发明有益的效果是-
将命名上下文与名称操作类分离;
*采用树形存储结构实现层式命名空间;
*直接通过套接字编程,使用序列化和MarshalledObject来实现服务;
*跨虚拟机,同一虚拟机存取不需要通过套接字;
*客户端端作了 Naming Server的缓存;
*支持引用存储,但是只支持URL类型的引用;
* Naming Server端实现客户端缓存的机制,在JNDI树比较深、树上绑定对象数量比
较多的时候可以提高命名服务索引的速度; *整个空间有一个上下文哈希映射表直接通过命名査找对应的上下文。


图1为JNDI Server命名空间的存储结构;
图2为JNDI模块的体系结构具体实施例方式
下面结合附图和实施例对本发明作进一步介绍
这种J2EE应用服务器高性能JNDI服务的实现方法,命名服务实现过程中,将整个模块 划分为3个部分分别实现的,这3个部分分别是服务器端、客户端、客户端与服务器端的 连接;其中,服务器端主要实现命名空间存储结构的设计,以及服务器端的缓存策略;客户 端主要实现对服务器端缓存的处理;客户端与服务器端的连接主要是建立客户端与服务器端 的连接;
当客户端要通过JNDI查找服务器端某个对象时
(1) 先在客户端缓存中査找;
(2) 若査找成功,则直接返回査找结果;
(3) 若上一步查找失败,客户端通过客户端与服务器端的连接在服务器上査找;
(4) 若服务器端缓存中査找到,则直接返回査找结果;
(5) 若上一步査找失败,则在服务器端命名空间存储结构中査找;
(6) 若査找成功,则直接返回査找结果,否则査找失败返回。 本发明实现方法将按照上面划分的三个部分实现一一介绍如下
一服务器端的实现
服务器端的实现包括底层的存储实现、命名空间存储结构的设计和服务器端缓存的实现。
1. 底层的存储实现
Java命名协议是直接通过套接字编程,使用序列化机制和MarshalledObject来实现服 务的,首先将存储的对象通过MarshalledObject封装(串行化),然后存储在NameServer里 面,解析时,会将其解封装再返回,MarshalledObject类的神奇之处在于它会根据URL或 者远程对象的桩Stub自动重新载入封装的类。
2. 服务端的存储结构的实现
为了既能够适用于大型平台,同时又能提高应用于较轻量级平台时的査找效率,服务器 端的存储结构采用了平面结构与树状结构的结合。
平面结构是为轻量级平台设计的。使用平面存储结构实现层式命名空间,这样在索引时 避开了递归搜索,在对象数量比较少的时候可以提高索引速度,但同时增加了维护上下文的 难度,在对象数量比较多的时候索引速度不如树形存储结构。
树状结构是为重量级平台设计的。完全树状结构,每个命名上下文都有一个哈希映射表记 录其下面的子命名上下文和资源对象,递归査找直到树的最底层。在对象数量比较多的时候 树形存储结构具有明显的优势。
参数传入绝对名称,平面结构+树状结构,整个空间有一个命名上下文哈希映射表,直接通 过该名称査找对应的命名上下文,每个命名上下文又有一个哈希映射表记录其下面的子上下 文和资源对象,这样便于遍历所有绑定,在建立时有两套哈希映射表要维护,査找时需且仅需 经过两次对哈希映射表的査找。
3. Server端的缓存机制
为了设计一种命名空间的存储结构,不仅对于大型的平台较适宜,效率较高,而且对于 较轻量级的平台査找效率仍然较高,我们采用了缓存机制等巧妙的手段来寻找一个平衡。服 务器端的缓存绑定类负责对命名服务中的绑定项进行缓存,它将命名服务中的绑定缓存到一 个哈希映射表实例中。缓存绑定类封装了对绑定的一些操作,如增加新的绑定值,删除已缓 存的绑定,査找并获取以缓存的绑定和删除所有已缓存的绑定。
所以,当客户端需要査找一个对象时,首先会在服务器端的缓存哈希表中査找,若缓存 哈希表中存在该对象的绑定,则査找成功并返回结果,这样大大提供了査找对象的速度。当 缓存哈希表中不存在该对象绑定,先将该对象缓存到服务器端,然后再在服务器端的命名空 间査找。当再次查找该对象时,由于该对象已经存在于缓存哈希表,则直接可以査找成功, 从而提高了整体的查询速度。
二客户端的实现
客户端主要是实现客户端的缓存。
Client端的缓存机制
由于客户端对某个服务器上的某个对象访问后,在将来某个时刻,该客户端可能会对该 对象再次访问。若客户端对每次访问的服务器信息进行跟踪,那么客户端针对同一对象的每 一次访问都需要重新査找,这样大大降低了 JNDI的查找效率。所以我们在服务器端对已经访 问过的服务器相关信息进行了缓存。客户端的缓存服务端类就是负责对已经访问过的服务器地址和端口信息进行了缓存,它将服务器的地址和端口与名称实例最为键值对增加到哈希表 中。缓存服务端类封装了一些缓存操作,如增加新的服务器信息记录,删除已缓存的服务器 信息,査找并获取以缓存的服务器信息。
所以,在客户端向服务端请求命名实例前,先检査将要访问的服务器地址和端口是否在 缓存中,若要访问的服务器地址和端口存在,则直接使用已经存在的服务器上的命名实例。 否则,将新的要访问的服务器地址和端口添加到缓存。
三客户端与服务器端连接的实现
客户端与服务器端的连接主要是建立客户端与服务器端的连接。
服务端与客户端的联系
客户端与服务器端之间的联系是通过命名上下文接口是现实的。命名上下文接口的实现 类采用了基于Java套接字/远程方法调用的实现思想。它是一种能被远程调用的客户端/服 务器端的实现。该实现方法实现了命名存取的优化即在同一虚拟机(即J2EE Server所运行 的虚拟机)中进行存取不需要通过套接字。
客户端的命名上下文接口的实现类是Contextl卿l,而服务器端的命名上下文接口的实 现类是NamingServer类。这两个类都实现了命名上下文接口的方法如查找、绑定、取消绑定、 重绑定、枚举所有绑定、销毁指定上下文和创建指定上下文等方法。当客户端需要向服务器 请求某项服务时,比如向服务器查找某个对象的绑定,客户端会将该请求委派给服务器端的 NamingServer类,由该类来处理査找请求,该类处理请求后将结果返回给客户端。
具体实现方法如下
图1所示为JNDI模块的体系结构图,它描述了 JNDI模块的大体框架。 该体系结构图可以分为两个部分,左部分是与客户端相关的,执行客户端的一些功能,
右部分则是与服务器端相关的,执行服务器的功能。这两部分是通过中间的接口 Context进
行交互的。
服务器端命名服务类负责JNDI服务的启动。客户端通过工厂类初始化上下文工厂创建一 个上下文实例。当客服端通过该上下文实例向服务器端查找对象。服务器端将在命名空间内 査找对象并将结果返回给客户端。
图2所示为JNDI Server命名空间的存储结构,它描述了客户端向服务器端査找请求时, 服务器端是如何在器命名空间査找对象的。
当客户端通过命名上下文接口向服务器端发送査找请求lookup时,客户端先检查将要访 问的服务器地址和端口是否在缓存中,若要访问的服务器地址和端口存在,则直接使用已经存在的服务器上的命名实例(即N柳ingServer类实例)。当客服端找到服务器的命名实例后, 服务器端的处理类NamingServer接受并处理该请求。 具体的査找步骤如下-
1. 服务器端的缓存绑定类将尝试在其缓存区中直接査找该对象。若缓存哈希表中存在该 对象的绑定,则査找成功并将结果返回给客户端。
2. 若步1査找失败,先将该对象缓存到服务器端,然后再向下査找上下文哈希映射表 空间。该空间结构是平面存储结构,在对象数量比较少的时候可以提高索引速度。这对于轻 量级的命名空间査找很有效。若上下文哈希映射表中存在该对象的绑定,则査找成功并将结 果返回给客户端。
3. 若步2査找失败,服务器端的处理类NamingServer将査找命名空间。该空间结构是 完全树状结构,每个上下文(对应于NamingServer)都有一个哈希映射表记录其下面的子上下 文和资源对象,递归查找树状结构的最底层。若査到则査找成功并将结果返回给客户端。
4. 若步3査找失败,否则整个查找失败并向客户端返回失败信息。
上述实施例用来解释说明本发明,而不是对本发明进行限制,在本发明的精神和权利要 求的保护范围内,对本发明作出的任何修改和改变,都落入本发明的保护范围。
权利要求
1、一种J2EE应用服务器高性能JNDI服务的实现方法,其特征在于命名服务实现过程中,将整个模块划分为3个部分分别实现的,这3个部分分别是服务器端、客户端、客户端与服务器端的连接;其中,服务器端主要实现命名空间存储结构的设计,以及服务器端的缓存策略;客户端主要实现对服务器端缓存的处理;客户端与服务器端的连接主要是建立客户端与服务器端的连接;当客户端要通过JNDI查找服务器端某个对象时(1)先在客户端缓存中查找;(2)若查找成功,则直接返回查找结果;(3)若上一步查找失败,客户端通过客户端与服务器端的连接在服务器上查找;(4)若服务器端缓存中查找到,则直接返回查找结果;(5)若上一步查找失败,则在服务器端命名空间存储结构中查找;(6)若查找成功,则直接返回查找结果,否则查找失败返回。
2、 根据权利要求l所述的J2EE应用服务器高性能JNDI服务的实现方法,其特征在于 客户端主要是实现客户端的缓存,客户端的缓存服务端类就是负责对已经访问过的服务器地 址和端口信息了缓存,它将服务器的地址和端口与名称实例最为键值对增加到哈希表中,缓 存服务端类封装了缓存操作;在客户端向服务端请求命名实例前,先检査将要访问的服务器 地址和端口是否在缓存中,若要访问的服务器地址和端口存在,则直接使用已经存在的服务 器上的命名实例,否则,将新的要访问的服务器地址和端口添加到缓存。
3、 根据权利要求l所述的J2EE应用服务器高性能JNDI服务的实现方法,其特征在于客户端与服务器端的连接主要是建立客户端与服务器端的连接,客户端与服务器端之间的联 系是通过命名上下文接口实现的。
全文摘要
本发明涉及一种J2EE应用服务器高性能JNDI服务的实现方法,命名服务实现过程中,将整个模块划分为3个部分分别实现的,这3个部分分别是服务器端、客户端、客户端与服务器端的连接;其中,服务器端主要实现命名空间存储结构的设计,以及服务器端的缓存策略;客户端主要实现对服务器端缓存的处理。本发明有益的效果是将命名上下文与名称操作类分离;采用树形存储结构实现层式命名空间;直接通过套接字编程,使用序列化和MarshalledObject来实现服务;跨虚拟机,同一虚拟机存取不需要通过套接字;客户端端作了Naming Server的缓存,支持引用存储。Naming Server端实现客户端缓存的机制,在JNDI树比较深、树上绑定对象数量比较多的时候可以提高命名服务索引的速度。
文档编号G06F9/46GK101196830SQ20071016475
公开日2008年6月11日 申请日期2007年12月12日 优先权日2007年12月12日
发明者健 吴, 吴朝晖, 尹建伟, 武 李, 莹 李, 邓水光, 陈伟才 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1