【IT168 专稿】面向对象的开发及关系数据库是当今软件开发的主流技术,他们基于不同的理论基础,各有优缺点,因此有效的把他们结合起来对一个系统的成功、优劣十分重要。 O/R Mapping(对象关系映射)就是将他们有效结合起来的先进技术。而在Java这个开放的世界里,O/R Mapping技术是五花八门,种类繁多。谁将成为Java世界里主流的对象关系映射技术?谁将承载Java ORM的市场重任呢?
首先列出英雄榜:
EJB(Enterprise Java Bean,企业级Java Bean)中的CMP(Container Management Persistence,容器管理持久化);
JDO(Java Data Object);
Hibernate。
出身名门的EJB
在走进EJB之前我们先说说大名鼎鼎的CMP吧。从家庭出身来开,CMP可谓系出名门,大家闺秀。其规范处于JCP的管理之下,拥有超豪华的专家组成员:Sun(Java的老祖宗)、IBM、Oracle、Borland、Bea、SAP、JBoss、Apache等等。单从这一点上来看,选它来进行O/R Mapping,技术支持应该无需担心了。当然向IBM, Bea等寻求项目咨询价格当然不菲。CMP是EJB中的一种,也是在O/R Mapping中应用最广泛的一种。从下图我们可以看出整个EJB的组成体系结构以及CMP在EJB中的地位。
EJB分为三种:Session Bean、Entity Bean、Message Driver Bean;其中Entity Bean又分为两种:BMP(Bean Management Persistence,Bean管理持久化)和CMP(Container Management Persistence,容器管理持久化)。BMP和CMP都具有O/R Mapping功能,但是由于BMP设计更为复杂,效率上也不如CMP,一般很少使用。因此EJB中的O/R Mapping主要是指CMP。从提供功能上来看,伴随着EJB的成长,CMP也经历了CMP1.0、CMP2.0和CMP3.0,功能也越来越完善了。包括完善的事务支持、EJBQL查询语言、透明的分布式访问等等。
不过作为一个重量级技术,J2EE的O/R Mapping标准是CMP,而实际应用中受到诟病最多的也是它。CMP的性能不太尽人意,这成为它备受争议的一个焦点。再有就是,它功能虽然强大,可是对于易用性来说,实在不敢恭维,写一个最简单的Bean,也非得Home接口,远程接口,要再加上2.0以后加入的本地接口,这么林林总总一大堆,足以让Java初学者望而却步了。但是这一点在一段时间内竟然也成了EJB功能强大,技术高深的“佐证”。不过CMP过于复杂这个缺陷在CMP最新版本——CMP3.0中得到了很大的改善。