【delphi开源代码栏目提醒】:网学会员为广大网友收集整理了,基于Java技术的数据对象的研究与实现 - 硕士论文,希望对大家有所帮助!
大连理工大学 硕士学位
论文基于Java技术的数据对象的研究与实现 级别:硕士 专业:软件工程 指导教师:姜国海 20050528 大连理工大学硕士学位
论文 摘 要 数据持久性是企业应用开发中最棘手的一个方面。
持久数据存在于应用程序的活动内存之外,通常在数据库或平面文件系统中。
Java数据对象技术(JDO)是Jaya平台的一项重要创新,JDO中独到的核心思想是在尽可能不增加程序员额外工作的情况下提供一个面向Java应用的数据库存储机制。
本文在对JDO规范以及Hibernate的研究和分析的基础上,对Java数据对象进行了更深一步的探讨。
本文对Java数据对象操作进行了抽象化,将这些数据对象操作的共同之处抽取出来,形成了~个具有通用性的Java数据对象,将其命名为AJDO(AbslxactJava Data Object)。
通过这种方式,使Java数据对象具有了更高的灵活性。
在对AJDO的分析与设计中,通过对事务处理的深入研究,从而将事务的原子性、一致性、隔离性、持久性完整的体现到了AJDO的持久化过程以及查询过程中。
同时在对数据源的分析过程中,将Oracle表空间的概念应用其中,因此通过初始化阶段的数掘源配置,很大程度上方便了持久化操作和查询操作中对多种关系型数据库的并发访问。
在进行持久化操作设计时,面对关系型数据库之间存在的差异,对持久化操作进行了抽象,使不同数据库类型中的优点能够在AJDO的持久化过程中体现出来。
并且,‘使用统一建模语言UML(Unified Modeling Language)进行面向对象的分析和建模,使得对Java数据对象的分析和设计变的更生动。
最后,本文以Oracle8.1.7为后台数据库,完成了对√~巾O的编码。
本文所研究的内容,对以面向对象的方式访问关系型数据库具有一定的意义,也是一种通用的数据库中间件解决方案,对Java数据对象到关系型数据库的O/R Mapping进行了更深一步的研究,具有一定的理论和现实意义。
关键词:Java数据对象:抽象Java数据对象:持久化一 茎王!!翌垫查塑塑塑型墨塑堑壅皇塞望 The research and reaUty for data object based on Java technology Abstract Data persistence is one of the trickiest aspects of enterprise development.Persistent dam exists outside ofan application’s active memory,typically in a database or flat file system,Java Dam Object is all important innovation ofJava platform.The core’s idea in JDO can provide the storage to oNect oriented Java which doesn’t increase exlra works of pmgranmler as soon as possible. This paper is based oil JDO Criterion and analysis幻Hibernate.Furthermore.it is Slnher discussion to Java Data Object.In this paper,I abstracted the Java Data Object and refined these data objects 7 corn/non characters.According to these,I formed a new Java Data Object whose charactem are the same。
It is named AJDO(Abstract Java Data Object).Through tt/s function, the Java Data Object has much more advantage. During the analysis and design ofAJDO,I am researching transaction carefully and as the result the atomicity,consistency,isolation and durability oftransaction perfectly are embodied in the c0111”se of persistence and inquiry of AJDO.Meanwhile,the congept of Oracle TableSpace is used in the AJDO in the course ofdata source analysis.Owing to these,it is also convenient for concurrent access to Relation Database by data source config.In the design of perdurable operation,I abstracted the perdurable operation in order to show the advantages of different databases because of the disparity of Relation Databases.Besides,the UML(Unified Modeling Language)is adopted to help finishing analysis and designing ofJava Data Object.At last.the code ofAJDO has been finished based on Oracle8.1.7. rnle reseai’ch in this paper is general resoNe about aP.p-cess control in database,it is also a solution ofDatabase middieware.And it can carry onl further study fi’om Java Data Object to Relation Database’s O/R Mapping.It has some significance of theory and praxis in Database middleware。
Key Words:Java Data Object;Abstract Java Data 0bject;Persistence 。
Ⅱ. 独创性说明 作者郑重声明:本硕士学位
论文是我个人在导师指导下进行的研究工作及取得研究成果。
尽我所知,除了文中特别加以标注和致谢的地方外,
论文中不包含其他人已经发表或撰写的研究成果,也不包含为获得大连理工大学或其他单位的学位或证书所使用过的材料。
与我一同工作的同志对本研究所做的贡献均已在
论文中做了明确的说明并表示了谢意。
作者签名:速:垦2 1璺 日期: 大连理上大学硕士学位
论文 引 言 在企业级市场上,大部分的应用建立在数据库基础上,数据是企业的,扛命。
传统开发语言,包括面向过程的c、面向对象的c++、变种Pascal的Delphi,面向数据的PowerBuilder等等,先后在数据库开发的舞台上展现风姿。
自从Java发明以来,在短短的几年之问,迅速占领了从桌面应用(J2SE)到服务器(J2EE),再到小型设备嵌入式系统(J2M巨)的应用开发市场,其语言吸取了SmallTalk的一切皆对象的理念,撄脱rc抖的历史累赘,简洁、自由的风格赢得了很多开发者的喜爱〔1〕。
随着JDBC的出现,Java也迅速渗入数据库丌发的市场,尤其是面向企业服务器的应用开发。
作为接近真实客观11j±界的开发概念,面向对象使程序
代码更易读、设计更合理。
在普遍存在的数据库应用领域中,开发人员对面向对象的追求从未停止过。
因此,很多的数据库厂商也在进行着数据对象化(面向对象数据库)的研究。
然而,由于对象与关系之间的差异.将面向对象的表示转换成关系表示一直就很麻烦、易}搦着且会降低应用程序性能。
我们可以这样来看,在一个真正的OOAD中,我们的设计首先是做UMI。
建模,最终将一个系统涉及到的所有对象用类图来体现一个完整的设计,我们最后可能得到这几种类:控制业务逻辑的类,保存业务数据的类module(bean类),辅助类或者更多 (具体问题具体分析,但是将业务所需数据归结为一个类module更适合分层)。
到数据库低层实现的时候,为了获取数据或者存储数据.你/{:得不为此加上一个操作数据库的控制逻辑,到此,你完美的设计估计会为此付出巨大的努力,因为你看到的业务数据层是一个复杂钓模块,即使从面向对象观点来看,我们UML类图中的业务数据层只是~个数据模块。
这时可能会有人说,为什么不尝试一F EJB呢?EJB作为Sun J2EE体系的核心部分,是Sun所力推的企业级开发的首选,而EJB entity目前仍然是Sun J2EE自皮书所最为推荐的java持久化技术。
Entity Bean作为EJB规范的一部分【2〕,也是EJB规范里面最备受争议的一种技术,它伴随着EJB规范走过r风风雨雨几个春秋。
可是对于易用性来说,实在不敢恭维,写一个最简单的bean,也非得home接口,远程接口,在2.0以后还要加入的本地接口,更不用提让人难以忍受的速度了,这么林林总总~一大堆,足阱让使用者望而却步了。
在尝试了复杂的SQL,繁复的JDBC.DAO模式,复杂昂贵的EJB后,JDO(JavaDataObjectl的出现为Java的数据库应用开发带来一个全新的视角。
基于Java技术的数据对象的研究与实现 JDO定义O/RMapphlg机制,Sun公司制定的JDO也是框架,提供Java对象“透明”持久性管理,另外扩展的JDO还提供对象关系管理。
框架定义和实现类似与JDBC机制,给出JDO功能定义,但没有实现,所以必须通过抽象方法创建实现对象。
JDO对粗粒度和细粒度对象都适合。
JDO解决了对象序列化太简单,JDBC太凌乱,CMP太沉重的问题,提供轻量级的数据对象方式访问数据库。
JDO不会抛出RuntimeException,它只抛出JDOException,它再向下分为JDOCanRetryExcedption和JDOFatalException。
现在JDO成为业界的统一标准还是有难度,所以各具体的JDO产品兼容性不好。
本文的选题背景是在实际工程项目《大连理工大学档案管理系统》的设计与实施中逐渐形成,由于JDO产品不是
开源项目以及Hibernate使用的复杂性,不适合于项目的具体实拖,因此在实际的应用中,作者自行设计了针对于关系型数据库的一套具体方案fAJDO)并应用于项目中,但是随着对JDO、Hibernate的认识的逐步加深,使作者认谚{到对该方案的进一步研究具有必要性和可行性。
本文的主要工作有以下几个方面: (1)在相关的JDO产品对数据对象的研究基础上,对数据对象做出了进一步的抽象。
也就是将实际存在的Java数据对象抽象出来,成为一个DataObject,这个数据对象具有所有数据对象相同的基本属性。
(2)去掉了现有的JDO产品对JO的Enhancer,也就是说在现有的3730产品中对于每一个将要成为持久化数据对象的java对象都必须被增强,而且该过程不能动态进行;而本程序不需要经过这一步。
(3)充分利用了关系型数据库与JDBC现有的优势,从很大程度上避免更为复杂的关系映射。
九针对于查询,并没有像现有产品一样设计出一套专门的查询语言。
(5)在对数据源的配置过程中,引用了Oracle表空间的概念,使其支持分布式事务处理。
全文共分为四章。
第一章是JDO的理论研究现状,主要介绍了现有JDO产品要实现的目标及其体系结构:第二章是基于Java技术的数据对象的分析,主要阐述了对AJDO的分析;第三章是AJDO,第四章是与现有相关JDO产品的比较,主要描述了现有产品的优劣以及AJDO的优劣。
.2- 大连理工大学硕士学位
论文1 JD0的理论研究现况1.1 jD0规范的目标 定义对象级的持久化〔3〕。
(1)完全支持对象模型,包括引用、集合、接F1、继承; (2)完全透明持久化:这使得业务对象完全独立.于任何数据库技术,这使用了…1、字节码增强机制(abyte.codeenhancementmechanism); f3)缩短开发周期(不再需要映射); (4)·在丌发小组中清晰地划分业务人员和数据库人员; (5)通用持久性JDBC限于RDBMS,YOO潜在地可以处理任何类型的数据源,包括RDBMS,ODBMS,TP监控处N(a’enninal Processor),ASCII无格式文件,xml文件,properties文件,大机上的Cobol数据库等,JDO是面向大型信息系统的一个完伞的解决方案,在这样的系统中,信息存储于多种异质数据源; f61涵盖J2EE、J2SE、J2ME的广泛实现; f7)强壮的事务模型; f8)同时支持C/S和多层体系结构。
1.2 JD0的体系结构 f1、Persisten’tCapable:拥有持久实例的类必须实现这个接口。
管理对象生命周期。
f2、PersistenceManager:代表了到数据源的连接。
一个应用可以打开一个或多个PersistenceManagers。
(3)PersistenceManagerFactory:允许从数据源中得到一个PersistenceManager的实例,这个工厂也可以作为一个连接池。
四Transaction:允许界定事务。
(5)Query:允许明确地声明性地使用3130查询语言从数据源中获取数据。
也可以 通过引用之间的基本的定位,隐含地、透明地从数据源中获取对象。
f6、InstanceCallback:在数据库操作中(比如betbre/afler read,before/after write, 等),定义一些钩子,以做特殊处理(像暂时属性的初始化)。
m JDOException:JDO操作中抛出的例外。
f8)JDO也定义了帮助类,对象标识(由应用或数据源管理)。
.3一 基于Java技术的数据对象的研究与实现 (9)〕DO实现可以支持或不支持兼容的PersistenceManager(当PersistenceManager是兼容时,你可以得到存储于不同数据库的对象引用)。
1.3 JDo对象模型 JDO对象模型基本上是Java的对象模型,包括所有的基本类型,引用,集合和事件接口【3〕。
除了系统定义类(system-defined classes),支持所有的字段类型(包括简单型、可变和不变的对象类型(immutable and mutable object types)、应用程序员定义类、数组、集合、接口)。
支持所有的成员变量修饰符(pfivacc,public,protected,static,transient,abstract,final,synchronized,volatile)。
除了对象状态依赖于不可访问的或远程对象,即继承于java.net.Socketlmpl、本地方法等,所有的应用程序员定义类都可以是PersistentCapable。
1.4JDo环境 JDO主要是为两种特定的结构化空间的使用而开发的,分为两种执行环境: (11非管理性环境 在非管理性环境中,应用程序本身将负责JDO实现的所有交互。
这些交互包括配置PersistenceManagerFactory对象,获得PersistenceManager对象,区分不同事务之间的界限以及对JDO实例的所有永久性操作。
一般睛况下,以这种方式使用JDO的应用程序都会配置一个连接工厂类,在应用程序开始启动时从连接工厂类获得一个指向某个PersistenceManager对象的引用,并且在应用程序关闭之前一直保持该引用。
但是,对于那些严重依赖多线程的应用程序而言,他们可能需要永久性管理器工厂类的线程池特性。
在这样的环境下,应用程序将从连接工厂类中获得一个永久性管理器对象,然后使用该永久性管理器对象,并在使用完该永久性管理器对象之后通过调用永久性管理器的closeO方法立即将该永久性管理器对象放置到线程池中。
(2)管理性环境 在管理性环境下,JDO与一个J2EE应用程序服务器集成在一起。
但运行在,J2EE应用服务器中的应用程序部件仍然采用通常的方法调用PersistenceManager对象。
但是,与非管理性环境的不同之处在于,在管理性环境中,应用程序的部件将从应用程序服务器的Java名字和目录接ISl(Java Naming and Directory Imefface,JNDI)的运行环境中获得PersistenceManagerFactory对象的引用。
在管理性环境下,所有事务管理都是在JDO和应用程序服务器之间的相互协调下进行的。
.4,. 大连理1=大学硕士学位
论文1.5 JDO对象生命周期 为了能够在数据源中访问、存储对象,应用必须首先得到一个或几个数据源的连接。
一个JDO PersistenceManager对象就代表了这样一个连接。
它可以通过PersistenceManagerFactory类得到。
持久化对象必须是实现了PersistentCapable接口的类的实例。
这样的类可能同时拥有持久化的或临时的(transient)实例。
为了使个实例持久化,编程者必须调用PersistentManager的makePersistent方法。
通知YDO对象为持久化或临时的很重要,即使它们可以从JDO的行为巾得到它是临时的,比如事务管理和对象标识。
对象标识可以由应用管理,或者由数据源代理(这大多是在使用ODBMS实例时,因为概念ObjectID本身就是ODMG模型的。
部分)。
JDO支持一种持久化模型,在这种模型中持久性自动传播到引用的对象。
这种机制经常称为“延伸持久 (persistence by reachability)”或者“传递持久(transitive persistence)”。
这意味着一L上个已经持久化的对象引用了一个临时对象,这个临时对象自动变成持久化的。
对rJDBC编程者,这个模型可能很哿匿但是他们会发现这是大多数情况下.编程者希望从持久化框架中得到的支持。
对象或者通过明确的JDO查询结果从内存中得到,或者通过标准的Java刈‘象之间的导航(navigation)得到。
最后这个机制很强大,你可以把持久对象想象为在JVM堆中的一个特殊的部分,我们称之为“客户端缓存(client cache)”。
每次当你企图从一个对象导航到另一个时,如果这个对象尚不在内存中,JDO会自动从数据源中获取,并把它放在缓存中。
例如:假设aPmvider对象已经装载到内存,但是它的Address列象还没有。
Address对象会自动装载。
缓存管理自动链接到事务边界(transactionboundaries),这意味着缓存将在事务结束时刷新,所有的实体都表示为无效的。
下次对象访问它们的状态时,自动地,透明地从数据源中再次装载。
1.6JDO事务管理 所谓事务就是一组必须作为一个单元处理的操作,典型『青况下是对永久陛数据的一组修改操作—这组操作必须要么全部完成,要么不执行这组操作中的任何一步工作。
为了作为事务来处理,构成这样的一个事务的一组操作必须表现出以下特性:原子性(AtomiO、一致一EJ!(Consistent)、隔离’〔生(Isolated)、持久性(Durable)。
JDO支持两种特定的事务策略。
“悲观”(Pessimistic)事务策略,“乐观”(Opeimistic)事务策略〔3】。
“悲观”(Pessimistic)事务策略是JDO技术规范必须支持的一个特性,因此所有满足JDO技术规范的实现必须为这个特性提供支持。
该策略是JDO提供的默认事务策略。
.5. 基于Java技术的数据对象的研究与实现当事务的生命周期非常短暂时采用这种事务策略。
一股隋况下造成事务的生命周期非常短暂的原因是在事务的开始和结束过程中,不需要应用程序员和应用程序之问的交互或是这个过程中没有发生大量的数据操作行为。
当应用程序在一个悲观事务中对数据进行读取和修改操作时,直到第一个事务结束之前,应用程序是不允许别的事务所涉及到的数据进行访问。
通常情况下,JDO的悲观事务策略都是通过应用程序所采用的底层数据存储方式的本地悲观事务策略实现的。
“乐观”(Opeimistic)事务策略是JDO技术规范规定的~个可选特性。
当应用程序需要使用生命周期比较长的事务时,通常情况下,在事务发生过程中所造成的对数据存储空间上的数据的物理锁定是不可接受的。
乐观事务策略正是在这样一种情况下,作为。
~种提高事务并发性(降低对数据的物理锁定)的方法而发展起来的。
实现乐观事务策略的基础是一套乐观事务的并发性假设。
乐观事务策略假设,在一个乐观事务中被修改的任何数据,在该事务结束之前都不会被其他任何事务实际修改。
因为在很多情况’F,这个假设的正确性达到了99%,甚至更高,所以应用程序没有必要在这种情况下对数据进行物理锁定。
应用程序需要做的睢一一件事情就是,在我们对数据所作的修改被实际写入到数据存储空间之前,验证这个假设是否确实是成立的。
1.75D0查询语言 JDOQ5的基本思想是围绕一个所谓的候选实例集合展开的,查询过滤器标准将用于这个候选实例集合〔3】。
查询语句的执行结果是一个不可改变的集合对象,这个集合对象中的实例是那些位于候选实例集合中的与特定过滤器标准相匹配的实例组成的。
查询语句可以包含参数化的值。
此外,查询语句还可以定义和使用本地参考变量,在奄询执行期间,应用程序将会为这些本地参考变量赋值,不仅如此,应用程序还可以通过这些本地化的查询参考变量将查询过滤器标准作用于与该查询相关的所有实例。
查询语句由如下一些必要的元素组成: f1)候选类:候选类实例集合中包含的所有实例都是候选类的实例。
执行该查询语句之后,返回的不可改变的集合对象将只包含作为候选类的实例,而不会包含其他类的实例。
∽候选实例集合:这个集合可能是一个真正意义上的Collection集合对象,这个对象包含了零个或多个对象实例,所有这些对象都必须是候选类的实例。
.6.. 大连理工大学硕士学位
论文 (3)查询过滤器:这个元素被表示为一个类似于Java的boolean数据类型的表达式。
查询执行完成之后,返回的结果将只包括那些使得该表达式的结果为-hue的候选实例。
(4)参数声明:参数声明是由一系列的标志符名称和数据类型对组成的。
(5)参数值:参数值是在该查询语句执行过程中由应用程序提供的,参数值必须和查询语句中声明的参数标志符邦定在一起。
(6)变量声明:变量声明是由一个或多个由标志符名称和数掘类型对组成的。
一般情况下,变量被用于保存查询语句对其他对象的引用,这些引用允许查询过滤器遍历与该奄询语句相关的所有实例。
f7)输入声明:输入声明的目的是用于非标准的类名称,在查询语句中,这些非标准的类名称将被用作参数或变量的类型定义。
f8)一条排序规范:这条排序规范允许应用程序对查询返回的结果集进行任意方式的排序。
.7一 基于Java技术的数据对象的研究与实现2基于Java技术的数据对象的分析 在一个企业级的应用项目中,不论是~个设计者还是~个程序员都需要选择存储业务数据的方式。
目前,他可以选择的存储方式大致有四种:关系型数据库管理系统、操作系统的文件系统、对象数据库管理系统、实体对象bean(Entity Bean)〔4〕。
所以在以关系型数据库的存储方式为主的情况下,进行数据库设计是必可不少的。
在软件技术高速发展的今天,面向对象技术已经占据了主导地位,那么解决对象利关系之间的差异也势在必行。
2.1数据对象分析2.1.1数据对象与表 在使用面向对象的设计方法中一个表可以被映射成一个数据对象f4—73,表中的字段可以被定义为这个数据对象的属性,那么这些数据对象是不是存在某些共性?可以这么说关系型数据库是由二维表组成,表是出行、列组成,表名是唯一标识〔3,8】。
现在将无数张表映射为无数个数据对象,而将这些数据对象抽象为一个数据对象DataObject,那么这个数据对象就具有所有数据对象的基本属性,也可以说具有表的基本属性:列Columns、行Rows。
在JDO中一个POJO(plate old java object or plain ordinaryjava object Or whatever)很像JavaBean〔31,属性通过setter和getter方法访问。
在AJDO中这个数掘对象仍然与JavaBean十分相像,它虽然也是通过setter和getter方法访问,但是由于它已经被抽象出来,所以访问的方式会有所变化。
由于它已经被抽象出来,从而更像一个模型,当你将一个具体的对象放入后它就具有该对象的属性。
这个数据对象从意义上等同于JDO中的域对象模型【3】,不同之处在于它是被抽象出来的,在这个对象中可以存放多个实体同时它也可以被多次实例化,所以说DataObject具有更高的灵活性。
2.1.2数据对象的持久化描述 当OataObject成为多个数据对象的抽象后,那些实际存在的数据对象也应该被描述出来,因为它们是实体,它们需要被持久化。
对这些实体的描述有很多种方式,在JDO和Hibernate中都以)①正为主进行描述〔3,5,9】,并且从发展趋势来看使用xml文档格式进行描述是最好的选择。
当然也不能排除文本方式或者二进制等方式的描述。
所以,对 .8一 大连理工大学硕士学位
论文数据对象的描述方式应该尽可能的满足更多的需求。
在本文中采用了xrnl文档『lo.1 7〕格式进行描述,当然在具体的设计中应该考虑到其它方式,并做出合理的设置。
2.1.3数据对象的运行状态 当对一个数据对象进行了持久化的描述后,该数据对象相对于DataObject来说就是一个实体。
在进行操作时,也就是说将~个实体(一个实体对应数据库中一张实际存在的表)放入到抽象的数据对象(DataObject)中后,那么它本身就应该具有某种状念来表示它当前的形态;同时考虑到并发处理,它的状态应改具有全局可见性。
在JDO的JDOHelper类中〔3】,提供了对一个数掘对象状态的判断方.