实体CMP-EJB和Hibernate的比较 - 编程入门网
实体CMP-EJB和Hibernate的比较时间:2011-03-23J2EE领域热切的盼来了一种非常流行的开源技术,它就是Hibernate。这个技术被提升到JCP(一种Java规范组织)标准中去了。从J2EE开发者反馈的信息来看,掌握Hibernate知识是所有想在J2EE领域有所作为的人的必修课。 Hibernate是一个对象关系映射的技术。它是一个开源,并且免费的技术,由SourceForge. Net开发。在过去,有许多的类似的对象关系映射技术。TopLink就是这样的一种工具,后来被Oracle所采用。来自SourceForge的Hibernate和Apache的OJB也都是非常知名的对象关系工具,开源并且免费。JDO也要被归为这一类。 Gavin King是Hibernate的负责人,而Craig Russell 和David Jordan是JDO的主要设计者,JDO是由SUN牵头做的。由于一些技术的原因,今天JCP规范中的大多数成分有利于Hibernate,而不是JDO。从表面上它们没有什么区别,语法和一些处理方法看起来大多数相同,但是,Hibernate的语法更简单易学。 非常有趣的是Craig Russell为SUN工作,而Gavin King 为JBoss工作。资料表明JCP是一个非常民主的社区组织,SUN并没有强制规定一些条条款款,保护自己的语言和企业级的用户。 EJB-3是目前最新的版本,很大程度上受到了Hibernate的影响。一些读者将EJB-3 和Hibernate等同起来。Oracle支持EJB-3提议,而它是j2ee领域中重要的数据库公司,那么EJB-3前景就会很好。从J2EE这个名字本身,就能看出它是一种企业级的技术,并且EJB本质上就是针对这些企业级的应用,由于存在提供的内置容器服务,只有Hibernate和EJB联合使用,Hibernate才能凸显其重要性,因此Hibernate转向到EJB是不可避免的。 EJB有三种类型的Bean。一种类型是会话Bean,存在于企业容器中,可以被认为是一种功能Bean,以RMI-IIOP方式调用。 ORM工具有时和会话Bean一起使用。最近主要的问题是过去ORM工具具有所有权的、价格昂贵的问题。但是现在,可靠、开源的ORM工具可以得到,并且Richard Monson Haefel承认使用ORM工具,替代实体bean,是一种非常安全、并且很有开发效率的方法。 另外一个类型实体Bean就没有这么走运了。EJB-1. 1、 EJB-2. 0和随后的EJB-2. 1在关于实体Bean规范方面做了许多的改变。 我们能够说实体bean是一个“Attribute bean”或者''property-bean'',带有setter 和getter方法,以RMI-IIOP方式调用,存在于企业容器中。定义一个Javabean的方式是Java中经常提到的话题。同样的方式也要出现在BDK,、EJB-Entity beans,、Struts、JSF 和现在的Hibernate技术中。所以,如何定义Javabean是非常重要并且很有艺术性的。 第三中类型就是通信和MDB。从企业这两个字就看出这里面应用程序里面涉及了很多的用户和并发事务,RPC形式非常像打电话,容易导致“占线”问题。如果你所呼叫的人正在给别人的打电话,那么这个时候就导致了线路阻塞。但是,通信的样式中,如在email中,至少要保证信息发送出去。很明显RPC是不合适的,被夸大了。有时,我需要即时响应。由于一些原因,即使像XML web服务,如果问题很严重的话,也应该采用同新样式。MDB(消息驱动bean)事实上越来越被接受。 因此,为什么单单实体bean发现不合格,并且规范老在变呢? 实体bean有两种类型。CMP和BMP两种。 CMP指的是容器管理持久化,而BMP指的是Bean管理持久化。理论上说,EJB规范并没有规定你采用何种方法来持久化你的对象。你也可以简单的将对象串行化。数据库可以是对象数据库或者是关系对象数据库,或者是XML的。但是,在实际中,数据库经常是指关系数据库,使用SQL。 在CMP中,编码员只是在存储器中处理对象。创建新对象,修改它们,删除它们,和查询它们,所有都是在存储器中进行的。保存这些对象到关系数据库表格中去的任务由容器自动完成。编码员不需要些任何的与SQL相关的代码。 在BMP中,编码员不得不写SQL语句来持久化对象到关系数据库中。 EJB1. 1版本的CMP适合简单的表格,和其它的表格没有复杂的关系。CMP避免对底层数据库的引用。因此,它是很具有可移植的。CMP除了能将数据库持久化到关系数据库中之外,还能持久化到对象数据库中去。 但是,CMP并不是适合所有的情况。如果数据库是先前遗留的类型的话,如不能使用SQL,数据库公司提供了自己的代码来持久化,并且这些代码在我们的编程中用来持久化数据,这样的情况就不适合了。 但是,真正的问题在于CMP使用了ORM概念,虽然很多的实现迫切需要。它并没有暴露EJB开发商到底实现了多少规范。Weblogic, Oracle, IBM WebSphere, SUN , JBoss都是实现了CMP中他们认为适合的部分。使用CMP是不错的,并不仅仅因为它使得代码可移植,很容易写。如果我们采用CMP,更多的原因是EJB容器能够极大优化性能。因此开发社区希望采用CMP,但是发现CMP不适合复杂的任务。 虽然做了一些改进,但是发现CMP不能成为最终的解决方案。它里面没有继承性。 虽然EJB容器所提供的服务在真正大的企业级的应用程序中是不可或缺的,但是J2EE阵营仍让垂直的划分为两个层,Web层和EJB层。支持Web层的声称EJB的陡峭的学习曲线和容易发生错误的开发环境对于大多数的应用程序是不需要的。他们喜欢有一个对象关系映射工具构建到J2EE规范中。并不是只有在EJB存在ORM任务,甚至在Servlets、JSP也在使用他们,只不过J2EE规范没有对此做规定。ORM工具如OJB, JDO 和 Hibernate不只是能够用在EJB容器,还可以用在web容器和一个独立的容器中。使用这样的工具,J2EE标准就会使得开发任务简单,无论是开发web层的应用程序还是ejb层的应用程序。 在严厉的攻击EJB实体Bean的复杂性和性能时,Rod Johnson预言在今后几年,J2EE将会终止EJB的使用。无论我们同不同意他的观点,我们还是很有价值去看看他对EJB实体Bean的一些批判。他提议将Spring框架作为EJB容器的替代品,并且这个观念影响力正在扩大。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |