首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

软件资讯设计 工具 系统 开发 安全 办公 陶吧 IT教育 Windows 7 | 下载中心天极下载中心诚征下载通路合作伙伴
天极网 > 软件频道>JDO技术分析及企业应用研究

JDO技术分析及企业应用研究

2005-11-01 09:21作者:蒋涛出处:Java研究组织责任编辑:方舟


  JDO高级应用

  ·复杂对象的持久化

  在实际的应用中,一个可持久化类要远比Book类复杂很多。它可能会引用其它的Java类型、类、集合或数组,及可能复杂的继承关系。

  当这些对象的状态发生变化时,JDO是如何感知及跟踪状态变化?

  JDO提供了相应的API及规范来实现该功能。

  ·基本类型及引用

  可持久化类的字段能被JDO实现进行持久化的原则。

  原始类型、java.util.Date等被支持(其它较为复杂或可选特性,详见JDO规范);

  如果引用是一个可持久类,则JDO进行持久化处理;

  通过元数据(如jdo文件)声明的字段,一般是非可持久化类的引用,JDO进行持久化;

  前面两种情形,当状态发生变化时,JDO会自动感知,但如果引用是非可持久化类,则需要代码进行显式通知,否则JDO不会将变化进行存储。如下例:

public class Book {
 ……
 private Object picture;
 public void setPicture(Object pic){
  picture = pic;
 }
 public Object getPicture(){
  Return picture;
 }
}

  该类字段picture需要持久化,但java.lang.Object不是一个可持久类,故声明如下:

<?xml version=“1.0” encoding = “UTF-8”?>
<!DOCTYPE jdo SYSTEM “jdo.dtd”>
<jdo>
<package name = “business.model”>
<class name = “Book” >
<field name=“picture” persistence-modifier=“persistent”/>
</class>
</package>
</jdo>

  如果其它模块通过getPicture获得对象,并在JDO不可感知的外部,修改对象,则变化不会存储,较好的办法是修改setPicture方法,如下:

public void setPicture(Object pic){
 JDOHelper.makeDirty(this, “picture”);
 picture = pic;
}

  并通过setPicture方法来更新数据。

  JDO的“makeDirty”方法,主要负责通知JDO实现,可持久化类Book某个实例(this)的“picture”字段发生了变化。

  ·集合

  可持久类的字段引用为集合时,按照JDO规范,强制支持java.util.HashSet,对HashMap、HashTable、TreeMap、TreeSet、LinkedList、ArrayList及Vector的支持对JDO实现而言是可选的,通过PersistenceManagerFactory的supportedOptions方法获得实现特性。

  ·数组

  如果可持久类的引用是数组类型,当数组单元发生变化时,需要调用“makeDirty”来通知JDO实现,该实例的数组引用内容发生了变化。

  与引用是非可持久类实例不同,不需要进行JDO的元数据声明。

  ·继承

  如果使用可持久性,一般继承的子类与父类都为可持久类,以减少系统复杂性,这时需要在子类的元数据中指出其可持久超类,如下:

<class name=“TechBook” persistence-capable-superclass=“Book”/>

  可为非持久类扩展持久类,或可为持久类扩展非可持久类;这两种情形JDO实现都将忽略非可持久类的字段部分,而不保存到数据库。

  JDO的一些不足之处

  JDO对数据的持久化技术相比于成熟的SQL,还有不足之处,这些不足在某些情况下将可能会影响数据处理部分的设计实现。

  以下列举了常用数据访问的必要功能

  ·查询增强

  如字符串不支持通配符、大小写比较;

  不支持聚合操作,无法实现MIN、MAX、SUM和AVG;

  不支持投影操作,JDO查询返回为对象,而不像SQL那样返回字段;

  不支持联合、交叉(UNION/INTERSECT);

  不支持JOIN、IN和EXISTS;

  企业应用探究

  由于JDO采用面向对象的持久化处理技术,从而为解决企业业务系统的持久化问题提供了一个新技术解决方案。但是先进的未必就最适用。在某些应用场景下,需要结合各种因素,采取灵活的策略。

  ·面向对象与面向记录

  现在大多业务系统都采用面向对象分析设计,这就需要每个应用系统都自行实现将对象映射成记录,并存储到数据库中,而有JDO这样的面向对象的持久化技术,在某种程度上解放了这种转化设计的不规范性,进而获得相对更优的系统结构;另一方面,一个业务系统的数据持久化,一般都有这样的过程:对象层->记录层->物理层,JDO无疑使分析设计人员从记录层的苦海中解脱出来,从而更加专注于对象层,这对开发人员无疑是一个令人欢欣鼓舞的技术。

  ·JDO并不能完全代替JDBC。

  根据经典的“8-2原理”,如果用JDO来解决80%的问题,余下的20%由JDBC来实现,这种相互补充,各取所长的策略,是一个很有效的办法。

  这样一方面可以获得较好的结构及提升开发质量,另一方面解决了JDO的某些技术不足,并可根据以后的技术变化,再做适当转化。

  ·性能问题

  JDO与JDBC究竟谁的性能更优,目前还没有一个权威、且令人满意的答案。但对于一些JDO实现而言,通过采用缓存机制,使得性能有了较大提高。

  ·跨数据库

  使用JDO的系统能更好地进行数据库移植,甚至可以在对象数据库上运行;当然JDBC处理层如果完全遵循SQL-92标准,也同样具有很好的跨数据库能力。 热卖推荐: 手机 诺基亚 MP5 电脑包 双卡双待 手机链 U盘 笔记本电脑

关注此文的读者还看过:

返回软件频道首页

共4页。 上一页1234

软件频道最新更新

热点推荐

IT嘉年华

编辑推荐

天极下载_测试站(测试专用)

热门
推荐

网友关注

软件
资料
游戏

装机推荐

文章排行

本周
本月
最新更新
天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络