基于LDAP的面向对象目录访问模型及其实现

时间:2022-10-28 11:56:58

【前言】基于LDAP的面向对象目录访问模型及其实现由文秘帮小编整理而成,但愿对你的学习工作带来帮助。1 基于LDAP的面向对象目录访问模型 在典型的三层网络应用软件系统中,业务服务层是应用软件系统的核心部分,它可以细分为四个子层,分别是业务接口子层、业务处理子层、数据实体子层和数据访问子层。前面两层因为跟业务紧密结合,不具有可抽象性。而数据实体子层和数...

基于LDAP的面向对象目录访问模型及其实现

摘要:LDAP提供了标准的接口用于目录数据的访问,但是这类接口针对目录信息树中的条目进行操作,属于较低层次的接口;同时,由于业务实体和目录条目之间不完全是一对一的关系,基于该标准接口开发的软件很难满足非功能性需求。为此,文章阐述了面向对象目录访问操作封装的必要性,并提出了针对目录服务的ldap目录访问模型及其实现技术。

关键词:LDAP;目录访问;目录信息树;对象/条目映射;类型转换

0 引言

构建一个典型的企业应用需要数据库和目录服务的合作以共同承担信息资源的存储。LDAP目录服务适合存储相对静态的,存在大量读操作的信息资源。随着网络应用的普及,它的作用日益重要,如它既是数字化校园中统一认证的重要支撑体,也是数字化校园中基础信息的主要存储体。

很多利用LDAP目录服务的网络应用直接在LDAP接口上开发。这样开发出来的应用其兼容性差;其次,开发效率低,开发人员必须同时兼顾业务逻辑和LDAP的知识;最后,应用代码和目录服务的耦合度高,不利于底层目录服务产品的更换。因此,有必要寻找一种新的基于LDAP的应用模式。

1 基于LDAP的面向对象目录访问模型

在典型的三层网络应用软件系统中,业务服务层是应用软件系统的核心部分,它可以细分为四个子层,分别是业务接口子层、业务处理子层、数据实体子层和数据访问子层。前面两层因为跟业务紧密结合,不具有可抽象性。而数据实体子层和数据访问子层的封装是模型需要解决的主要问题。

本文给出的模型由接口层和目录访问层组成。接口层是应用系统与模型的交互界面,抽象目录访问操作是应用系统业务实体的父类,业务实体的具体访问操作全部委托给下面的目录访问层。目录访问层即数据访问子层实现了许多具体目录访问操作,如对象/条目映射(O/E映射)、数据类型转换等等,同时封装了底层的LDAP目录服务存储机制,如维护与LDAP目录服务的连接、对LDAP目录服务的访问等等。

1.1 接口层

接口层提供了一套面向对象模型的抽象目录访问操作集合,包括简单地创建对象、读取对象、更新对象、删除对象,以及条件或关联的多对象实例操作。

目录访问对象只提供目录访问操作接口,其真正操作被委托给下层即目录访问层的目录访问管理器。这种处理模式结合了对象层和中间人两种模式。在对象层模式中,每个业务实体对象继承了@抽象的PersistentObject类,可执行必要的CRUD操作。这种模式下,在每个业务对象类中都要写一些数据服务层规范的访问代码,维护比较困难,但是这种模式易于实现。在中间人模式中,中间人可以从数据服务层中读取业务实体对象或将对象写入数据服务层,中间人必须知道每个业务实体对象的格式,依据数据服务层提供的访问规范生成语句去读写。这种模式将数据服务层访问代码和业务实体对象类分离开来,是一种最具伸缩性的解决方案,但是需要很多基础部件。

系统中需要持久到目录服务的业务对象必须继承于该接口,业务对象的实际存取操作由目录访问层实现。因此,业务对象和目录访问层之间是一种松散的耦合关系。

1.2 目录访问层

目录访问层从逻辑上由两部分组成:构建时(Build-time)部分和运行时(Run-time)部分。构建时部分解决系统开发时所需要解决的问题。对于本模型,所需要解决的问题就是目录访问对象和目录条目的映射以及它们的属性之间的映射,因此,在构建时需要提供这两类映射信息,它们分别是O/E(对象/条目)映射信息和属性映射信息。

运行时部分解决系统运行时需要解决的问题,包括对O/E映射和属性映射的解析、抽象目录访问的解析以及数据的存取操作。这部分主要由目录访问管理器、O/E映射管理器、属性映射管理器、数据类型管理器、目录访问描述器和运行时管理器组成。

