本书主要介绍EJB3.0标准,是获奖权威参考书Enterprise JavaBeans的最新第5版。全书内容主要分为两大部分,第一部分是EJB 3.0的标准技术手册,主要介绍EJB概念、EJB工作原理及使用方法;第二部分是JBoss实践指南,详细阐述了JBoss的安装、配置、运行、JBoss Application Server等相关内容。全书实例丰富,讲解细致,深入浅出,适合Java平台开发人员,特别是企业级Java开发人员阅读参考。
序\r\n前言\r\n第一部分 EJB 3.0标准\r\n 第1章 引言\r\n 服务器端组件 \r\n 持久化和Entity Beans\r\n 异步通信\r\n Web Services \r\n Titan航运:一个假想的业务系统\r\n 接下来是什么\r\n 第2章 架构概览\r\n Entity Bean \r\n Enterprise Bean组件 \r\n 使用Enterprise Bean和Entity Bean\r\n Bean容器的规约\r\n 总结\r\n 第3章 资源管理和基本服务\r\n 资源管理\r\n 基本服务\r\n 后续内容 \r\n 第4章 编写你的第一组Bean \r\n 开发Entity Bean \r\n 开发Session Bean\r\n 第5章 持久化服务: EntityManager\r\n 实体即POJO\r\n 托管与非托管实体\r\n 为Persistence Unit打包 \r\n 获取EntityManager\r\n 操作EntityManager \r\n Resource Local事务 \r\n 第6章 映射持久对象\r\n 编程模型\r\n 基本的关系映射\r\n 主键 \r\n 成员属性映射 \r\n 用@SecondaryTable进行多表映射 \r\n @Embedded对象 \r\n 第7章 实体关联 \r\n 七种关联类型\r\n 映射集合型关系\r\n 游离实体和FetchType \r\n 级联 \r\n 第8章 实体继承 \r\n 每个类层次结构一张表\r\n 每个具体类一张表 \r\n 每个子类一张表 \r\n 混合策略 \r\n 非实体基类 \r\n 第9章 实体查询与EJB QL \r\n Query API \r\n EJB QL\r\n 原生查询\r\n 具名查询 \r\n 第10章 Entity回调和监听器 \r\n 第11章 Session Beans \r\n 第12章 Message-Driven Beans \r\n 第13章 定时服务 \r\n 第14章 JNDI ENC与依赖注入 \r\n 第15章 拦截器 \r\n 第16章 事务 \r\n 第17章 安全 \r\n 第18章 EJB 3.0: Web Service标准 \r\n 第19章 EJB 3.0与Web Service \r\n 第20章 Java EE \r\n 第21章 实战EJB设计 \r\n第二部分 Jboss手册\r\n第三部分 附录\r\n附录A JBOSS数据库配置 \r\n索引
过去几年间,J2EE及EJB技术始终被认为是企业应用领域的主力军。EJB从一开始的备受追捧,及至后来的饱受诟病,一直都是人们议论的焦点。而如今,像Spring、Hibernate这样的开源软件大获成功,轻量级思潮与敏捷方法风行于市,在企业应用这一主战场上,曾为人们所熟识的J2EE技术将会何去何从?想必这是多数Java从业者们最为关切的事情。而作为这一焦点的最新成果——EJB 3.0规范,自2003年5月始,历经整整 3 年的酝酿以后,其最终的发布版本终于在2006年5月面世了。
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月于北京
中英文术语对照表
Bill Burke是JBoss公司的首席架构师。除了联合领导JBoss的EJB 3.0及AOP项目外,他还代表JBoss,作为EJB 3.0及Java EE 5规范委员会的专家。Bill是《JBoss操作手册》的作者之一(该手册包含在《Enterprise JavaBeans(第4版)》中),此外,他还在各种出版物与在线杂志上发表过多篇文章。
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.
作者按语
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应用服务器上安装、配置,以及运行前面章节中给出的示例提供了循序渐进的指导。
第1部分:EJB 3.0标准
Part I: The EJB 3.0 Standard
第1部分是Bill Burke在Richard Monson-Haefel所著的本书第4版的基础上改编而成的。Linda DeMichiel,EJB 3.0规范的领导者,为本书撰写了序。Jason T. Greene改编了第18章和第19章。以下是技术篇各章内容的摘要:
第1章,引介
这一章给出了组件事务监视器的定义,并解释了它们如何构成EJB组件模型的底层技术。
第2章,架构概览
这一章定义了EJB组件模型的体系架构,并对enterprise bean三种基本类型之间的区别进行了分析,它们分别是:entity bean,session bean,以及message-driven bean。
第3章,资源管理与基本服务
这一章解释了EJB兼容的服务器如何在运行时管理enterprise bean。
第4章,编写你的第一组Bean
这一章带领你学习了一些简单的enterprise bean与entity bean的开发过程。
第5章,持久化服务:EntityManager
这一章解释了entity bean如何与新的entity manager服务进行交互。
第6章,映射持久对象
这一章定义了由Java Persistence规范所提供的基本关系数据库映射。
第7章,实体关联
这一章对第6章余下的议题做了讲解,拓展了你对持久化和复杂bean-to-bean关联关系的理解。
第8章,实体继承
这一章讨论了entity bean的继承,以及将对象层次结构映射到关系数据库的方法。
第9章,实体查询与EJB QL
这一章提出了Enterprise JavaBeans查询语言(EJB QL),它被用来对entity bean进行查询,并在Java Persistence中对特定的entity bean进行定位。
第10章,实体回调与监听器
这一章涵盖了entity bean的生命周期,并告诉你如何编写能够拦截实体生命周期事件的类。
第11章,Session Bean
这一章告诉你如何开发stateless session bean和stateful session bean。
第12章,Message-Driven bean
这一章告诉你如何开发message-driven bean。
第13章,定时服务
这一章告诉你如何在EJB 3.0中使用定时服务。
第14章,JNDI ENC与依赖注入
这一章解释了JNDI ENC,还有新的注入用注解及其XML等价表示。
第15章,拦截器
这一章讨论了EJB拦截器,并告诉你如何利用它们来扩展EJB容器的行为。
第16章,事务
这一章深入解释了事务知识,并且介绍了由EJB定义的事务模型。
第17章,安全
这一章带领你学习了EJB安全的一些基础知识。
第18章,EJB 3.0:Web Service标准
这一章解释了XML,SOAP,WSLD,以及UDDI web service标准。
第19章,EJB 3.0 与Web Service
这一章讨论了JAX-RPC API是如何在EJB中支持web service的。
第20章,Java EE
这一章提供了Java EE 5的总体视图,并解释了EJB 3.0是如何与这个新平台相适应的。
第21章,实战EJB设计
这一章提供了一些基本的设计策略,这些策略可以简化EJB的开发工作,并让EJB系统更加高效。
第II部分:JBoss操作手册
Part II: The JBoss Workbook
JBoss操作手册为本书示例的执行提供了指导,至少包含一个重要示例的章节在本手册中都有涉及。你可能需要阅读手册的引言部分,以便安装JBoss,并对其进行相应的配置,供示例运行之用。然后,你就可以翻到与当前阅读章节对应的手册部分。例如,如果你正在阅读介绍持久化对象映射的第6章,则可以使用手册的“第6章练习”一章,在JBoss上开发并运行例程。
软件与版本
Software and Versions
本书涵盖了EJB 3.0与Java Persistence 1.0,用到了包括JDBC在内的来自Java SE 5平台的语言特性。由于本书的重点是开发独立于供应商的EJB组件与解决方案,因此我不会讨
论依赖某个供应商的私有扩展和惯用法。你可以使用任何EJB兼容的服务器来运行本书的示例
无封面