JDO架构介绍

JDO持久化技术应用于Struts框架的模型.pdf JDO持久化技术应用于Struts框架的模型.pdf........... 立即下载

JDO架构简介

注:作者保留对文章的一切权利,但欢迎转载,转载时请注明出处和作者信息:mail:wafd@hotmail.com

为什么要用JDO

Java开发人员已经有好几种存取数据库的方法:序列化,JDBC,面向对象映射工具,面向对象数据库,以及实体EJB。那为什么还要介绍其他的存储架构呢?答案是,上面每一种实现存储的方案都存在一定的限制。JDO正在尝试解决这些限制。

 

序列化: 是Java建立的一种传输机制,它能够把对象的信息转换成一系列的字节码,这些字节码可以被传输到网络或者存储到一个文件中。序列化的使用非常简单,但他还是有限制的。它必须立即存取对象的特征,而且它不适合存取大批量的数据。在更改一个对象的属性时如果有错误发生它无法实现“回滚”,因此不适于应用程序对数据完整性的要求,而且不能实现多个线程或程序异步读写数据。所有这些不足都使得序列化无法满足大多数数据存储要求。

 

JDBC:许多程序员使用 JDBC API来操作关系数据库。JDBC克服了许多序列化中存在的缺点:它可以操作大批量的数据,有确保数据一致性的机制,支持信息的并发存取,可以使用已经非常成熟的SQL语言。不幸的是,JDBC使用起来并不像序列化那么简单。JDBC使用的关系范例无法用于存储对象,因此你不得不放弃在代码中使用面向对象原则存储数据。

 

面向对象映射工具:由软件厂商创建的架构可以为你实现对象和关系数据库之间的映射。 这种对象-关系映射支持使你专注于对象模型的设计而不必关心面向对象和关系数据库之间的匹配。不幸的是每一种对象-关系映射产品都有一套他自己厂商实现的标准。你不得不使自己的代码迁就于某一个单独厂商的实现。假如这个厂商提高产品价格或者停止对bug更改的支持,使你准备放弃它而用其他的厂商实现架构时,你就必须重写你的代码。

 

面向对象的数据库:比对象关系数据库映射更好的选择使使用一些软件厂商开发了一种新的把对象存储到数据库的方法。这种面向对象的数据库使用起来常常比对象关系映射软件简单。ODMG组织成立的目的之一就是创建一种访问对象数据库的标准API。多数厂商都遵崇ODMG组织的要求,因此由于厂商实现不同带来的麻烦也解决了。但是,一些企业对于从关系数据库转向对象数据库显得犹豫不决,因为有大量的数据存储在传统的关系数据库中。虽然一些数据库分析工具可以用于面向对象数据库与关系数据库之间的移植,然而大量的数据存储使用的仍然是关系数据库。

 

实体EJB:Java平台的企业级应用中引入了实体EJB。 实体EJB是一个组件,他描述了数据库中的持久性数据信息。EJB使用类似于对象-关系映射的办法,它提供了一个持久性数据的面向对象的表示。不同于对象关系软件,EJB对于关系数据库没有限制;它描述的持久性信息可以来自一个企业信息系统(EIS)或者其他的存储设备。而且,EJB要求遵循一个严格标准,实现它的厂商必须遵循这个标准。不幸的是,EJB标准在面向对象方面稍微有些欠缺,比如一些高级的特性:继承、多态和复合关系等。另外,EJB的代码编写很复杂,而且它是一个重量级组建需要消耗应用服务器很多的资源来运行。但是,EJB中的会话Bean和消息驱动Bean有很多优势,所以JDO规范详细定义了JDO如何与他们进行集成。

 

JDO:JDO集成了很多上述持久性机制的特性,这使得在JDO中创建一个持久化(persistence)类就像创建一个序列化类一样简单。JDO支持批量数据的存储,数据一致性,并发处理和JDBC的查询功能。就像对象-关系映射软件和对象数据库一样,它允许使用面向对象的高级特性比如“继承”。它避免了像EJB中实体Bean一样必须依赖于来自厂商定义的严格规范。同EJB一样,JDO也不规定任何特定的后端数据库。

