EJB 3.0是Hibernate的克隆吗?

转载 2006年06月15日 22:09:00
  实践证明,Hibernate是针对于Java语言所创建的最优秀的持久化存储引擎之一。至今,我还清晰地记得第一次使用Hibernate工作的情景。当时,我们已经有了一种现成的持久化存储引擎,但是这个引擎将消耗大量的系统资源并且从未真正正确工作过。令人惊奇的是,Hibernate"瞬间"解决了我们的持久化存储问题!这真是一个"天赐之物"。不觉间,时间快速推进到今天。EJB 3.0又浮出水面,并且不久我们就要计划把我们当前的EJB 2.x服务器向这个更高版本升级了。然而,仔细地分析一下EJB 3.0中所作的持久性存储变化,有人可能会感到惊讶-这不是来自于Hibernate的一个"克隆"品吗?难道Sun当真"偷窃"了来自于Hibernate的设计吗?我的回答是,情况要比这些复杂得多。

  一、 EJB 3.0

  EJB 3.0必须实现的重要目标之一是,要使之成为更为有用和更易于使用的开发工具。Sun公司的Linda DeMichiel认识到,为了成功实现这一目标,EJB 3.0必须要基于开发人员今天正在使用的现有库;否则,它将会导致一种困难的升级操作并且可能会引不起足够的重视。因此,来自于Oracle,JBoss,Apache,BEA,Novell,Google的成员和其它方面的专家都被邀请参与制订这一规范。这个小组的目标是,生产一种规范-能够使得EJB更易于开发并且还要创建一种便于开发人员能够容易地实现升级的持久性存储标准。

  当这个小组开始开发EJB 3.0规范时,他们很快认识到,其中很多特征应该在功能上与所有的主要的供应商和库保持一致。我们将在下面的几节中讨论这些特征。

  (一) EntityManager

  这个EntityManager负责处理一个事务。在JDO中,它被称作持久性存储管理器,而在Hibernate中称它为一个会话。在GlassFish工程中,EntityManager被作如下描述:

  其实,一个EntityManager实例与一个持久性存储上下文相关联。一个持久性存储上下文是一组实体实例,其中的任何一个持久性实体都是唯一的一个实体实例。在该持久性存储上下文中,实体实例及其生命周期都是可被管理的。这个接口定义了用于与持久性存储上下文进行交互的方法。EntityManager API用于创建和删除持久性实体实例-通过其主键查找实体和查询实体。

  这个可由一个给定的EntityManager实例管理的实体集合是通过一个持久性存储单元进行定义的。一个持久性存储单元定义了所有类的集合,这些类是相联系的或由应用程序加以分组,并且它们必须共存于它们到单个数据库的映射中。

  (二) 命名查询

  一个命名查询是一个预定义的查询,它被赋予一个名字,这样它可以在以后通过该名字加以存取。用数据库术语来说,命名查询被称作存储过程。当结合本机查询时(见下一节),数据库查询应该是非常轻松的。

  (三) 本机查询

  不是使用具有很多限制性的实体查询语言,本机查询允许直接从EJB中全面地使用SQL语言。现在,我们有可能直接在数据库上调用count(),max()和其它功能而不必付出其它周折。

  (四) 回调监听器

  回调监听器,是一种事件监听器,或用数据库术语来说是,是一种触发器。它们支持当一个事件发生时进行代码调用。

  (五) 脱离/重新依附对象

  能够脱离开一个EntityManager的控制范围而又能够重新返回而被持续化存储,这在EJB 3.0版本之前是无法实现的。在以前,为了实现这一目的,必须把来自于一个对象的值必须被复制到一个POJO(普通Java对象)中,然后被再往回复制。

  在EJB 3.0之前,我总是使用值-对象并且把来自于EJB的值复制到一个POJO中;然后,使用在前端使用该对象。如果该POJO中的一个值被改变,它将不得不被"推回"到该EJB;然后,该值被复制回来。这种"混乱"状态现在已经不复存在了。一个对象甚至能够完全离开JVM并且在以后某个时期返回回来并且被重新依附。这种改变所带来的效率是不能被低估的。

  (六) O/R映射类型

  能够把一个EJB中的字段直接映射到一个数据库中的列上是EJB 3.0以前也是很难实现的。这一功能实现一直不那么令人满意,并且很多第三方开发工具都一再推迟对这种功能的支持。我最喜欢的xDoclet的一个特征是,它能够定义在我的EJB中每一个持久性字段对应哪种SQL类型。借助于EJB 3.0和注解技术,我们不再需要使用一种第三方工具。

  二、 EJB 3.0对象

  值得注意的是,企业Java Bean现在被称为POJO。随着注解技术的出现,java bean不再需要接口、home和描述符支持文件。仅仅这个特征就为EJB 3.0赢得了大批开发团队的青睐。

  现在,既然企业对象不再被锁定到应用程序服务器内,那么我们不再需要把它们复制进和复制出POJO,这样就允许不必把应用程序服务器后端和前端区别得那么严格,从而使开发人员能够更容易地显示和编辑存储于EJB中的数据。我们很快就会看到这些变化对xDoclet所产生的有趣影响。

  三、 结论

  尽管毫无疑问,EJB 3.0基于Hibernate,但是,事实上它是基于所有的顶级的对象/关系映射工具。看来,这个工具并非这些工具简单"修改"版,而事实上是由Sun创造的又一部杰出的"电影"。不必让开发人员学习一种"全新的但还是功能相同的工具",开发人员只需要轻松地花一些时间就可以升级到新版的EJB 3.0中,因为EJB 3.0正是基于他们已经了解和喜欢的工具创建的

