在Java世界
Hibernate是最引人关注的一个话题
从Gavin King加入EJB
EG
负责制订EJB
的持久层规范
到Gavin King非正式退出JDO EG
并且充满个人情绪的攻击JDO
规范
到《Hibernate in Action》的发行
再到Hibernate
Alpha的发布
最后再到最近JBoss
PR的发布(使用Hibernate
实现Entity Bean)
可以说这其中的每一步都引起业界的侧目
Hibernate在不到年的时间里从一个不起眼的开源软件发展到今天令业界瞩目的主流O/R Mapping框架Gavin King从一个开源软件的作者成为业界举足轻重的人物这多少有些传奇的色彩毕竟单纯从技术成就而言Hibernate不算是最有成就的Java开源框架软件到目前为止也不是一个完美无缺的软件从个人技术水平而言Gavin King也不算绝顶高手
在当前的Java持久层框架中最流行的O/R Mapping产品分别是HibernateJDO和TopLink
自从去年Gavin King加入JBoss之后Hibernate已经由一个民间的开源软件走上了兼容EJB EntityBean的道路然而更加令人侧目的是Gavin King在EJB EG中充当了一个非常重要的角色只要对比一下EJB的EntityBean和Hibernate真相就会大白虽然API接口不同但是 EntityBean的设计理念完全来自于Hibernate
虽然EJB的EntityBean在相当程度上来源于Hibernate但是毕竟是不同的API接口因此Hibernate和EJB EntityBean究竟是怎样的一种关系是很多人心中的疑问
年四月份JBoss的Ben Wang访华期间我曾经向Ben请教Hibernate的未来发展他回答说Hibernate未来将仍旧以独立的软件产品存在和发展既可以 outside EJB container使用同时Hibernate也将做为JBoss EntityBean Implementation又可以inside EJB container使用然而如何既inside又outside终究缺乏一个感性的认识
月日JBoss发布的 EJB PR揭开了答案从Sourceforge的CVS服务器上面checkout出来源代码看一下我们可以发现Gavin King对Hibernate进行了简单的封装将EJB EntityBean API调用转换为内部Hibernate自己的API从而实现EJB EntityBean的兼容
EJB 不承诺脱离容器调用如果你想享用EJB则必须运行在某个EJB Vendor提供的容器内例如你使用JBoss提供的容器那么你调用的是EntityBean API这些调用请求会被转换为Hibernate API的调用请求这意味着Hibernate实际上提供了两套API一套是Hibernate原生API另一套是兼容EJB EntityBean API对于那些需要分布式调用支持需要EJB容器的开发人员来说他们选择后一套API对于不需要EJB容器的开发人员来说他们选择前一套 API这就是Hibernate既定的发展策略
今年夏天投票通过的JDO标准从某种程度而言并不逊色于 Hibernate当前的版本有些功能甚至比Hibernate还要好例如 JDO支持对类属性的lazy loading而Hibernate要到才支持当前Hibernate仅仅支持类的lazy loading实际上在去年就已经有很多用户不断提出对类属性的lazy loading的需求然而Gavin King当时一直不认为这个需求有添加的必要性再例如被Gavin King形容为可憎的JDOQL实际上是类SQL查询语言和对象条件查询的混合体从功能上来说不如HQL强大但是比Hibernate自己的条件查询强
不知道究竟出于什么原因Gavin King对JDO似乎一直怀有由衷的厌恶月他在Hibernate的blog上面对JDO进行了毫不留情的批判列举了JDO的种种缺点来解释为什么EJB持久层规范没有把JDO考虑进去然而事实上他的批判充满了对JDO的误解和偏见例如Gavin King憎恨JDOQL丝毫没有什么特别的理由只因为JDOQL不是一个纯粹的查询语言而是一个混合体这多少让人对Gavin King的风度感到遗憾在被SolarMetric的Abe White反驳之后同样没有风度的说我可没有时间做这种无谓的争论事实上每个人都认为他自己的技术是最好的……我是错了JDO那伙人也错了每个人都会犯错误……(所以说人无完人!)
JDO规范的出台事实上构成了对Hibernate乃至基于 Hibernate理念的EJB EntityBean的严重威胁JDO规范在功能上的严重缺失导致了JDO无力面对Hibernate和TopLink的竞争然而功能基本完备的JDO挟众多JDO Vendor商业支持的合力同时JDO规范可以避免产品锁定在某个Vendor的优势已经将竞争的天平拉直
[] []