分享
 
 
 

选择JDO还是CMP?

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

选择JDO还是CMP?

孙宾译自http://www.onjava.com/pub/a/onjava/2003/05/21/jdo.html

作者:David JordanCraig Russell

著有《Java Data Objects》一书

2003年5月21日

作者注:JDO和CMP方式的EJB目前正在同时向前发展,但采取的是不同的路线。JDO的核心思想是在企业应用软件架构的不同层面中存储传统的Java对象(Plain Old Java Objects,下称POJOs),而CMP方案则基于容器环境,并针对特殊的需求。

两者之间的异同在规范出台之初便成为众所争论的话题。你可以到JDOCentral.com上看到这类的争论,而在6月中旬即将在旧金山开幕的2003年JavaOne大会上,也会有一些演示和讲解来比较这两种不同的技术。

在这次JavaOne大会上,3368号技术对话将讨论JDO与Struts(一个著名的Web应用架构设计的开源软件)集成的可行性和实践经验;3236号专题研究JDO与EJB容器的结合;1289号专题将对比使用JDO、JDBC和EJB时,设计模式在开发中的应用。

在我们的《Java Data Objects》的第17章有一小段话描述使用JDO和CMP的平衡点。--Craig Russell

JDO还是CMP?

在你对项目开发策略下决定之前,CMP实体Bean和JDO都是值得考虑的方式。

JDO对粗粒度和细粒度的数据对象设计都很适合,具体在一个应用服务器环境中,一般用于SessionBean后面。CMP也是用于SessionBean之后,它的远程调用很少直接用到。

JDO编写的类只须编译一次就可用于分布式架构中的任何一层,并且在集成到Web或应用服务器之前可以以单层或两层的方式先调试好。而CMP只能在发布到一个具体的应用服务器后才能调试。

JDO没有直接定义远程行为,这一点与Servlet、JSP和EJB组件不同。所有的分布处理、事务和安全方面的策略都基于独立存储管理器,该管理器负责处理你的对象模型中所有的类实例。这一点也说明你可以在分布式环境中的任何层面上使用JDO,而其远程行为由容器来实现,而不是JDO厂商。

CMP组件提供了较高的可移植性,Bean类及其描述符都是规范化的。多数的不兼容性只存在于规范所未能尽述的地方,包括如何将类映射到具体的数据库(不限于关系数据库)、类似只读类的可选功能、其它方面的厂商扩展。而JDO产品视具体厂商所支持的可选功能而有所不同。

CMP中,对象之间的关系是受控的,即一端的改变会影响到另一端,并且对应用是可见的。而JDO不支持关系的管理,只是一些厂商以扩展的方式提供类似功能。

继承是对真实对象建模时常用的概念,但CMP并不支持它。CMP在组件的定义和实现时并不一致,在具体实现一个EntityBean接口时,实现的类可以具有继承关系,但在定义这个EntityBean时却不行。类之间的关系也只是在接口之间,而不是在实现类之间,因此这些关系也不存在多态性。举例来说,一个名为MediaItem的CMP Bean类不能直接联系到名为MediaContent的类,因为MediaContent是抽象的,类并无具体实例。要建立这样的联系,你只能将其转换为两个关系:一个是MediaItem与Movie类,一个是ModiaItem与Game类,并且在每个相关方法中,你必须针对两个关系区别对待。

在访问对象属性上,CMP和JDO也天差地别。CMP Bean中,所有的属性和对象关系都是作为抽象的get和set方法定义在描述符中,对实际属性的访问只能由具体的由相关工具生成的实现类去完成。而JDO中,可保存的属性和关系在描述符中声明,并且在代码中也可以直接访问这些属性,包括JDO产品生成的代码在内。JDO增强器会在增强时适当地改造这些代码。

JDOQL和EJBQL都提供了类似的查询数据的方法。两者都可以在程序中查询并访问数据对象,都采取“读-改-写”的策略,都不是完整的数据操纵语言(比如没有数据更新语句),它们都只用于查找数据对象并在代码中访问。

CMP要求所有的访问操作都在事务环境中,非事务方式的访问不受支持。而JDO允许你决定是否采用事务方式。对需要更新数据的地方,JDO要求采用事务,而只是读取的代码中,包括缓冲在内,JDO支持非事务方式的访问。

表17-1是对CMP Bean和JDO可存储类的比较

表17-1 CMP beans与JDO的比较

特性

CMP beans

JDO可存储类

环境方面

应用可移植性

基本可以,很少有负面影响

规范定义的原则下可移植

应用环境

应用服务器

单层、两层、Web服务器、应用服务器

可存储类相对于环境的独立性

低:类必须实现EJB接口,并在EJB容器中执行

高:类不需要实现任何特定接口,可在任何环境中执行

元数据(metadata)

标记可存储类

发布描述符标明所有的可存储类

元数据标明所有可存储类

标记可存储属性

发布描述符标记所有的可存储属性和关系

元数据中默认大部分可存储属性和关系(简洁)

建模

域类的建模对象

CMP bean (抽象的底层数据库)

可存储类

域类间的继承

不支持

完全支持

属性访问

抽象的get/set方法

任何方式的访问,包括直接访问和get/set方法

Collection, Set

支持

支持

List, Array, Map

不支持

可选功能

关系

体现为对CMP本地接口的引用

体现为对JDO可存储类或接口的引用

多态性

不支持

支持

编程

查询语言

类似SQL的EJBQL

基于Java布尔判断的JDOQL

远程方法调用

支持

不支持

生命周期管理对类方法的要求

setEntityContext

unsetEntityContext

ejbActivate

ejbPassivate

ejbLoad

ejbStore

ejbRemove

无参构造器(可以是private的)

可选的回调方法

ejbCreate

ejbPostCreate

ejbFind

jdoPostLoad

jdoPreStore

jdoPreClear

jdoPreDelete

关系数据库映射

厂商相关

厂商相关

方法安全策略

支持

不支持

方法的事务策略

支持

不支持

非事务访问

非标准

支持

需要的类/接口

EJBLocalHome,本地接口(如果支持本地访问)

EJBHome,远程接口(如果支持远程访问)

抽象类必须实现EntityBean

标识类(如果不是原始类型)

可存储类

标识类(只用于自定义标识)

事务同步回调

不支持

支持

David Jordan创立了Object Identity, Inc.,提供Java Data Objects(JDO)的咨询和培训服务。David也是《Java Data Objects》一书的作者之一,另一作者是Craig Russell。

Craig Russell是Sun微系统公司的JDO规范领导者。

O'Reilly及其协会最近(2003年4月)出版了《Java Data Objects》

第一章 概述,可以免费下载

你还可以查看该书的目录索引完整说明

以上两部分的中文版本:CSDN版,或JavaResearch版 (由孙宾翻译)

更多信息或购买该书,请看这里

本文的版权属于笔者本人,但欢迎转载,前提是注明出处和原作者。另外,欢迎在我的专栏中查看我的另几篇文章,并提出宝贵意见!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有