基于动态代理的数据访问对象模式的实现方法技术

技术编号:2847474 阅读:248 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及现代企业应用软件数据持久层,尤其是基于动态代理技术的数据访问对象模式的实现方法。本发明专利技术目的是这样实现的:基于动态代理技术的数据访问对象模式的方法,由DAO一个定义了相关对象数据库操作的接口,采用的面向对象的设计,而数据库的关系模式与对象之间存在一个结构上的断层,由在数据库与域对象层加入一个转换层,即使用数据访问对象(DAO)模式层,在DAO的具体实现上采用了开源对象关系映射工具Hibernate,应由DAO层来负责与Hibernate的AP1交互,使程序的其他部分与对Hibernate的直接操作分离开来,在需要的时候替换掉Hibernate而改用其他方案来实现。

【技术实现步骤摘要】

本专利技术涉及现代企业应用软件数据持久层,尤其是基于动态代理技术的数据访问对象模式的实现方法。
技术介绍
许多真实的企业应用程序需要在一定程度上使用持久性数据。对于许多应用程序,持久性存储是使用不同的机制实现的,并且用来访问这些不同的持久性存储机制的API也有很大的不同。数据是任何计算机应用程序最重要的方面。计算机应用程序的核心是使某人或另一个计算机系统能够访问其数据。在企业环境中,数据不仅必须是可访问的(即,与用户界面连接并按一系列业务规则管理),而且还必须是持久的。持久数据存储就是即使在服务器崩溃的情况下仍能存在的数据存储。持久数据存在于应用程序的活动内存之外,通常在数据库或平面文件系统中。虽然持久数据被读入瞬时存储器以供使用或修改,但它始终被写到外部数据存储中以长期存储。美国国家标准与技术研究所(The United States National Institute of Standards and Technology)定义了三种级别的持久数据部分持久数据是一种仅允许对最新版本更新的持久数据结构。持久数据是一种保留其旧版本的数据结构;即,以前版本和当前版本都可能被查询。完全持久数据是一种维护其数据的所有版本并允许对这些版本更新的持久数据结构。大多数业务应用程序至少提供部分持久数据。这种类型的持久性在事务中期或者甚至在请求中期出现系统故障时容易遭破坏,这会导致数据不完整且常常遭毁坏。另一方面,在持久数据实现中,对系统中断或故障以“回滚(rollback)”回应,数据状态被回滚到上一个已知的良好配置。持久数据实现在企业体系结构和数据库管理系统(DBMS)中很常见。完全持久数据实现非常少见。完全持久数据实现的少数几个示例有日志记录文件系统、VMS文件系统(如VAX和Mac OS X)以及并发版本控制系统(CVS)。比如,应用程序使用实体bean(这里应该是指BMP的bean,CMP的bean已大大降低了与RDBMS的耦合)的分布式组件来表示持久性数据,或者使用JDBC API来访问驻留在某关系数据库管理系统(RDBMS)中的数据,这些组件中包含连接性和数据访问代码会引入这些组件与数据源实现之间的紧密耦合。组件中这类代码依赖性使应用程序从某种数据源迁移到其他种类的数据源将变得非常麻烦和困难。当数据源变化时,组件也需要改变,以便于能够处理新类型的数据源。关系数据库管理系统(RDBMS)是一个让你创建、更新和管理一个关系数据库的程序。RDBMS软件的技巧,以及故障诊断信息。这些信息是为数据库管理员和其他负责安装和RDBMS的人员提供的。要了解这些任务的含义以及有关执行这些任务的完整指示信息,请参考数据库供应商的文档。CN200410095805.5是将数据库从源计算机系统复制到目标计算机系统的方法,它包括以下步骤1)接收来自于源计算机系统的日志项;2)检查日志项,查看是否在动态索引中有一个输入项,它给出与一数据库项有关的处理信息,所述日志项与该数据库有关;以及3)如果在动态表中存在输入项,则按照相关的处理信息处理日志项;或者4)如果在动态索引中没有输入项,则在分配数据库中寻找数据库项的相关处理信息,建立输入项并在动态索引中存储,并且按照处理信息处理日志项。使用数据访问对象(DAO)模式来抽象和封装所有对数据源的访问。DAO管理着与数据源的连接以便检索和存储数据。DAO实现了用来操作数据源的访问机制。数据源可以是RDBMS,LDAP,File等。依赖于DAO的业务组件为其客户端使用DAO提供更简单的接口。DAO完全向客户端隐藏了数据源实现细节。由于当低层数据源实现变化时,DAO向客户端提供的接口不会变化,所有该模式允许DAO调整到不同的存储模式,而不会影响其客户端或者业务组件。重要的是,DAO充当组件和数据源之间的适配器。实现结构图如下述bean的一站式(single-stop)解决方案同更复杂的(但更健壮的)会话bean与Java数据库连接(Java Database Connectivity,JDBC)代码的组合。可以比较Java数据对象(Java Data Object,JDO)与实体bean。实体bean,它提供健壮的数据持久性。bean容器处理大部分的数据完整性、资源管理和并发性功能,从而使开发人员关注业务逻辑和数据处理,而不是这些低级细节。使用bean管理的持久性(Bean Managed Persistence,BMP)实体bean时,开发人员编写持久性代码而容器确定何时执行该代码。使用容器管理的持久性(ContainerManaged Persistence,CMP)实体bean时,容器生成持久性代码并管理持久性逻辑。JDBC,当与会话bean结合时,它可提供简便的EJB开发和与平台无关的部署,而没有象EJB技术那样的资源使用和内存开销。象BMP实体bean一样,该解决方案要求开发人员编写持久性代码。与BMP bean不同的是,它还要求开发人员编写持久性逻辑。因而,开发人员负责确定何时将数据持久保留在数据存储中以及何时从数据存储装入数据。Java数据对象是最新的持久性机制。JDO提供了面向对象的持久数据存储。开发人员使用POJO(无格式普通Java对象,plain ordinary Java objeet)来装入和存储持久数据。实体bean的优点到企业级数据持久性时,实体bean有下列优点标准化。EJB规范定义一组与供应商无关的接口,J2EE供应商可以实现这些接口来支持实体bean。这种标准化允许采用最佳实践的开发并缩短雇用新开发人员时的适应期。因为基本的组件体系结构和设计模式大家都知道,所以很容易找到合格的人才来实现它们。容器管理的服务。正如我们在本系列的前两篇文章中讨论的那样,EJB容器管理的服务为处理诸如安全性、事务处理、连接合用和资源管理之类的企业功能提供了极大的好处。透明持久性。容器管理的服务思想在CMP实体bean中得到了进一步加强。这里,容器还自动管理持久性语义。使用BMP实体bean时,开发人员必须编写持久性逻辑,而容器则确定何时调用由开发人员定义的方法。同时使用CMP和BMP实体bean时,容器决定何时持续保持bean的状态以及如何确保与底层数据存储的数据完整性和并发性。事务支持。开发人员对CMP事务(隔离级别、事务需求和方法的包含/排除)有粗粒度的控制权,对BMP事务有细粒度的控制权,这些控制都是通过在bean代码中以程序方式处理事务语义实现的。在这两种情况下,容器管理事务并确定是否应该提交给定的事务。实体bean的缺点是设计复杂。容器管理的服务和自动透明持久性的代价很高。它们在几个级别上给应用程序设计带来复杂性。首先,为了避免网络开销并强制遵守业务规则,几乎总是通过会话bean访问实体bean。因此,每个事务至少涉及两个企业bean(往往会多得多)。涉及的组件越多,则体系结构的设计、编码和维护就变得越复杂。其次,存在自动操作成本。容器有点类似于有魔力的黑盒。只要它认为适当,就会调用bean回调方法,它可随时选择创建和破坏bean实例,激活和钝化bean,并且将其状态存储到持久数据存储中或从其中装入。应用程序代码无法控制这些事情发生的方式或时间。从积极本文档来自技高网...