目录访问管理器是本模型的总管,它负责接收目录访问对象所请求的目录访问操作,从O/E映射管理器和属性映射管理器中获取目录访问对象的映射信息,对目录访问操作进行解析,调用目录访问描述器将面向对象的目录访问操作映射到目录服务层中可用的目录访问操作,最后将目录访问操作委派给运行时管理器完成。

O/E映射管理器负责目录访问对象与目录信息树中条目的映射管理。在系统启动时,该管理器读取O/E映射配置信息,在内存中保存配置信息的副本。当目录访问管理器向其发送请求时,将配置信息提供给目录访问管理器。

属性映射管理器负责目录访问对象的属性与目录信息树中条目的属性之间的映射管理。在系统启动时,该管理器读取属性映射配置信息,在内存中保存配置信息的副本。当目录访问管理器向其发送请求时,将配置信息提供给目录访问管理器。

数据类型管理器负责目录访问对象中的数据类型与目录服务层中的数据类型之间的映射管理。由于目录访问对象所使用的数据类型与条目所使用的数据类型并不完全相同,因此有必要进行映射以满足目录访问对象和条目的各种需要。该管理器服务于属性映射管理器。

目录访问描述器它将面向对象的目录访问操作映射为目录服务层中相应的目录访问操作。面向对象的目录访问操作与目录服务层的目录访问操作并不完全相同,如一个面向对象的目录访问操作对应着目录服务层的一组相关操作,因此,需要进行这样的映射。该目录访问描述器服务于目录访问管理器。

运行时管理器面向对象的目录访问操作最终要转换为目录访问层能接受的操作才能使业务对象得到持久化,运行时管理器就是将上面转换后的操作真正地送给目录服务层进行运算。同时,负责对象标识管理和目录连接管理等运行时环境的管理。出于效率的考虑,在运行时管理器中可以进行必要的优化,如设置连接池等等。

2 关键技术

2.1 数据类型转换

LDAP的属性类型和Java的数据类型之间存在着一定的对应关系,LDAP中给定的各种语法类型都对应于Java语言中的String类型。当将对象数据模型中的值存到LDAP目录服务中时,需要将Java语言中定义的数据类型转换为String类型;反之,当LDAP目录服务中的数据存放到对象中时,需要将String类型转换为对象中原来定义的类型。因此,需要一个类型转换器来完成这些工作。

类型转换器需要获取数据的类型配置信息,然后根据这些配置信息将数据转换为String类型,反之亦然。我们选用XML描述数据的类型配置信息,将数据类型分成三类:简单数据类型、复杂数据类型和数组。具体的类型描述规范。

2.2 O/E映射

对象模型向LDAP信息模型转换的基础是对象映射为目录条目,对象的属性映射为条目的属性。为了实现模型转换,O/E映射需要两类信息,即对象类元信息和对象域元信息。对象类元信息存放实体类上下文信息。对象域元信息描述了对象类的属性配置信息:如果是基本类型则可以对应为相应目录服务的属性(但并不一定是一一对应);如果是实体对象,则需要在对象域元信息中填写相应信息,如对象之间的关系等等。

2.3 表达能力的设计

目录访问查询操作分为简单查询、复杂查询和助手类操作。简单查询实现对单个对象的CRUD操作,复杂查询则处理批量对象的操作,助手类操作包括用户认证、新增用户等LDAP常规操作。

简单查询的实现可以采用两种方式:第一种是将操作赋予对象本身,这种处理方式符合面向对象的习惯;第二种是提供一个专门处理目录访问操作的工具类,作为目录访问操作的,执行用户的对象式查询语句。具体采用哪种方式可以有中间件设计人员确定。

本文采用第一种方式实现,即目录访问操作作为对象的行为来实现目录的访问,具体定义示例如下:

/*

*判断存储空间是否存在指定实体Bean实例

*@param entity实体Bean实例,不能为空,否则抛出异常

*@throws如果实例的主键属性未设置则抛出异常

*/

public boolean entityExists(Entity entity)throws XDOException;

3 结束语

本文从普遍性出发,给出了解决通用目录访问所涉及到的技术内容。作为通用目录访问产品的开发者,也可以将文中所给模型作为参考模型,采用熟悉的语言和环境实现。本模型及其中间件被用于浙江大学数字化校园应用中,取得了良好的效果。

上一篇:移动事务处理模型中过区切换的策略研究 下一篇:苹果扩张版图