但是,这里还是要说一下,世界上没有“万灵丹”。所以,使用JDO并不是对于每一个应用程序都是有好处的。很多应用程序完全可以使用其他更理想的存储机制。

JDO架构

下面我开始对JDO的架构作一个简单的介绍。

下图显示了JDO架构主要的几部分:

JDO架构

JDOHelper :javax.jdo.JDOHelper类拥有一些静态的助手(helper)方法。这个方法可以获得一个持久对象的生命周期还可以用来创建一个与具体实现厂商无关的PersistenceManagerFactory的实例,这里使用了工厂(factory)模式。

PersistenceManagerFactory:javax.jdo.PersistenceManagerFactory类可以通过JDOHelper类的助手方法获得,这是一个标准的工厂类,他可以创建PersistenceManager类。

PersistenceManager:javax.jdo.PersistenceManager接口是应用程序经常要使用的一个主要的JDO接口。每一个PersistenceManager负责控制一组持久化对象而且他还可以创建新的持久化对象或删除现有的持久化对象。Transaction和PersistenceManager之间存在这一对一的关系,同时PersistenceManager又是Extent和Query的工厂类,也就是说这两个对象可以通过PersistenceManager创建。

PersistenceCapable:用户定义的持久化类都必须扩展实现PersistenceCapable接口。大多数JDO实现的供应商都提供一种“增强器”(enhancer)的功能,它可以向你要实现的持久化类中增加PersistenceCapable接口的实现。也就是说,其实你根本不会自己去实现这个接口。

Transaction:每一个PersistemceManager和javax.jdo.Transaction都是一一对应的。Transactions用来处理事务,它使得持久化数据可以成批的一次性添加到数据表中,如果出现异常就将数据回滚。

Extent:java.jdo.Extent是映射数据库中具体表的类的一个逻辑视图。Extent可以拥有自己的子类,它通过PersistenceManager获得。

Query:java.jdo.Query接口用具体的厂商JDO来实现,它负责处理JDO查询语言(JDOQL),这些JDOQL最终被解释为实际的数据库SQL语言。同样这个接口也是通过PersistenceManager获得的。

下面的例子显示的JDO接口如何操作并执行一个查询并更新持久化对象。

 

例子:JDO接口的交互

//通过助手类获得PersistenceManagerFactory

    PersistenceManagerFactory factory=

        JDOHelper.getPersistenceManagerFactory(System.getProperties());

    //通过PersistenceManagerFactory获得PersistenceManager对象

    PersistenceManager pm=factory.getPersistenceManager();

    //创建并开始一个事务

    Transaction tx=pm.currentTransaction();

    tx.begin();

    //查询employee表中每周工作时间大于40小时的研究人员

    Extent ex=pm.getExtent(Employee.class,false);

    //获得一个Query

    Query query=pm.newQuery();

    //设置这个query作用的范围,即查询的是那个表或记录集

    query.setCandidates(ex);

    query.setFilter("division.name == /"Research/" "+ "&& avgHours > 40");

    Collection result=(Collection)query.execute();

    Employee emp;

    for(Iterator itr=result.iterator();itr.hasNext();){

      emp=(Employee)itr.next();

      emp.setSalary(emp.getSalary()*2);

    }

    //提交记录释放资源

    tx.commit();

    pm.close();

factory.close();

 

上面的代码片断包括了JDO几个主要的接口,在此你可以对JDO各个接口的使用方法有一个粗略的印象,以后实际的应用中JDO接口也都是这样使用的。

 

JDO的异常

JDO不会抛出通常的运行时异常,比如NullPointerExceptions、 IllegalArgumentException等它只抛出JDOException异常。JDOExcetion的结构如下图所示,这是一个继承的层次结构,从他们的字面含义就可以看出它们的用途,在这里就不详细说了,要想了解JDO异常的层次结构可以参考它们的JavaDoc。

JDOException

java JdonFramework开源框架 JdonFramework开源框架JdonFramework开源框架JdonFramework开源框架 立即下载

相关推荐

