然而JDO2和EJB3两大商业主流
标准的 分裂,是大部分人,甚至包括厂商所不希望看到的。 于是最终EJB3的Lead Linda DeMichiel和JDO2的Lead Craig Russell联名发表公开信,宣布了一个合并EJB3和JDO2持久层规范的计划,新的持久层规范将以JSR-220(EJB3.0)的持久层规范为基 础,融合JDO2的部分特性。新的持久层规范将进入
J2EE1.5之中,独立于EJB存在,既可以inside J2EE容器来使用,也可以脱离J2EE容器,独立的运行。
这个新的持久层框架可以说完全是一个政治的产物。EJB Vendors出于自身利益反对JDO,使得JDO没有办法成为J2EE的一部分,然而标准的分裂也是大部分人更加不希望看到的,于是最终JDO成了政治 斗争的牺牲品。从表面上来看,JDO和EJB3.0 EntityBean都将被新的持久层框架取代,似乎JDO并没有吃亏,但实际上JDO2标准已经成熟,部分JDO领导厂商的产品已经蓄始待发,而 EJB3.0 EntityBean还处于Early Draft,等待产品诞生至少也是一年之后的事情了;另外值得耐人寻味的是,新的持久层框架将基于当前EJB3.0 EntityBean,再结合JDO2的规范,并且将处于EJB3.0 EG的控制之下,再加入一些JDO2 EG的成员。因此可以看出来新的持久层框架无疑还是以EJB3.0 EG为主导进行制定的。
从长远来看,EJB3和JDO2 的政治斗争对双方都有好处,长期分裂带来的后果对双方的发展都不利,然而从短期来看,JDO2确实是在这场政治斗争中败下阵来。最直接的体现就是,已经有 一些JDO的用户对JDO的前景产生了动摇和迷茫,不少的JDO爱好者更是直言JDO将死。
TopLink是一个老牌的 O/R Mapping软件了,自从被Oracle收购之后,又增加了对Oracle数据库的良好支持,和对Oracle AS EntityBean的支持。Oracle提供了TopLink的图形设计环境,可以使得设计好的TopLink域模型既可以被单独用在TopLink 中,也可以被用在EJB CMP中。因此看来TopLink也走了一条和Hibernate同样策略的路。 TopLink的问题在于相比Hibernate的开源和免费的优势来说,TopLink既不开源,售价又不菲上。本来商业软件TopLink应该在技术支持和商业宣传策略上拥有足够的优势,然而Oracle公司毕竟是一个以数据库为核心产品的公司,其他的一切产品都是为了数据库销售业绩而服务的。在Oracle产品线中处于一个从属地位的TopLink,由于先天不足,只能眼睁睁看着Hibernate的日益壮大而无所作为,因此 TopLink更多的被局限在购买了Oracle数据库,并且绑定Oracle数据库的用户群体中。 J2EE1.5的新持久层规范将毫无悬念的成为未来持久层框架的主流API,无论是Hibernate,JDO,还是TopLink终将兼容这个主流商业API。在当前的这三种持久层API当中,Hibernate无疑是最有前途的。这是因为:
1、新的持久层规范将基于EJB3.0 EntityBean规范,这意味着仍将以Hibernate的设计理念为基础。
2、JBoss对EJB3.0规范跟随的步伐非常紧密,在规范制定过程中就不断的发布参考实现产品,因此可以对对EJB3.0规范产生比较大的影响力。
综上所述,我们有理由对Hibernate的前途抱有强烈的信心。
最后的一个疑问是,既然J2EE1.5的新持久层框架可以脱离J2EE容器运行,那么大家不全部都去用Hibernate的后一套兼容API,而完全放弃Hibernate的原生API了吗?那么是否意味着Hibernate做为一个独立产品的使命彻底终结呢?
对于这个问题我的看法是:J2EE1.5的持久层规范要综合各个EJB Vendor,JDO Vendor的意见,要平衡他们之间的利益得失,那么这样一个瞻前顾后的规范必然无法覆盖所有应用场合的全面需要,这不像Hibernate的原生API 可以随时根据开发人员的要求增加功能那么灵活。因此我预计Hibernate的原生API以其更加强大的功能仍然会吸引一大批人直接使用原生API,而不是兼容J2EE规范的API。 总而言之,对于我们当前的持久层开发来说,最好的办法莫过于坚定的使用DAO层来隔离持久层和业务层逻辑,那么不管未来持久层风云如何变换,但凡基于POJO的持久层框架都可以被我们拿来任意替换。