基本信息
- 原书名:Enterprise JavaBeans 3.0,5th Edition
- 原出版社: O'Reilly Media, Inc.
- 作者: (美)布克(Burke,B.) (美)蒙森-哈斐尔(Monson-Haefel,R.)
- 译者: 莫映 徐昊 胡凯
- 丛书名: 博文视点O'REILLY丛书系列
- 出版社:电子工业出版社
- ISBN:9787121040016
- 上架时间:2007-6-23
- 出版日期:2007 年5月
- 开本:16开
- 页码:732
- 版次:5-1
- 所属分类:计算机 > 软件与程序设计 > JAVA(J#) > EJB
计算机 > 软件与程序设计 > JAVA(J#) > JavaBeans
编辑推荐
步入EJB 3.0殿堂的经典力作
JBoss首席架构师、EJB 3.0专家组成员Bill Burke亲手操刀
七年五版,经典无限延伸……
Java Pro最受读者欢迎大奖
曾获Amazon.com“年度最佳图书”大奖
Java Developer Journal最受欢迎大奖
内容简介
作译者
Richard Monson-Haefel是三本畅销书的获奖作者,著有:《Enterprise JavaBeans》(O’Reilly)和《J2EE Web Services》(Addison-Wesley),并合作撰写了《Java Message Service》(O’Reilly)。他是Enterprise Java领域的世界顶级专家与书籍作者之一。他是OpenEJB的首席架构师,OpenEJB是一个用在苹果机的WebObjects平台上的开源EJB容器。在过去几年里,他还是J2EE、CORBA、Java RMI,以及其他分布式计算项目方面的咨询专家。关于他的更多信息,可以在Richard的网站上获得:http://www.monson-haefel.com.
目录
前言
第一部分 EJB 3.0标准
第1章 引言
服务器端组件
持久化和Entity Beans
异步通信
Web Services
Titan航运:一个假想的业务系统
接下来是什么
第2章 架构概览
Entity Bean
Enterprise Bean组件
使用Enterprise Bean和Entity Bean
Bean容器的规约
总结
第3章 资源管理和基本服务
资源管理
基本服务
后续内容
译者序
EJB 3.0可谓EJB技术有史以来最大的一次变革,它所带来的,不仅是技术上的变革,更是思想上的。它将主旨定位于“化繁为简”:从开发者的角度出发,通过降低复杂度,着力改善系统的架构(援引自规范)。新规范从成功开源项目中汲取养分,给我们带来了很多有益的实践:藉由Persistence API,entity bean可以是任意的普通Java对象,而无需再继承既定的接口;大量利用Java注解,再辅以少量的XML部署描述文件,使部署工作大为轻松,且灵活自如;还有轻量级的对象/关系映射机制,外部资源的依赖注入手段,以及注解的“Configuration By Exception”思想,凡此种种,无不令开发人员获益匪浅。
本书是讲解EJB技术的经典书籍。英文版自1999年问市世起,先后经历了5个版本,期间曾经获得过Java Pro最受读者欢迎大奖,Amazon.com的“2000年最佳图书”大奖,以及Java Developer Journal的最受欢迎大奖。而作为本书的最新一版——《Enterprise JavaBeans 3.0(第5版)》,则全面介绍了EJB 3.0技术的方方面面。
本书的原作者Richard Monson-Haefel是EJB领域的资深专家。2004年7月间,他离开Java社区,作为高级分析师加入了Burton Group。其时,一则贴于TSS上的消息从者甚多,记得还曾有人嗟叹过:“Gads... this sounds like an obit!”,足见其个人影响力以及该书在读者心中的地位。关于这一点,还可从Amazon上读者对该书累计四颗半星的评价得到佐证。
Richard在挂笔之后,将该书写作的接力棒交给了现任JBoss首席架构师Bill Burke。Bill曾为本书的第4版撰写过《JBoss操作手册》,因此接手此书当是驾轻就熟的。事实证明Bill Burke不辱使命,经典得以再次延续。有趣的是,英文第5版几乎是和EJB 3.0规范同时问世的,不知是否是Bill的有意安排?..
很荣幸能有机会将这本经典作品译成中文呈现给诸位。也许是机缘巧合,作为译者之一的我,因为项目应用的需要,曾于2001年有幸拜读过本书的第2版。当时的EJB正值1.1版,作为一项新兴技术,国内在这方面的资源还不多见,实际的项目运用则更是凤毛麟角。本书是引领我步入EJB殿堂的启蒙之作,因而给我留下了深刻的印象。
时光荏苒,转眼间到了2006年夏,当博文视点的编辑联系到我,并告知该书第5版中译本的出版计划时,我的欣喜之情溢于言表。一系列简短而必要的手续过后,样书很快就送到了。当我手捧着厚重的700页浩卷时,恰似故友重逢一般。
翻译的过程异常辛苦。我们投入了无数个深夜与几乎全部的节假日,但即便如此,原定三个月的翻译计划依然拖延了近半年的时间。如果说,2007年初送出最后一份译稿时的感觉是如释重负,那么随着本书出版的日渐临近,作为译者的我们,则感到如芒在背。由于是多人翻译,因此统稿工作尤为繁冗。为了尽量保证翻译质量,在交予编辑进行后期校审之前,每章译文都经过了至少两轮的初校,想必这也是进度拖延的重要原因。作为补充,中文版随附了翻译期间译者所用的中英文术语对照表,其中也涉及了这一译本中,相关翻译习惯的若干说明。希望本书中文版能够得到诸位读者的认可。
这本译作的完成是大家共同努力的结果,这包括了参与本书翻译、审校,以及提供支持和关注的所有人。感谢Bill Burke先生在本书翻译期间为我们答疑解难。感谢刘铁锋,没有他的引荐,我们将与这本经典之作失之交臂。感谢博文视点的周筠老师对我们的信任,能够容忍本书翻译进度的一再拖延。感谢本书的两位责编,方舟与晓菲,前者是多年以前活跃于CSDN论坛的故交,而后者则为本书的后期审校与编加工作付出了辛劳,我们的合作非常愉快。此外,还要感谢三位初校者认真细致的工作,他们是李唯一、张辰雪和王开福。还要感谢曹晓钢老师,为本书撰写推荐序,并在本书翻译期间为我们提供了Wiki在线交流平台。
由于译者水平所限,译文难免有错误之处,欢迎读者批评指正。
莫映
2007年3月于北京...
前言
Author's Note
2000年春,我辞去了在Iona的CORBA开发工作,加入了一个构建电子商务门户的小型创业公司。从CORBA背景转向Enterprise JavaBeans项目,对我来说还有一些不太适应。我记得自己一直在对服务器端为何需要组件模型这一问题困惑不已。很快我了解到,声明性事务,安全,以及持久化元数据在商业应用开发中扮演着至关重要的角色。
2000年末,和那个时候其他的许多创业公司一样,我们遇到了资金问题。我们有了第一位客户,系统即将进入beta阶段。就在这个时候,问题接踵而至,我们的应用服务器供应商收回了demo许可并要求付款。为此,我们不得不马上寻找免费的解决方案,这便是我与开源应用服务器——JBoss的第一次不期而遇。
将应用迁移到JBoss并没有花费太长的时间,但是我发现JBoss 2.0在某些方面还稍显粗糙。就职于Iona期间,在Steve Vinoski的指导下,我在中间件开发方面积累了丰富的经验,因而要定位到代码的关键部分并非难事。我立刻开始着手修复JBoss中的各处bug,并将补丁提交到JBoss的邮件列表。在持续几个月的贡献之后,我收到了一封陌生的电子邮件:
what do you do in real life
你在现实中是做什么的?
这封邮件来自JBoss的创始人,Marc Fleury。说实话,JBoss是我参与的第一个开源项目,收到项目创始人写来的邮件几乎就像是收到了来自上帝的信息。也许我说的有些夸张了。它更像是在电影《黑客帝国》中,收到Morpheus发来的一条经过编码的讯息。我回复Marc说,我正在为一家苦苦支撑的创业公司工作,而我的前一份工作则是在Iona开发中间件。Marc再次回复的邮件中只有一句话:
do you want to take the red pill
你想不想尝红色药丸?
你想不想尝红色药丸?(译注:原文此处为“red pill”,出自电影《黑客帝国》,与blue pill相对,是Neo所服的药丸。服用蓝色药丸会使人依旧存在于虚幻之中,而服用红色药丸则会让人知道整个事实的真相。)
我上了钩,回答是,于是我便开始了掉入兔子洞的奇异之旅(译注:原文此处为“rabbit hole”,也出自《黑客帝国》的台词,不过源出于英国人Lewis Carroll的畅销儿童读物《爱丽丝漫游奇境记》)。我成了CVS的提交者,并且开始着手解决entity bean的同步问题。在那年的晚些时候,我帮助Sacha Labourey完成了JBoss的首个集群实现。往后的事情众所周知,我就不再赘言了。
回到2002年,Richard Monson-Haefel,本书前几个版本的作者,就为该书增加JBoss操作手册一事联系了Marc。Marc对此兴趣不大,因而他向Richard引荐了Sacha Labourey和我,于是我们一起编写了操作手册,该手册与O'Reilly 出版的Enterprise JavaBeans第4版同步发行。Richard于去年挂笔,我想大概是我的工作还算令人满意,所以O’Reilly给了我这样的机会,将这本系列书籍更新至最新的EJB 3.0。
谁应该阅读本书
Who Should Read This Book
本书讲解并演示了EJB 3.0及Java Persistence编程模型的基础知识。虽然EJB令应用开发简化了许多,但它仍旧是一项复杂的技术,需要大量的时间来学习掌握。本书就底层技术、Java类与接口、组件模型,以及EJB运行期行为这些问题所给出的解释,简洁明了而又不失严谨。只是,书中去除了仅出现于旧版规范中的内容。
虽然本书着重于讲解基础知识,但它并不是一本傻瓜式的书籍。EJB是一项极度复杂而又雄心勃勃的企业级技术。使用EJB也许相当简单,但理解并掌握EJB却需要大量的工作。在阅读本书之前,你应该熟练掌握Java语言,并有过一些开发业务解决方案的实际经验。我们不要求你具备分布式对象系统方面的经验,但是你需要具备JDBC方面的经验(或者至少理解其基本概念),这样才能理解本书的示例。如果你对Java语言知之甚少,我向你推荐Learning Java 一书,该书以前被称为Exploring Java(二者均由O'Reilly出版)。如果你对JDBC不太熟悉,我向你推荐Database Programming with JDBC and Java(O'Reilly)。如果你想对分布计算有更为深入的了解,我向你推荐Java Distributed Computing(O'Reilly)。
本书内容是如何组织的
How This Book Is Organized
本书分为两大部分:技术篇,以及紧随其后的JBoss操作手册。技术篇解释了EJB是什么,EJB如何工作,以及何时使用EJB。JBoss操作手册则对如何在JBoss 4.0应用服务器上安装、配置,以及运行前面章节中给出的示例提供了循序渐进的指导。
序言
然而,在以往版本的EJB中,为了使用托管环境,开发者编写的API不得不更多的着力于满足EJB容器的需求,而非企业应用的业务逻辑。这就导致了EJB开发被不必要地复杂化了。例如:
由于要实现各种不同的EJB接口,因而导致了大量的样板代码,这些代码用于实现接口所要求的方法,但对应用系统而言却是多余的。
为了使应用系统与其所在的环境及容器服务融为一体,XML部署描述文件必不可少。而对组件环境的访问又异常繁芜,且不够直观。
受容器托管的持久化使得针对领域对象的建模被不必要地复杂化和重量化了。提供容器托管持久化的初衷是出于易用性的考虑,然而在实践中,它却异常难用,并有诸多局限。
发布EJB 3.0的目的,就是要让EJB重新着力于简化开发者的工作,解决上述所有的问题,以及更多其他的问题。
这一过程中的首要工作很多,其中之一就是要对导致以往版本EJB过于复杂的原因进行评估。这包括:
分析人们对EJB的众多批评;
理解EJB的哪些设计模式实际上是反模式;
找出那些难以使用,对初学者而言不够直观,或者可以被完全弃用的API;
寻找这项技术中对易用性构成阻碍的其他方面。
一份待解决问题的初步清单,加上一项阐明如何开展工作的提案,便构成了JSR 220,亦即JCP规范请求(Java Community Process specification request)的基础。藉此,我发起了EJB 3.0规范的制订工作。从待改进API的最初清单入手,为了设计出更加完善,也更为简单的架构,EJB 3.0的专家组开始了头脑风暴的过程。Bill Burke,JBoss应用服务器的首席架构师(本书的作者)正是这项工作的主要参与者之一。
专家组的工作使EJB得到了极大的简化和改善。与之前的版本相比,所有EJB的关键API都变得更加易于使用了,而且,只对例外情况进行配置(configuration-by-exception)的方式使开发者得以依赖于预期的默认行为。除非解决一些高阶问题,XML部署描述文件已经变得可有可无了。
新近被加入Java SE的Java语言元数据机制,为我们达成上述简化目的提供了帮助。借助元数据注解,EJB 3.0在Java代码中表达组件对容器的依赖关系,这可以免去部署描述文件的编写工作。而且,EJB 3.0为元数据提供了默认取值,如此一来,元数据在通常情况下就可以用得很少。
通过使用元数据注解来指定环境依赖及生命周期回调,EJB3.0也已经能够使bean class不必非得实现EnterpriseBean的接口了。现在,一个bean class可以有选择地指定所需实现的接口,并且可以只实现必要的方法,而不是充斥着不必要的样板代码。..
我们可以在组件查询或注入期间创建指向组件及其实例的引用,通过要求容器具备更为巧妙的注入机制(对应用系统而言是透明的),我们还可以省去以前的EJBHome工厂模式。现在的session bean可以是具备普通业务接口的普通Java类,而不必是重量级的组件。
对开发者而言,EJB的诸多变化极大地简化了开发工作。而且,这些改变对EJB的底层架构并没有造成根本性影响,这使旧有系统向EJB 3.0的迁移成为可能。
对容器托管持久化的简化给我们带来了更大的挑战。与简化session bean和message- driven bean的步骤类似,我们从减少不必要的接口,利用注解提供配置信息等工作开始入手。不过,我们很快就意识到,EJB的持久化需要更为激进的变革。而诸如Hibernate这样的轻量级对象/关系映射技术的成功,为这一变革的方向给予了清晰的指引。
正如本书中所描述的,Java Persistence API利用轻量级的POJO持久层取代了受容器托管的持久化。轻量级持久层为领域对象的建模提供了丰富的支持,其中包括继承和多态;针对EJB QL的众多功能增强丰富了实体查询的能力;而注解或XML描述文件的使用则给出了一个具有移植能力的O/R映射规范。持久化实体现在成了普通Java类的实例(并且是受托管的)。因此,我们可以使用关键字new来创建实体,并将其作为普通的Java对象传入其他应用层。Java Persistence API提供的受托管persistence context在EJB 3.0环境中起到了特别的作用,同时,它还使长期客户端会话(译注:extended client "conversations",即extended persistence context)的建模变得简单。
由于这些工作,EJB 3.0极大地简化了企业应用开发,它所引入的很多特性业已成为Java EE平台的组成部分。不仅如此,我们还对Java Persistence API进行了扩展,使其可以支持在容器外的Java SE环境下使用。