投第一篇SCIE英文期刊(详细步骤)

一个投稿SCIE英文期刊的过程

weixin_48849679的博客 1万+

JDO持久框架——DataNucles

1. JDO框架简介 Java数据对象(Java Data Objects,JDO)是一个应用程序接口(API),它是Java程序员能够间接地访问数据库,也就是说,不需使用直接的结构化查询语言(SQL)语句。JDO是作为Java数据库连接(JDBC)的一个补充来介绍的,而JDBC是一个支持使用SOL语句对流行的数据库程序进行访问的接口。有了 JDO,程序员就可以使用类来定义数据对象,然后支撑程序就...

旗鼓相当的对手的博客 3588

IFIX数据库Datebase当前值问号

IFIX数据库Datebase当前值问号,已解决,亲测有效 在OPC PowerTool有数据的情况下,IFIX数据库Datebase当前值显示???? 问题分析及解决方法 我的IFIX5.8版本,其它版本可参考 打开IFIX工作台:应用程序–任务控制–I/O驱动–OPC Client;查看OPC驱动是否被禁用,点击启动,变成激活状态即可;若点击启动无法激活OPC驱动,需要重新安装OPC驱动,方法如下: 下载I/O Driver文件 下载链接:https://download.youkuaiyun.com/down

Ron_Tso的博客 2759

JDO技术分析及如何进入企业应用的研究

本文引自:http://www.cn-java.com/target/news.php?news_id=3340 出处 Java研究组织 曹振新 JDO(Java Data Object)是JCP中较早开发出来并形成规范的JSR12,该规范对数据的持久化存储进行了一系列规范,并已有众多的商业产品和开源项目是基于该规范。作为一种需要引起重视的技术,研究并探讨其企业应用可行性是十分重要的。 ...

TrampEagle的专栏 298

用友U8其中一个账套提示演示期已到期-修复方法

【事件始末】 一朋友求助,反馈使用的用友U8,很多年了! 突然发现其中账套2021年的一个账套打不开,提示演示期限已到期! 但是其他账套完全正常,可以打开,没有任何问题。 不管是还原老旧备份,还是重装软件问题依旧,无法自己解决。 客户查询报表结算账期,情况比较紧急,于是求助我们。 经过多次反复琢磨和烟酒,终于于晚上23点59分给弄了出来,也总是圆满解决问题了。 【问题分析】 该用户打的是 U82X免狗补丁,估计是该补丁文件设置了 最大有效期,补丁到期了导致的。 也有可能是程序...

u010431289的博客 2万+

从零到英雄:如何用FPGA和AD9288打造你的第一台便携式示波器

本文详细介绍了如何利用FPGA和AD9288 ADC芯片从零开始打造一台高性能便携式示波器。通过硬件架构设计、高速数据采集系统实现及信号处理与显示系统的开发,读者可以掌握400Msps采样率的实现方法,并了解关键器件选型与系统优化技巧。

jjj34的博客 278

JDO快速入门

<br />JDO快速入门Java数据对象(Java Data Objects,JDO)是一个应用程序接口(API),它是Java程序员能够间接地访问数据库,也就是说,不需使用直接的结构化查询语言(SQL)语句。JDO是作为Java数据库连接(JDBC)的一个补充来介绍的,而JDBC是一个支持使用SOL语句对流行的数据库程序进行访问的接口。有了 JDO,程序员就可以使用类来定义数据对象,然后支撑程序就会根据类的定义来管理对给定数据库的实际的数据访问了。  <br /><br />      JDO是以Sun

liuzhigang1237的专栏 1万+

ROS2中间件选型指南:FastDDS与CycloneDDS零拷贝机制对比与实战

在机器人开发中,通信中间件是连接分布式节点的核心纽带,其性能直接影响系统的实时性与可靠性。DDS作为ROS2默认的通信标准,通过发布订阅模型和QoS策略,为高频大带宽场景提供了灵活的数据分发能力。并行计算与高性能传输的需求,推动了零拷贝技术的演进——从传统序列化到共享内存乃至指针传递,旨在减少数据复制开销、降低延迟。在激光雷达点云、相机图像等场景下,中间件的选型尤为关键。FastDDS凭借与ROS2的深度集成和丰富文档成为入门首选,而CycloneDDS在低延迟和资源占用上表现更优,借助iceoryx实现了

