龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

Java数据对象(JDO)的前世今生(7)

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
3.2.1 ODMG,OQL,Java Binding 在面向对象式查询语言的研究过程中,开发人员们逐渐实现了相似的查询语言,然后互想取长补短,最终在ODMG组织(www.odmg.org)的

  3.2.1 ODMG,OQL,Java Binding

  在面向对象式查询语言的研究过程中,开发人员们逐渐实现了相似的查询语言,然后互想取长补短,最终在ODMG组织(www.odmg.org)的统一下,形成了规范化的语言:ODMG OQL,这是一种完全面向对象的数据库查询语言,语法与前面提到的类似,不过考虑了更广泛的情况,语句更加简洁而严谨。

  OQL并不是针对某种语言的,它可以被应用到很多种开发语言中,它不象SQL那样只是纯字符串式的查询语句,因为面向对象查询中还必须提供相关类的信息,所以OQL需要在编程语言中实现一些特定的API。

  目前,ODMG的OQL已经被规范化地应用到SmallTalk、Java、C++这些面向对象的程序设计语言当中,在ODMG的规范中,这几个模块被称作SmallTalk Binding、Java Binding和C++ Binding。

  不过,由于历史原因,ODMG并没有象想象中地那样得到广泛应用,现有的十几个面向对象数据库中,采用ODMG OQL规范的少之又少,目前也只有FastObjeccts、Ozone这些产品采纳了这个规范,而象Versant这样的大厂商还没有采取OQL来查询数据库,而是自己定义了自己的一套API,称作VQL(Versant Query Lanaguage)。

  在JDO之前的O/R Mapping产品中,也有一些产品使用OQL(有时候是其子集),比如Castor、Apache的Jakarta小组开发的OJB等等。

  3.2.2 第三方协议

  软件世界是一个多姿多彩的世界,总有那么一些好事之士不断地冒出新奇的想法。还有一些开发面向对象数据库的组织制定了自己的一套对象式数据库查询语言,自己的规范。

  不过这些规范相对来说,影响力小得多。比起ODMG来,可以说应用范围太小,更不用说与SQL这样广泛应用的标准进行比较了。

  3.2.3 EJBQL

  Sun为了使Java应用在企业级数据库应用中,不遗余力地推广J2EE,在2001年的时候,推出了EJB2.0规范,其中包含了富有特色的面向CMP方式的EntityBean的查询语言:EJBQL,功能类似于ODMG OQL,只不过只能在EJB发布时静态地存在于应用描述符中,不能在程序中动态地使用。这是EJBQL最大的弱点,也许EJB3.0规范会将其动态化,但到了那一天,世界多半已经不是现在的样子了。

  3.2.4 JDO

  JDO中有最近规定的一个对象式查询语言规范,称作JDOQL,比起OQL来,JDOQL将查询语言中的很多元素与Java语言紧密地结合在一起,有的人觉得麻烦,有些人觉得规范,评论各不相同。从笔者个人的角度来看,这样有利于没写过数据库应用、没用过SQL的新手很快地习惯JDOQL,但实际上,有多少人会在没写过SQL,没了解过关系数据库的情况下去用JDO写数据库应用呢?毕竟市场说明了一切。个人认为,JDO中对数据库对象的查询多少显得有些累赘,如果能更简化一点,那将更吸引使用传统SQL的开发人员。

  4 JDO历程与主要产品

  说起JDO,其来由还有一段特殊的背景。Java语言在JDK1.1达到比较实用的目的后,企业级数据库应用也正是软件开发市场中的重要组成部分,Sun看到这一点后,也希望通过Java这个强大的武器在数据库开发市场攻占市场份额。JDK1.2推出后,Sun同时推出了面向企业应用的EJB,对基于java的中间件服务器框架进行了规范化定义,这就是J2EE。不过在JDK1.2时,Java的速度还是不能与传统的C/C++和Delphi这样一些应用开发语言相比。为了防止业界对Java的激情因此而消退,Sun宣布将在JDK中加入强大的虚拟机技术HotSpot,其中包含更先进的垃圾收集算法和更优化的Java字节代码再编译技术(相当于JIT,Java即时编译技术)。HotSpot引起了Java关注者的极大兴趣,但Sun的HotSpot一拖再拖,最后包含在JDK1.3中出来时,性能也没有象预期的那样好,比起C++编译生成的代码来还是有一段距离。

  这个时候,大家开始对Sun心存怀疑,而Sun深知这一点,于是将公众的注意力赶紧转移到EJB上,从EJB1.0到EJB1.1,再到EJB2.0,业界又开始关注J2EE中间件技术上来。很快,开发人同发现用EJB来编写数据库应用还是有很大的难度,虽然在分布式技术上EJB确实有很大的价值。在这个时候,Sun决定推出JDO技术作为轻量级的Java数据库访问规范,而这一点也受到很多传统O/R Mapping市场的欢迎。为了与传统O/R Mapping有所区别,Sun一开始就高姿态地将JDO定位成不只是面向关系数据库的Java规范,而是针对所有的存储技术,包括面向对象数据库和其它类型的存储体系(如文件),就象EJB EntityBean一样,虽然。就笔者的角度,这个做法使第一版的JDO抛弃了很多传统O/R Mapping提供的面向关系数据库的功能,可以算是一个失策。

  4.1 规范提出、JSR

  JDO最早是由Sun召集众多的O/R Mapping开发团队集中起来共同提出的,首先是通过会议确定了JDO需要包括的内容,然后正式提出一个Java规范请求(JSR-12),正式开始了JDO规范的制定。下面是主要的进展里程碑。

  JSR #000012 approved in July 1999

  1999-8组建的专家小组:包括Sun、Apple、BEA、IBM、Oracle、SAP、WebGain等

  2000-5 完成公开评论草案
  2000-6 在JavaOne上引入
  2001-3 最终草案0.93
  2001-5 最终草案0.96公布
  2001-6 在JavaOne上启动
  2001-11 最终草案0.98
  2002-4 1.0版正式公布
  2002-8 1.0.1修正版
  2003-8 2.0规范启动
  …

  4.2 Oracle与JDO

  作为JDO专家组的重要成员,同时作为最大的关系数据库厂商的Oracle地位显然非同一般。在JDO规范中,Oracle也可说是立下汗马功劳,很多API的形成,Oracle都提供了很重要的参考意见,最终的投票Oracle也是毫不犹豫。

  可是,世间的事总是变化莫测的,就在JDO1.0快出台之时,Oracle收购了TopLink,这一点使Oracle的身份变得特殊而复杂。TopLink是一个商业产品,是以商业利益为目标的,而Oracle也是追求利益最大化的典型商家,这一点与JDO的开放精神背道而驰。因此,我们看到后期Oracle对JDO的不积极态度,甚至在前一阵的JavaOne大会上有人从Oracle的角度非正式地攻击JDO。

精彩图集

赞助商链接