开发者在线 Builder.com.cn 更新时间:2008-05-06
今年EJB3.0规范已经正式发布了。Sun非常自信地向业界宣布,这个EJB版本将有效地减轻开发难度,通过使用EJB3.0,可以大大降低开发成本。但也有人批评说,Sun在EJB中加入了很多Java EE 5的新特性,如EJB3.0将使用注释(annotations)来进行配置。这将增加开发人员的学习成本,虽然从表面上是简单了,但实际上并没有明显降低开发难度。还有人批评Sun的EJB3.0的持久层架构抄袭了Hibernate。EJB3.0真的象他们所说的那样是Hibernate的翻版吗?EJB3.0是否能依靠它的新架构和Java EE 5的支持摆脱人们对EJB1.x和EJB2.x的恐惧呢?EJB3.0在未来是否能成为对象持久化的代名词呢?
EJB:刚刚诞生就被打入冷宫
在Java发展史上,曾有过很多重要的时刻。如在上世纪末,也就是在1998年,JSP和EJB的诞生就是一个不同寻常的时刻。JSP在诞生后,就立刻引起了很多开发人员的注意,并很快成为了Web开发的主流。而几乎和它同时诞生的EJB1.0却一直倍受冷落。在EJB1.0诞生后的几年,Sun又推出了EJB2.0规范,不过它的命运也可EJB1.0差不多,还是没有翻身。这其中最大的原因,我想是因为Sun没有兑现它承诺而造成的。
Sun在发布J2EE相关规范和产品时承诺,J2EE将会使开发变得更容易,从而会显著降低开发成本。但在J2EE发布时,满心欢喜的人们却发现,被认为是J2EE中最有价值的组成部分:EJB却是如此的复杂。在编写EJB时需要进行大量的配置,而且还需要实现一大堆的接口。这不但没有降低开发难度,反而成为很多开发人员的恶梦。
在EJB2.x刚出来的几年,国内有很多程序员盲目跟风,但当时,他们中的大多数都只是停留在EJB的“名词”阶段。而当他们开始熟悉并使用EJB时,却发现并不是象他们想得那样美妙。
不知道Sun的EJB设计人员是如何考虑的。本来通过很简单的方法就可以从数据库中得到数据,而EJB却要专门为其修一条一级的高输公路,将本来就不多的数据运了出来,这简直就是多此一举。
在取数据时经过这样的周折,它的效率也大受影响。也许Sun当初根本就没考虑过它的效率。
实体Bean在EJB2.0后就成为EJB最重要的一部分,但是它的概念重来就没清楚过。如Sun建议将业务逻辑代码放到会话Bean中,也就是说,前端应该直接访问会话Bean。而作为对数据直接封装的实体Bean却提供了远程接口,这也就意味着前端也可以直接访问实体Bean。这就与多程序应用结构不太符合。还有就是实体Bean既然是对数据的原始封装,那为什么要提供事务、安全这些业务逻辑层的功能。更不可思议的是实体Bean既然提供了本地接口,那又为什么不通过本地接口,而要通过JNDI查找呢?这些概念上的混淆使得EJB更加难以使用。
近几年非常流行的SOA(Service-Oriented Architecture)模式为企业级应用提供了更好的解决方案。然而SOA中的核心:服务,却和这个自称是企业级的Java Bean的EJB没有什么太大的关系。众所周知,SOA里的服务一般是指Web Services。而实现Web Services的方式很多,如果使用Java实现,一般是使用普通的Java Bean来包装成Web Services。最多也就是使用个无状态的Session Bean。而EJB的其它功能,尤其是强大的实体Bean,却很少使用。这不能不说,EJB已经越来越名不副实。
异军突起:欲取EJB而代之
虽然EJB过于复杂,使用它的开发人员比较少,这并不等于人们对企业级的服务的需求小。相反,随着企业信息化程度越来越高,对方便易用的企业级服务的需要与日俱增。
在EJB规范中,关于实体Bean的描述是最多的。看上去实体Bean的功能十分强大,但实际上并非如此。实体Bean的主要功能是对数据进行包装,从而使数据持久化。但这个EJB中最重要的功能也是最虚弱的。本来很简单的功能Sun却定义了一大堆接口,而且不能通过实体Bean进行SQL级的查询,并且实体Bean必须得依托EJB容器才能使用。这些限制大大降低了实体Bean的使用价值。
虽然实体Bean的难以使用让人望而却步,但对数据持久化的需求没有一天停止过。自从在进入二十一世纪以来,有许多类EJB类似但更容易使用的数据持久化组件开始成为开发人员的新宠。这其中比较流行的有Hibernate、JDO和TopLink。
在这里Hibernate当仁不让地成为了最耀眼的明星。Hibernate不能不说是一个奇迹,它在不到3年的时间里,从一个不起眼的开源软件成为了今天业界瞩目的主流O/R映射框架,它的创始人Gavin King也一夜成名。而EJB在它诞生后的几年时间里,却骂声不断,它们之间形成了强烈的反差。当然,从技术角度来说,Hibernate的技术并不是最先进的,而Gavin King也不是什么绝顶高手。Hibernate之所以能发展得如此快,主要是因为Hibernate的开发难度比较EJB小,而且Hibernate的使用并不依赖于具体的容器,可以将Hibernate使用在B/S或C/S的任何Java环境上。
而今年夏天投票通过的JDO2.0标准从某种程度而言,并不逊色于Hibernate当前的版本,有些功能甚至比Hibernate还要好,例如 JDO支持对类属性的惰性装载,而Hibernate要到3才支持,当前Hibernate仅仅支持类的惰性装载。
TopLink是比较古老的O/R映射框架,自从它被Oracle收购后,对Oracle数据库有了更好的支持。但这种框架并不是开源的,而且售价不菲。
这几种O/R映射框架大有取代EJB之势,而Sun由于已经有了EJB,也不可能再做一个和这些框架类似的东本和它们竞争。因此,Sun要想扭转EJB的颓势,必须要从EJB下手。而EJB1.x和EJB2.x都以失败而告终,那么EJB的下一个版本EJB3.0又会如何呢,Hibernate的创始人Gavin King的加入会使EJB3.0成为继Hibernate的下一个新宠吗?
Sun最后的反击:EJB3.0
EJB经过了长达8年的卧薪尝胆,被Sun称为最简单的EJB3.0框架终于在今天正式推出了。也许是Sun意识到了自己的失误,在自定EJB规范时将以前繁琐的部分基本都已经去掉了。EJB3.0看起来就好象新的框架一样(这一点从它的规范就可以看出,EJB3.0的规范文件比EJB2.0规范文件的尺寸小得多)。
EJB3.0和Java EE 5几乎是同时发布的,因此,EJB3.0中使用了很多Java EE 5的新特性。如EJB3.0在定义Bean时(包括会话Bean和实体Bean),不再使用各种各样的接口,而是使用Java EE 5提供的注释(annotations)进行定义,无论什么样的企业级Bean只是一个加了相应注释的简单的Java对象(POJO)。不仅如此,EJB3.0中已经全面使用注释取代了接口。如定义
Bean的业务接口、O/R映射信息、资源引用信息等都使用注释进行描述。
由于Hibernate的创始人Gavin King加入了EJB小组,负责制定EJB的O/R映射规范。因此,EJB3.0的O/R映射也十分类似Hibernate。这使得熟悉Hibernate的开发人员学习EJB3.0非常容易。这说明EJB3.0正在和Hibernate走向溶合。
同时Hibernate也提供了两套API,一套是Hibernate本身的API,另外一套是和EJB3.0兼容的API。也就是说,只要使用Hibernate第二套API,就很容易将其使用Hibernate的程序移植到EJB3.0上。
虽然EJB3.0刚刚发布,但已经有很多EJB服务器支持EJB3.0了,这其中跟得最紧的是JBoss,其次WebLogic、WebSphere等也随之跟进。因此,各大厂商还是对EJB3.0非常看好的。
自从那些如Struts、Hibernate、Spring等轻量级的框架开始在市面上出现并流行时,很多开发人员开始跟随着这些开源大师的指挥棒的方向前进。EJB已经逐渐从人们的视线中淡出。但随着EJB3.0的问世,又将人们的视线拉了回来。毕竟,EJB出自Sun。如果它也能向Hibernate、JDO一样容易使用,那它是非常有前途的,至少我是这么认为的。现在EJB3.0已经和Hibernate在O/R映射上非常相似了,在未来,EJB3.0也许将成为轻量级框架的一员,让我们拭目以待吧!
分享到:
相关推荐
### EJB2.0与EJB3.0的主要区别 #### 一、简介 企业Java Beans(EJB)是Java平台为企业级应用提供的一种组件模型。随着技术的发展,EJB经历了多个版本的迭代,其中EJB 2.0和EJB 3.0是两个重要的里程碑版本。本文将...
EJB(Enterprise JavaBeans)3.0是Java企业级应用开发的一个重要标准,它定义了如何在Java EE(Java Platform, Enterprise Edition)环境中构建可复用的、组件化的服务器端应用程序。EJB 3.0的发布极大地简化了EJB的...
在这个"ejb3.0开发实例(java工程)"中,我们将深入探讨EJB 3.0的主要特性和开发实践。 1. **注解驱动**:EJB 3.0最大的变革之一就是大量使用注解(Annotation),减少了XML配置文件的使用。例如,@Stateless、@...
### Java之精通EJB3.0 #### 一、EJB3.0简介与改进 企业Java Beans(Enterprise JavaBeans,简称EJB)是Java平台为企业级应用开发提供的一种组件模型。EJB3.0是EJB规范的一个重大版本更新,它在EJB2.0的基础上进行...
《EJB3.0入门经典》是关于EJB 3.0的专业技术教程,从实用的角度出发,理论联系实际,用9章的篇幅详细讲解了EJB 3.0开发的方法和技巧。《EJB3.0入门经典》内容丰富,讲解由浅入深,全面系统,在讲解EJB 3.0最新开发...
《精通EJB3.0》是一本深入探讨企业级JavaBeans(EJB)3.0技术的专业书籍,由Rima Patel、Sriganesh、Gerald Brose和Micah Silverman共同编写,由Wiley Publishing出版。该书为读者提供了全面且深入的EJB3.0知识体系...
在"ejb3.0入门经典教程-source"这个压缩包中,包含了书中各个章节的示例代码,覆盖了EJB 3.0的各个方面,例如实体Bean的创建、会话Bean的使用、事务管理、安全性设置以及JPA的持久化操作等。这些源码对于初学者来说...
"李腾飞EJB3.0 源码 源代码"可能包含的是李腾飞教授或团队关于EJB 3.0技术的实践示例或教学资源。通过分析这些源码,开发者可以深入理解EJB 3.0的实现细节,例如如何使用注解定义Bean、如何处理持久化、如何进行依赖...
首先,我们来看《EJB3.0开发Entity.pdf》。在EJB 3.0中,Entity Bean代表持久化对象,它存储在数据库中并与数据库进行交互。这个部分将介绍如何定义实体bean,包括使用JPA(Java Persistence API)来注解实体类,...
EJB3.0是EJB规范的一个重要版本,它在EJB2.x的基础上进行了大量简化,提高了开发效率,并引入了注解驱动的开发方式,使得EJB更易于理解和使用。 在EJB3.0中,主要包含以下关键知识点: 1. **实体Bean(Entity ...
压缩包中的文件如“ejb-3_0-fr-spec-persistence.pdf”、“ejb-3_0-fr-spec-simplified.pdf”和“ejb-3_0-fr-spec-ejbcore.pdf”可能是EJB 3.0官方规范的文档,分别详细阐述了持久化、简化的规范和核心EJB 3.0的内容...
EJB(Enterprise JavaBeans)3.0规范是Java EE(Enterprise Edition)平台中核心的组件模型,用于构建可扩展、安全且易于管理的企业级应用程序。EJB 3.0是EJB规范的一个重要里程碑,因为它引入了许多重大的改进,...
在"**EJB3.0+JBOSS+MyEclipse初体验(完整代码和过程).txt**"文件中,你将找到一个完整的示例,涵盖了上述所有步骤,包括具体的代码片段和执行过程,这对于初学者来说是一个很好的起点,可以快速理解并实践EJB 3.0在...
罗时飞精通EJB3.0.zip.001 罗时飞精通EJB3.0.zip.002 罗时飞精通EJB3.0.zip.003 《精通EJB3.0》共分为4个部分:第一部分对EJB编程基础进行介绍,概要性地对EJB进行了阐述;第二部分重点关注EJB编程的具体内容和...
**企业级JavaBeans (EJB) 3.0 规范** EJB 3.0是Java Enterprise Edition (Java EE)中的一个关键组件,它定义了如何在服务器端创建可复用、模块化的业务组件。这个规范的主要目标是简化EJB的开发过程,使其更加轻量...
**企业级JavaBeans(EJB)3.0详解** 企业级JavaBeans(Enterprise JavaBeans,简称EJB)是Java平台上用于构建分布式企业级应用的重要组件模型。EJB 3.0是EJB规范的一个重大革新,它极大地简化了EJB的开发过程,引入...
罗时飞精通EJB3.0.zip.001 罗时飞精通EJB3.0.zip.002 罗时飞精通EJB3.0.zip.003 《精通EJB3.0》共分为4个部分:第一部分对EJB编程基础进行介绍,概要性地对EJB进行了阐述;第二部分重点关注EJB编程的具体内容和...
**EJB3.0实例教程**是一份详细指导开发者如何使用Enterprise JavaBeans 3.0(EJB3.0)技术进行企业级应用开发的电子文档。EJB3.0是Java EE(Java Platform, Enterprise Edition)规范的一部分,旨在简化企业级组件的...
EJB3.0规范是Java EE 5中的一个重要组成部分,它对之前的EJB版本进行了重大改进,极大地简化了开发流程,降低了EJB的使用门槛。 EJB3.0规范引入了许多关键特性,使得企业级开发变得更加高效和直观: 1. **注解驱动...
在JBUILDER中配置EJB 3.0: 1. **创建新项目** - 创建一个新的Java EE项目,并选择EJB 3.0作为目标平台。 2. **添加EJB模块** - 在项目中添加EJB模块,选择会话Bean、实体Bean或消息驱动Bean。 3. **编写和注解Bean...