weixin_28726391的博客 254

DataNucleus JDO基础入门

开发应用程序通常是一项复杂的任务,涉及许多组件。 开发所有这些组件可能非常耗时。 Java 数据对象 API (JDO) 旨在减少花费的一些时间,提供一个 API 以允许 Java 开发人员将面向对象的数据持久化到任何数据库中,并提供一种使用与开发人员相同的 Java 语法的查询语言。 DataNucleus JDO 提供了此 JDO 标准的实现,允许您(用户)将面向对象的数据持久保存到该标准的 RDBMS 数据存储中,而且还保存到范围广泛的其他数据存储中。 其中包括流行的map存储,例如 Cassandr

从大数据到人工智能的博客 1152

第二十一篇: `man`, `tldr`, `explain` - 授人以渔的“终极指令”

我们已经一起学习了19个(组)关键命令,从nvidia-smi到kubectl。但这只是GPU运维武器库中的一小部分。技术日新月异,新的工具、新的参数会不断涌现。这个系列的真正目的,不仅是教会你使用这19件“兵器”,更是希望你掌握学习任何一件新兵器的方法论。这套方法论就是你的“终极指令”。授人以鱼不如授人以渔。至此,《GPU运维指令集:20个关键命令的战地手册》系列已全部完结。我们从nvidia-smi出发,一路探索了监控、诊断、容器、集群、网络、性能等各个维度的命令,最后用自动化脚本将它们串联,又用。

weixin_42587823的博客 1351

第10章《VTK自定义部件Widget》

是用于交互式操作 3D 场景的组件,例如移动对象、调整尺寸、创建标注等。VTK 提供了一些内置的 Widget,如。,用户可以点击鼠标,在 3D 场景中放置一个点。负责绘制一个点,并控制其颜色、大小等。,可用于 3D 标注、对象拾取等应用!等,但在某些应用中,我们需要。这样,我们就创建了一个。

yumeiguo的博客 523

【软考架构】主流数据持久化技术框架

JDO(Java Data Objects)和JPA(Java Persistence API)都是Java中用于对象持久化的规范,但它们在设计目标、技术背景和应用场景上存在显著区别。(尤其是搭配Spring Data JPA)。仅在需要统一操作异构数据源时考虑JDO。政府、金融领域仍在运行的 JDO 系统(如日本部分银行核心系统)。透明持久化技术的教学实验(JDO 是经典案例)。DataNucleus核心。MongoDB原生驱动。需要操作NoSQL?是否用Spring?需要精细控制SQL?

qq_41413652的博客 1071

如何使用Google Maps API爬取地理数据:详细教程与Python实现

Google Maps API 是一组服务的集合,允许开发者访问地图、地点、路线等地理信息。:将地址转换为地理坐标,或将地理坐标转换为地址。:计算两点之间的行车路线、步行路线等。Places API:获取附近的地点、商店、餐馆等。:计算多个地点之间的距离和时间。在接下来的代码中,我们将结合这些 API,展示如何获取并处理地理数据。本文详细介绍了如何使用 Google Maps API 获取地理数据,涵盖了从地址转经纬度、获取地点详情、计算路线、计算多个地点的距离与时间等多个功能。

2201_76125261的博客 733

JDO 的架构作一个简单的介绍

JDO快速入门 Java数据对象(Java Data Objects,JDO)是一个应用程序接口(API),它是Java程序员能够间接地访问数据库,也就是说,不需使用直接的结构化查询语言(SQL)语句。JDO是作为Java数据库连接(JDBC)的一个补充来介绍的,而JDBC是一个支持使用SOL语句对流行的数据库程序进行访问的接口。有了 JDO,程序员就可以使用类来定义数据对象,然后支

精益求精 1297

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

对JDO的架构作一个简单的介绍