EJB 3.0是Hibernate的克隆吗?

 EJB 3.0是Hibernate的克隆吗?   实践证明,Hibernate是针对于Java语言所创建的最优秀的持久化存储引擎之一。至今,我还清晰地记得第一次使用Hibernate工作的情景。当时...
  • jadebird20080808
  • jadebird20080808
  • 2007年05月17日 06:29
  • 328

EJB 3.0是Hibernate的克隆吗?

Sun的EJB 3.0规范正处于其最后的"冲刺"阶段,许多公司都在为遵循这一规范而忙碌着。这个EJB规范最新版本所提供的众多优点中比较突出的当属其数据库功能,但是一些开发人员感到,这个规范仅仅是Hib...
  • alex197963
  • alex197963
  • 2007年05月18日 08:17
  • 625

EJB 3.0与Hibernate的区别

 EJB 3.0与Hibernate的区别 收藏  摘要 Sun的EJB 3.0规范正处于其最后的"冲刺"阶段,许多公司都在为遵循这一规范而忙碌着。这个EJB规范最新版本所提供的众多优点中比较突出的当...
  • jlnmaster
  • jlnmaster
  • 2010年04月07日 10:49
  • 2516

一个WebService+Ejb 3.0的简单实现

一个WebService+Ejb 3.0的简单实现     WebService这个术语相信近两年来大家都不陌生,关于它的含义以及影响我在此就不作描述,本篇文章只是配合EJB 3.0 实现一个webS...
  • yaohua_1999
  • yaohua_1999
  • 2007年01月16日 11:39
  • 1055

EJB3.0,JPA,Hibernate之间的关系

EJB3.0,JPA,Hibernate之间的关系
  • lichenju33
  • lichenju33
  • 2017年02月09日 12:35
  • 260

基于ejb3,对JDBC进行封装,让使用JDBC时能像hibernate使用annotation注解一样简便,而且更加轻巧

为了方便阅读,必须对Java的泛型和反射有一定的了解,以及hibernate的annotation注解使用有一定的了解,因为这个封装就是对hibernate的部分功能的模仿,虽然性能不像hiberna...
  • MEdwardM
  • MEdwardM
  • 2017年05月04日 10:34
  • 708

关于EJB,为什么用EJB?为什么不用EJB?

EJB
  • linxi1209163com
  • linxi1209163com
  • 2016年03月31日 20:37
  • 4010

itoo项目实战之itoo中为什么要用EJB3.0分布式框架

一说到EJB,总是有一种感觉就是EJB已经过时了,或者是在项目中,EJB太笨重了,使用过程中很多的功能都没有体现出来,而且EJB还会影响性能,但是在ITOO中为什么还要用EJB分布式框架呢? ITOO...
  • tang_huan_11
  • tang_huan_11
  • 2015年08月21日 21:03
  • 1778

EJB为啥不能用RPC

分布式计算系统要求运行在不同地址空间不同主机上的对象互相调用。各种分布式系统都有自己的调用协议,如CORBA的IIOP(Internet InterORB Protocol), MTS的DCOM。那么...
  • zhgao_george
  • zhgao_george
  • 2014年11月20日 17:32
  • 397

Ejb框架搭建

前几篇博客简单的介绍了EJB,下边我们来说一下我们该如何搭建一个EJB框架。本人搭建框架使用的Myeclipse10+jboss6.0。搭建这个框架只需要你的IDE支持EJB就可以了,但是并不是所有的...
  • zhanghongjie0302
  • zhanghongjie0302
  • 2015年12月09日 20:24
  • 5164
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EJB 3.0是Hibernate的克隆吗?
举报原因:
原因补充:

(最多只允许输入30个字)