【技术保护点】
基于动态代理的数据访问对象模式的实现方法,由DAO一个定义了相关对象数据库操作的接口:所有需要的CRUD(Create,Read,Update,Delete)方法,通过主键查询相关域对象的方法及查询所有相关域对象的方法使用Java动态代理方法,以一种通用的机制实现数据存取即DAO实现,结合代码生成工具提供与业务绑定的DAO接口,解除了数据持久层与业务逻辑之间的耦合;采用的面向对象的设计,而数据库的关系模式与对象之间存在一个结构上的断层,由在数据库与域对象层加入一个转换层,即使用数据访问对象(DAO)模式层,在DAO的具体实现上采用了开源对象关系映射工具Hibernate,由DAO层来负责与映射工具Hibernate的API交互,使程序的其他部分与对Hibernate的直接操作分离开来,在需要的时候替换掉映射工具Hibernate而改用其他方案来实现;采用了开源对象关系映射工具Hibernate的方法是:采用了一个统一入口来根据不同的域对象产生相应DAO接口的实现。这个统一入口就是IDaoFactory,这个方法接受一个域对象Class作为输入参数,通过java动态代理机制生成并返回这个域对象DAO的一个实现。...

【技术特征摘要】
1.基于动态代理的数据访问对象模式的实现方法,由DAO一个定义了相关对象数据库操作的接口所有需要的CRUD(Create,Read,Update,Delete)方法,通过主键查询相关域对象的方法及查询所有相关域对象的方法使用Java动态代理方法,以一种通用的机制实现数据存取即DAO实现,结合代码生成工具提供与业务绑定的DAO接口,解除了数据持久层与业务逻辑之间的耦合;采用的面向对象的设计,而数据库的关系模式与对象之间存在一个结构上的断层,由在数据库与域对象层加入一个转换层,即使用数据访问对象(DAO)模式层,在DAO的具体实现上采用了开源对象关系映射工具Hibernate,由DAO层来负责与映射工具Hibernate的API交互,使程序的其他部分与对Hibernate的直接操作分离开来,在需要的时候替换掉映射工具Hibernate而改用其他方案来实现;采用了开源对象关系映射工具Hibernate的方法是采用了一个统一入口来根据不同的域对象产生相应DAO接口的实现。这个统一入口就是IDaoFactory,这个方法接受一个域对象Class作为输入参数,通过java动态代理机制生成并返回这个域对象DAO的一个实现。2.根据权利要求1所述的基于动态代理的数据访问对象模式的实现方法,其特征是统一入口来根据不同的域对象产生相应DAO接口的实现,统一入口IDaoFactory的定义如下public interface IDaoFactory{Object getDao(Class daoInterface);}这个接口的实现是DaoFactory。3.根据权利要求1所述的基于动态代理的数据访问对象模式的实现方法,其特征是编写DAO接口的方法是包括了一个DAO接口代码生成工具,将Alarm领域类作为此工具的输入,输出既是DAO接口文件,这里的名称是IAlarmDao.java,此文件包含接口IAlarmDao接口,代码如下public interface IAlarmDao{public Object add(Alarm alarm)throws PersistenceException;publi...

【专利技术属性】
技术研发人员:吴旻哲黄小新宋海华
申请(专利权)人:南京联创科技股份有限公司
类型:发明
国别省市:84[中国|南京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1