Hibernate在不?q的旉里,从一个不L的开源Y件发展到今天令业界瞩目的LO/R Mapping框架QGavin King从一个开源Y件的作者成Z界D重的人物Q这多少有些传奇的色彩。毕竟,单纯从技术成p言QHibernate不算是最有成qJava开源框架YӞ到目前ؓ止也不是一个完无~的软gQ从个h技术水q言QGavin King也不绝剙手?/P>
在当前的Java持久层框架中Q最行的O/R Mapping产品分别是HibernateQJDO和TopLink?/P>
自从dGavin King加入JBoss之后QHibernate已经׃个民间的开源Y件走上了兼容EJB EntityBean的道路。然而更加oZ目的是,Gavin King在EJB3.0 EG中充当了一个非帔R要的角色Q只要对比一下EJB3.0的EntityBean和Hibernate3Q真相就会大白,虽然API接口不同Q但?EntityBean的设计理念完全来自于Hibernate?/P>
虽然EJB3.0的EntityBean在相当程度上来源于HibernateQ但是毕竟是不同的API接口Q因此Hibernate和EJB3.0 EntityBeanI竟是怎样的一U关p,是很多h心中的疑问?/P>
2004q四月䆾JBoss的Ben Wang访华期间Q我曄向BenhHibernate的未来发展,他回{说QHibernate未来仍旧以独立的Y件品存在和发展Q既可以 outside EJB container使用Q同时Hibernate也将做ؓJBoss EntityBean ImplementationQ又可以inside EJB container使用。然而如何既insideQ又outsideQ终I缺乏一个感性的认识?/P>
10?日JBoss发布的EJB3.0 PR揭开了答案。从Sourceforge的CVS服务器上面checkout出来源代码看一下,我们可以发现QGavin King对Hibernate3q行了简单的装Q将EJB 3.0 EntityBean API调用转换为内部Hibernate3自己的APIQ从而实现EJB3.0 EntityBean的兼宏V?/P>
EJB3.0不承d器调用,如果你想享用EJB3.0Q则必须q行在某个EJB Vendor提供的容器内Q例如你使用JBoss提供的容器,那么你调用的是EntityBean APIQ这些调用请求会被{换ؓHibernate API的调用请求。这意味着Hibernate实际上提供了两套APIQ一套是Hibernate原生APIQ另一套是兼容EJB3.0 EntityBean API。对于那些需要分布式调用支持Q需要EJB容器的开发h员来_他们选择后一套APIQ对于不需要EJB容器的开发h员来_他们选择前一?API。这是Hibernate既定的发展策略?/P>
今年夏天投票通过的JDO2.0标准从某U程度而言Qƈ不逊色于Hibernate当前的版本,有些功能甚至比Hibernateq要好,例如 JDO支持对类属性的lazy loadingQ而Hibernate要到3才支持,当前Hibernate仅仅支持cȝlazy loading。实际上在去q_已l有很多用户不断提出对类属性的lazy loading的需求,然而Gavin King当时一直不认ؓq个需求有d的必要性。再例如被Gavin King形容为“可憎的”JDOQLQ实际上是类SQL查询语言和对象条件查询的混合体。从功能上来_不如HQL强大Q但是比Hibernate自己的条件查询强?/P>
不知道究竟出于什么原因,Gavin King对JDOg一直怀有由L厌恶Q?月,他在Hibernate的blog上面对JDOq行了毫不留情的批判Q列举了JDO的种U缺Ҏ解释Z么EJB3持久层规范没有把JDO考虑q去。然而事实上他的批判充满了对JDO的误解和偏见Q例如Gavin King憎恨JDOQL丝毫没有什么特别的理由Q只因ؓJDOQL不是一个纯_的查询语言Q而是一个合体Q这多少让h对Gavin King的风度感到遗憾。在被SolarMetric的Abe White反驳之后Q同h有风度的_“我可没有时间做q种无谓的争论,事实上每个h都认Z自己的技术是最好的……我是错了,JDO那伙Z错了Q每个h都会犯错误……”。(所以说人无完h阿!Q?/P>
JDO2规范的出C实上构成了对HibernateQ乃臛_于Hibernate理念的EJB3.0 EntityBean的严重威胁。JDO1.0规范在功能上的严重缺失导致了JDO无力面对Hibernate和TopLink的竞争,然而功能基本完备的JDO2挟众多JDO Vendor商业支持的合力,同时JDO规范可以避免产品锁定在某个Vendor的优势,已经竞争的天^拉直?/P>
然而JDO2和EJB3两大商业L标准的分裂,是大部分人,甚至包括厂商所不希望看到的?于是最lEJB3的Lead Linda DeMichiel和JDO2的Lead Craig Russell联名发表公开信,宣布了一个合qEJB3和JDO2持久层规范的计划Q新的持久层规范以JSR-220(EJB3.0)的持久层规范为基Q融合JDO2的部分特性。新的持久层规范进入J2EE1.5之中Q独立于EJB存在Q既可以inside J2EE容器来用,也可以脱J2EE容器Q独立的q行?/P>
q个新的持久层框架可以说完全是一个政ȝ产物。EJB VendorsZ自n利益反对JDOQ得JDO没有办法成ؓJ2EE的一部分Q然而标准的分裂也是大部分h更加不希望看到的Q于是最lJDO成了政治斗争的牺牲品。从表面上来看,JDO和EJB3.0 EntityBean都将被新的持久层框架取代Q似乎JDOq没有吃亏,但实际上JDO2标准已经成熟Q部分JDO领导厂商的品已l蓄始待发,?EJB3.0 EntityBeanq处于Early DraftQ等待品诞生至也是一q之后的事情了;另外值得耐hd的是Q新的持久层框架基于当前EJB3.0 EntityBeanQ再l合JDO2的规范,q且处于EJB3.0 EG的控制之下,再加入一些JDO2 EG的成员。因此可以看出来新的持久层框架无疑还是以EJB3.0 EGZD行制定的?/P>
从长q来看,EJB3和JDO2的政L争对双方都有好处Q长期分裂带来的后果对双方的发展都不利,然而从短期来看QJDO2实是在q场政治斗争中|下阵来。最直接的体现就是,已经有一些JDO的用户对JDO的前景生了动摇和迷茫,不少的JDO爱好者更是直aJDO死?/P>
TopLink是一个老牌的O/R Mapping软g了,自从被Oracle收购之后Q又增加了对Oracle数据库的良好支持Q和对Oracle AS EntityBean的支持。Oracle提供了TopLink的图形设计环境,可以使得设计好的TopLink域模型既可以被单独用在TopLink 中,也可以被用在EJB CMP中。因此看来TopLink也走了一条和Hibernate同样{略的\?/P>
TopLink的问题在于相比Hibernate的开源和免费的优势来_TopLink既不开源,售h又不菲上。本来商业Y件TopLink应该在技术支持和商业宣传{略上拥有够的优势Q然而Oracle公司毕竟是一个以数据库ؓ核心产品的公司,其他的一切品都是ؓ了数据库销售业l而服务的。在Oracle产品U中处于一个从属地位的TopLinkQ由于先天不I只能眼睁睁看着Hibernate的日益壮大而无所作ؓQ因?TopLink更多的被局限在购买了Oracle数据库,q且l定Oracle数据库的用户体中?/P>
J2EE1.5的新持久层规范将毫无悬念的成为未来持久层框架的主APIQ无论是HibernateQJDOQ还是TopLinkl将兼容q个L商业API。在当前的这三种持久层API当中QHibernate无疑是最有前途的。这是因为:
1、新的持久层规范基于EJB3.0 EntityBean规范Q这意味着仍将以Hibernate的设计理念ؓ基础
2、JBoss对EJB3.0规范跟随的步伐非常紧密,在规范制定过E中׃断的发布参考实C品,因此可以对对EJB3.0规范产生比较大的影响力?/P>
lg所qͼ我们有理由对Hibernate的前途抱有强烈的信心?/P>
最后的一个疑问是Q既然J2EE1.5的新持久层框架可以脱J2EE容器q行Q那么大家不全部都去用Hibernate的后一套兼容APIQ而完全放弃Hibernate的原生API了吗Q那么是否意味着Hibernate做ؓ一个独立品的使命dl结呢?
对于q个问题我的看法是:J2EE1.5的持久层规范要综合各个EJB VendorQJDO Vendor的意见,要^衡他们之间的利益得失Q那么这样一个瞻前顾后的规范必然无法覆盖所有应用场合的全面需要,q不像Hibernate的原生API 可以随时Ҏ开发h员的要求增加功能那么灉|。因此我预计Hibernate的原生API以其更加强大的功能仍然会吸引一大批人直接用原生APIQ而不是兼容J2EE规范的API?/P>
总而言之,对于我们当前的持久层开发来_最好的办法莫过于坚定的使用DAO层来隔离持久层和业务层逻辑Q那么不未来持久层风云如何变换Q但凡基于POJO的持久层框架都可以被我们拿来L替换
Java改变了什?/STRONG>
&nbs
Java让互联网动了h
“计机语言的发展历史也是h们不断追求更高的模块化、抽象化和封装化的历双Ӏ近十年期间Q很多编E语aQ从出现到没落经q了一波又一波。像1970q代出现的PascalQ如今用的h已经不多了。”一位资q序员告诉记者,“‘算?数据l构=E序’几乎成Y件开发的惟一准则Q结构化E序设计Ҏ从计机发展角度来看是自然而然的,但今天从抽象的角度来看,q种Ҏ几乎可以说是一个‘时代错误’。实际上QY件开发的主要目的是描述和反映现实世界,l构化程序设计方法ƈ不符合这个思维方式。?BR> 因此Q抽象的q程应该是以现实世界的对象ؓ中心的,于是面向对象的抽象方法就走到了前収ͼ出现了Visual Basic、Delphi、C++以及Java{面向对象的~程语言Q而互联网的勃_则给Java的成长带来了肥沃的土壤?BR> “Java诞生时ƈ没有引v太多人的注意Q它W一ơ让Z觉得惊艳是在一ơ网站演CZQ但当时Z对Javaq抱有很大的争议。”被誉ؓ“Java之父”的SUN公司副总裁、Y仉首席技术官James Gosling回忆起十几年前的情景不无感慨地说Q“但Java的出Cؓ当时的互联网增添了生机,它让那些静态的面动了h。?BR> 而且Q因为Javah“只写一ơ,随处q行”的特点Q从而引起了更多开发者的兴趣?BR>“我们可以不必再做重复性质的劳动了。”中国科学院软g研究所宋靖宇博士说Q“此前,Z能够使程序在不同型号的硬件^Cq行Q开发h员必耗费大量的时间来一遍又一遍的~写代码Q然而Java改变了这L局面,只写一ơ就可以。?BR>׃看到Java在互联网时代的巨大作用,清华大学计算机系教授王克宏从1995q就开始跟tJava的发展?BR> Java语言的优势似乎是与生俱来的,然而,仅有语言是不够的?/P>
免费的Java创造了应用奇迹
“ؓ了提高Y件开发效率,M~程语言都离不开相应的开发工具和E序库。”王克宏说。于是,SUN公司?996q的1?3 日发布了JDK1.0Q其中包括两个部分:q行环境和开发工Pq行环境包括五大部分Q核心API、集成API、用L面API、发布技术和Java虚拟机?BR>随着各种功能的完善与提炼Q各UJava开发工具以及开发环境的丰富QJava不再是一U语a的代名词Q它变成了一U开发^台。h们常常听到的J2EEQ企业版Q、J2MEQ微型版Q、J2SEQ标准版Q就是Java的三大核心^台。利用这三种不同的^収ͼZ可以来做不同行业的应用?BR>SUN公司大中华区总裁余宏徯Q“Javal过十年的发展,已经得到了全球的公认Q可以说Q当今的电子时代是‘Java无处不在’,正是Z它一开始的技术公开性,Java已经变成全球最富有zd的技术社Z一。?BR> 管QJava目前已经风靡全世界,但Java 到底l整个业带来什么,除了JavaE序员外Q似乎没有h能具体感觉到?BR> SUN中国区市场经理马君v比喻_“电灯的发明Q得有了现在庞大的电力产业Q电话的发明Q得有了当今兴旺的电信产业Q而Java的发明,则给软g产业带来了前所未有的改变。?BR>像一切新兴事物一PJava的发展ƈ不那么顺利,其坎坯v步的l历Q可以从SUN首席执行官Scott McNealy在SUN的Java One大会上的一句话得知一二:“七八年前的Java One演说现在听v来真是寒,我们那时实在是太看它了Q我们根本不知道q项技术将会改变什么。”而且Q由于开始就是基于开源的态度Q当时很多h怀疑它是否能赚钱?BR> 然而,今天的Java已经得到q泛应用?BR> 据全球市查分析显C:已经?5争K电子讑֤采用了Java技术,Java卡发行量已经辑ֈ10亿张Q采用Java技术的手机?亿多部,7亿台PC中应用了Java技术,140家电信运营商支持Java 技术,全球有超q?50 万个Java开发h员,JCPQJavaC目Q已l有912家会员企业?/P>
如果没有JavaQSUN会怎样
?997q??日美国旧金山的第二届Java One大会Q到今年的Java十周q盛事,本报目睹了Java 十年的风风雨雨,眼瞅着q个以“咖啡”命名的小~程语言变成了一个^収ͼ一个社团,一个生态系l。Java不仅发展了自己,也同时改变了它的~造者。Java对SUN的改变是间接的、渐q式的,有时候甚至不为外人所道也?BR> 与^台无关的Java旨在与“锁定用L”Windows相抗衡,lh们更多的选择Q但推动Java研发的却是家g公司――硬件公怸微Y抗个什么衡Q也许有Z拿IBM做类比――IBM也大量涉Y件。问题在于,IBM涉软g的结果是把自己变成了一个Y件和服务公司Q而SUN的主业依然是服务器。表面上看,“纯软”的Javaq没有给“偏”的SUN带来直接效益Q反而树了个强大的敌人,q就是ƈ不“Y”的微Y?BR> 同时Q尽SUN对Java的投资巨大,却从没说q它从Java中获得过多少回报。因Z用JavaE序和开发工具包是免费的Q这让那些利用Java做第三方开发的ISV们赚了个钉|盆满Q可是SUN得到了什么?当然QJava作ؓ高~程语言Q它的注册和l护也能lSUN带来一定收入,但这是一个小_有h比喻_“SUN成了Java的管Ӟ而不是主人。?BR> SUN大中华区市场ȝ李永赯日ؓ记者揭开了Java与SUN的秘密:“如果SUN只是一个做服务器的公司Qh们就不会Ҏ们太感兴,但有了JavaQ就大不一样了Qh们会跑过来与我们讨论JavaQh们会_‘哦Q能研发出Javaq么的~程语言的公怸定不同凡响!’况且,服务器的销售从来就不是孤立的,它体Cؓ一个系l,Java在硬仉售中发挥了关键作用。”SUN?nbsp; Java来定位Web服务Q发挥其多^台对话的牚wQ营造Web服务环境?BR> Internet让Java复活QJava则拯救了曄陷入“偏”困境中的SUN?BR> SUN董事镉K克尼里认为:Java带来的益处从Ҏ上讲是间接的。“但是,”他_“想像一下,如果10q前SUN没有做JavaQ今天SUN会在哪里?如果Z不写Java Web服务Q他们会?Net的程序,如果他们?Net的程序,他们׃会ؓSUN的设备写E序。?/P>
.NET不折不扣的对?/STRONG>
q年来,国内一批Y件公叔R采用Java技术开发了一批Y件^台和产品Q这两年Java在国内得Cq速发展。不q,管看v来Java的队伍似乎很强大Q但国内Java人才相对而言q是得可怜?BR> “SUN在新加坡建立了Java高培训中心Q目前新加坡?万名Java 人才Q而新加坡全国只有380万hQ即全国1.3%的是Java人才Q如果按此比例,中国应有1700万名Java人才Q而现在估计仅10?5万h。”王克宏教授在相关的报告中写道,“造成国内Java应用不多的原因是多方面的。?BR> “这两年SUN才开始在中国丑֊各种zdQ而许多媒体对Java的不x也是其中一个原因。”王克宏说?BR> “其实,鉴于Java出来时ȝ人阳春白雪的面孔Q得国内的许多~程者在熟悉了微软的开发^台后Q很难{换过来是其中的一大部分原因。”宋靖宇博士_“你不得不承认微软在开发工具上的h性化以及可视化设计是高超的。?BR> “在讨论 Java 的时候我们很Ҏ?Java 语言?Java q_混ؓ一谈,?NET q_比较的过E中Q也更多的是Javaq_和C#比较Q或者将Java语言?NET q_做比较,在我个h的意识中Q这是不够公正的。”上大学博士刘锬对记者说Q“Java既是一U语aQ也是一U^台。?BR> 说到微Y?NETQ它从提出的开始就是立_^収ͼ相对?Java 提倡的“一ơ编写,到处q行”,.NET则提倡“一个^収ͼ多种语言”,因ؓq_的统一性,因此在各个程序语a的兼Ҏ和混合开发方面做得比Java 好,也因此有些微软的“粉丝”嘲WJava是“一ơ编写,到处调试”?BR> “微软的C#是集合了C以及C++甚至Java的许多优点的l晶Q在Windowsq_上,gC#在运行速度上更胜一{V”刘锬介l说Q“在M一个^CQ我们直接交的是实现Java语言q行的虚拟机Q我们希望Java在虚拟机以及它的开发^台的研发上变得更易用、更人性化。?BR>“有ҎL一件不坏的事情,q个世界不需要‘独孤求败’,商业规则也不允许‘独孤求败’的出现Q因为那样会打破竞争格局的^衡,而Java?NETq两个^台的U争才刚刚开始。较量,有利于整个Y件世界。SUN公司在商业模式的q作上甚臛_以跟微Y学习。”一|友q样说?/FONT>