下面我开始对JDO的架构作一个简单的介绍。  下图显示了JDO架构主要的几部分:       JDOHelper :javax.jdo.JDOHelper类拥有一些静态的助手(helper)方法。这个方法可以获得一个持久对象的生命周期还可以用来创建一个与具体实现厂商无关的PersistenceManagerFactory的实例,这里使用了工厂(factory)模式。  PersistenceMan...

mht13895099346的专栏 351

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JDO架构介绍 (转)

JDO架构介绍 (转)[@more@]JDO架构简介 注:作者保留对文章的一切权利,但欢迎转载,转载时请注明出处和作者信息:Mail:wafd@hotmail.com 为什么要用JDOXML:namespace prefix...

ciya3282的博客 127

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

对 JDO 的架构作一个简单的介绍

JDOHelper :javax.jdo.JDOHelper类拥有一些静态的助手(helper)方法。这个方法可以获得一个持久对象的生命周期还可以用来创建一个与具体实现厂商无关的PersistenceManagerFactory的实例,这里使用了工厂(factory)模式。全文阅读:http://www.javah.net/JDBC_JDO/20070525/1929.html

zaowei21的专栏 515

java学习之JDO

  Java数据对象(Java Data Objects,JDO)是一个应用程序接口(API),它是Java程序员能够间接地访问数据库,也就是说,不需使用直接的结构化查询语言(SQL)语句。JDO是作为Java数据库连接(JDBC)的一个补充来介绍的,而JDBC是一个支持使用SOL语句对流行的数据库程序进行访

自由引导码民! 1943

JDO快速入门指南

JDO快速入门 Java数据对象(Java Data Objects,JDO)是一个应用程序接口(API),它是Java程序员能够间接地访问数据库,也就是说,不需使用直接的结构化查询语言(SQL)语句。JDO是作为Java数据库连接(JDBC)的一个补充来介绍的,而JDBC是一个支持使用SOL语句对流行的数据库程序进行访问的接口。有了 JDO,程序员就可以使用类来定义数据对象,然后支撑程序就会根

春哥团队技术博客 1674

(转载)JDO快速入门(原理详解)

JDO快速入门Java数据对象(Java Data Objects,JDO)是一个应用程序接口(API),它是Java程序员能够间接地访问数据库,也就是说,不需使用直接的结构化查询语言(SQL)语句。JDO是作为Java数据库连接(JDBC)的一个补充来介绍的,而JDBC是一个支持使用SOL语句对流行的数据库程序进行访问的接口。有了 JDO,程序员就可以使用类来定义数据对象,然后支撑程序就会根据类...

疯狂的1024 6277

JDO持久 (jdbc ejb)

转自:http://blog.youkuaiyun.com/liuzhigang1237/article/details/6305113 JDO快速入门 Java数据对象(Java Data Objects,JDO)是一个应用程序接口(API),它是Java程序员能够间接地访问数据库,也就是说,不需使用直接的结构化查询语言(SQL)语句。JDO是作为Java数据库连...

234

JDO Tips

Java数据对象(Java Data Objects,JDO)是一个应用程序接口(API),它是Java程序员能够间接地访问数据库,也就是说,不需使用直接的结构化查询语言(SQL)语句。JDO是作为Java数据库连接(JDBC)的一个补充来介绍的,而JDBC是一个支持使用SOL语句对流行的数据库程序进行访问的接口。有了JDO,程序员就可以使用类来定义数据对象,然后支撑程序就会根据类的定义来管理对给

江南才子 1174

选择JDO还是CMP?

选择JDO还是CMP?由孙宾译自http://www.onjava.com/pub/a/onjava/2003/05/21/jdo.html作者:David Jordan 和 Craig Russell著有《Java Data Objects》一书2003年5月21日  作者注:JDO和CMP方式的EJB目前正在同时向前发展,但采取的是不同的路线。JDO的核心思想是在企业应用软件架构的

sun2bin的专栏 2920
上一篇: JDO vs实体Beans:一个善意的忠告
下一篇: Vector还是ArrayList这是个问题
wafd
博客等级 码龄24年 3粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值