在早期,EJB受到CORBA等技术的分布式计算概念的启发,准备为服务器端应用程序增加可伸缩性。EJB和J2EE在网络泡沫中可以说是红极一时。
EJB的最初目的是通过组件和框架优势比提供CORBA更加简单的替代方案。当EJB 2发布时,很明显,EJB作为一种框架,虽然可以简化服务器端开发工作,但是它很复杂。它变成了提供远程处理、事务管理、安全、状态维护、持久化和Web服务等特性的重量型框架。它的每个版本都加入了更多的特性,而且开发工具也日渐成熟,它的发明者始终没能解决复杂性增加的问题。.
由于开发社区对EJB 2的种种局限不再抱幻想,新的开源工具比如Spring和Hibernate出现了。它们的出现,连同微软.NET技术的不断侵蚀和Ruby on Rails等脚本框架的兴起,说明业界对Java复杂性日益不满。是JCP和专家组着手简化Java开发工作的时候了,这就是Java EE 5的主要动机和EJB 3专家组的目的。
作为具有广泛部署基础的技术,EJB 3的改进非常出色。EJB 3成功地融合了创新性技术,使组件开发尽可能简单。这些技术包括Java 5注解、元数据程序设计、依赖注入、类似AspectJ的拦截器以及智能默认。摒弃了基于继承的重量型程序设计模型,转而使用POJO程序设计模型,并且冗长的XML描述文件也离开了开发者的视野。
持久化模型的改变特别巨大。EJB 3放弃了有缺陷的实体Bean模型,转而使用轻量型Java持久化API(Java Persistence API,JPA)。与实体Bean不同,JPA不是基于容器的。它更类似于处理EJB 2 CMP实体Bean的对象关系映射工具,比如Hibernate、Oracle TopLink和JDO。它可以在容器之内和之外使用,目标是成为事实上的Java持久化标准。Java持久化查询语言(JPQL)使对象关系查询标准化,并且支持原生SQL查询。
我们欢迎EJB 3的改变。得到了EJB 3规范的简化Java社区的充分认可。与之竞争的Spring框架也集成了JPA,并且实现了EJB 3的一些特性。
因为EJB是基于POJO的,所以每个Java开发者都可以很容易地成为EJB开发者!我们感到需要一本讲述EJB 3的书,通过全新的方式讲解该技术,而不过多涉及EJB 2的遗留内容。我们三人都有使用EJB 3、ORM和轻量型框架(比如Spring)的丰富经验,力图通过提供实例、最佳实践和性能调优技巧使本书不同于介绍EJB 2和EJB 3的其他书籍。我们没有忽略EJB与其他框架(比如Spring)竞争的情况,当这些框架适用时,我们会毫不犹豫地推荐它们。实际上,我们用了一章的篇幅专门来介绍Spring和EJB 3的互操作性。
我们希望你可以利用本书快速地学会如何在以后的企业应用程序中有效地使用EJB 3。
致谢
编写一本书需要付出很大的努力,并且难以列出在编写本书的过程中为我们提供过帮助的所有人。首先,我们要感谢Manning出版社的每个成员,特别是出版人Marjan Bace和策划编辑Jackie Carter,感谢他们在过去一年中对我们的鼓励和支持。我们还要感谢Manning出版社的在不同阶段为本书付出过努力的其他人员:编辑Lianna Wlasiuk和Betsey Henkels、审稿编辑Karen Tegtmayer和项目编辑MaryPiergies。我们还要诚挚地感谢Oracle公司的King Wang,他为本书进行了技术审稿。感谢Liz Welch进行了文字编辑,以及排版人员Denis Dalinnik将我们的Word文档变成了真正的书!
在本书编写的各个阶段,很多审稿人花了宝贵时间阅读原稿,他们的反馈极大地提高了本书的质量。他们是Glenn Stokol、Deiveehan Nallazhagappan、Peter George、Berndt Hamboeck、Pat Dennis、Vincent Yin、Thomas Scheuchzer、Chuk Munn、TVS Murthy、Norman Richards、Eric Raymond、Rob Abbe、Bas Vodde、Awais Bajwa、Kunal Mittal、Riccardo Audano、Dan Dobrin、King Wang、Alan Mackenzie、Deren Ebdon、Andrus Adamchik、Matt Payne、Vinny Carpenter、Alex Pantaleev和Chris Richardson。最后要感谢Micah Silverman发起这个项目,可惜因为时间原因未能参与后续的工作。
DEBU PANDA
我要感谢我的妻子Renuka,感谢她在我编写本书的16个月里给予我的无尽支持和不断鼓励,容忍我起早贪黑地写书并把周末也搭上。我还要感谢我的孩子Nistha和Nisheet,他们不得不与计算机分享爸爸。
感谢我的岳父母Hari Shankar Mishra和Premsila Mishra,感谢他们照顾孩子们,让我把精力放在写书上。还要感谢我的父母Ganga Narayan和Ratnamani Panda,他们培养了我对写作的兴趣。
非常感谢Oracle公司产品管理主任Mike Lehmann和Oracle应用服务开发部的副总裁Steve G.Harris允许我在繁忙的工作中编写本书,感谢他们一直以来的支持。感谢Oracle公司的Robert Campbell、Jason Haley和整个EJB容器和TopLink开发团队快速地解决了产品问题,使我在EJB 3规范完成之前能够构造代码示例。还要感谢King Wang同意作为本书的技术编辑,并且帮助我们修改代码示例中的错误。
特别感谢我的前任主管Rob Clark鼓励我写博客,使我得到了Java社区的认可。
最后感谢本书的合著者Reza Rahman和Derek Lane在将我的草稿变成书的过程中所付出的辛勤劳动和所做的贡献。..
REZA RAHMAN
感谢我的家人、朋友和同事在我辛苦编写本书的过程中给我提供的帮助。感谢我的导师——Fry通信公司的Jason Hughes、埃森哲公司的Narayan Natarajan和Rob Collier给予的指导和鼓励,是你们过去几年的辛勤工作启发了我参与写作本书。Ray Case对第6章和第7章写作内容上提供的帮助用言语是无法表达的。感谢我的朋友,并且希望你的家庭渡过目前的难关。
特别感谢编辑Betsey Henkels让我们在前期自如地进行试验并且精炼了我们的想法。感谢Debu Panda的领导、谦虚和远见。感谢Derek Lane的真诚和努力。最后还要感谢Manning出版社的Marjan Bace、Jackie Carter和整个集体发现了本书的价值,感谢他们的辛苦工作、追求完美和极富耐心。
.DEREK LANE
感谢Manning团队和Jackie Carter邀请我作为这个项目的成员。还要感谢Debu Panda和Reza Rahman为本书所做的大量工作。
我对本书审稿人的工作充满感激,赞叹不已,他们的名字都一一列在前面。他们中的很多人曾在本书编写的不同阶段多次阅读原稿并且提出了详细的建议和指导。特别感谢Craig Walls从Spring in Action, Second Edition 的写作中抽出宝贵时间,为本书的高级章节提供了所必需的支持。审稿人很难得到应得的荣誉,但是他们从本书读者的利益出发,在编写本书的过程中付出了很多努力。他们是我多本书的审稿人,我非常钦佩他们非凡的努力。
关于本书
EJB 3要把Java服务器端开发改造成你可能想象不到的模式,所以我们也试图使这本关于EJB的书超出你的预期。
大多数服务器端Java类书籍都较为严肃,偏重理论和说教,并且面向高级开发者。百分之九十的EJB 2.x类书籍都是这种模式。虽然我们可以轻松地仿效,并且也不会用滑稽的手段取悦读者,但是我们还是尝试着为本书添加了一些色彩,使它尽可能轻松和务实。本书会尽可能友好、具有对话性且不流于形式。我们尽可能地使用示例介绍章节内容,这些示例贴近你每天要解决的现实问题。在大多数情况下,我们提出要解决的问题,使用EJB 3解决它,然后使用代码辅助讲解技术特性。
不可避免时我们也会讲解理论,但我们没有把读者当成计算机科学的博士。我们尽量避免为了理论而讲解理论,并且尽量使讨论活泼生动。本书的目的是帮助你快速和有效地学习EJB 3,而不是成为一本全面的参考书。我们不会讲解你很可能用不着的特性。相反,我们将深入地讲解EJB 3的大多数有用的特性,讨论各种情况,使你可以作出理智的选择,提醒你注意常见的缺陷,并且告诉你久经实战考验的最佳实践。
你既然选择了这本书,就不太可能是Java的初学者。我们假设你使用Java完成过一些工作,可能以Web开发的形式使用过表现层技术(比如JSF、Struts、JSP或Servlet)。如果你是使用Swing和AWT之类的客户端技术的开发人员,也不必担心,学习EJB不需要具有Web开发的背景。我们假设你熟悉JDBC之类的数据库技术,并且至少熟悉SQL。我们不要求你熟悉以中间件为中心的技术,比如Spring、Hibernate、TopLink、JDO、iBATIS或AspectJ。我们不要求本书的读者非得是EJB 2.x的专家。我们甚至不要求你了解EJB依赖的任何Java EE技术,比如Java命名和目录接口(Java Naming and Directory Interface,JNDI)、Java远程方法调用(Remote Method Invocation,RMI)或Java消息服务(Java Messaging Service,JMS)。实际上,我们不要求你熟悉中间件概念,比如远程处理、池、并发程序设计、安全或分布式事务。本书非常适合对EJB 3感兴趣且有几年Java经验的开发者。出于同样的原因,本书的深度对EJB 2.x或Spring/Hibernate的高手也有帮助。内容按逻辑顺序排列,可以方便地跳过熟悉的内容。
你可能发现本书在一个更重要的方面不同于其他书籍。EJB是服务器端中间件技术,也就是说它不是孤立存在的,必须与其他技术集成从而完成任务。在本书中,我们将讲解EJB 3如何与JSF、JSP、Servlets、Ajax之类的技术和基于Swing的Java SE客户端程序集成。我们还会介绍EJB 3如何与Spring等互补的技术结合。
本书中,EJB 3是一种标准,而不是一种具体的应用程序服务器技术。因此,我们将避免使讨论围绕任何特定的应用服务器实现。相反,本书中的代码示例被设计为可运行在任何EJB 3容器或持久化提供器中。本书的网站www.manning.com/panda将讲解如何获得本书的源代码并且如何在GlassFish和Oracle Application Server 10g中运行它们。在出版社网站上(而不是本书中)维护针对具体应用程序服务器的指令,可以更方便地保持代码最新。
阅读路线图
本书分为五个部分。
第一部分:EJB概述。第1章介绍EJB 3和EJB类型,使你初步了解EJB 3。第2章讲解核心概念,比如元数据注解和依赖注入,并且提供每种EJB类型的代码示例。
第二部分:使用会话bean和MDB构造业务逻辑。第3章深入介绍会话bean的细节和最佳实践;第4章简要介绍消息和JMS,并且详细讲解MDB;第5章讲解高级主题,比如依赖注入、拦截器和计时器;第6章讨论事务和安全。
第三部分:深入介绍EJB 3 Java持久化API。第7章介绍域模型概念和使用JPA实现域模型;第8章讲解使用JPA进行对象—关系映射;第9章深入介绍使用EntityManager API操作实体。
第四部分:讲解如何在企业应用程序中有效地使用EJB 3的指导方针。第11章讨论EJB和实体的封装,介绍了所有的XML描述文件;第12章讲解从其他应用程序层使用EJB 3设计模式和JPA;第13章转入高级主题,比如实体锁定和EJB应用程序的性能调优。
第五部分:EJB 3和其他框架的互操作性和集成。第14章讲解EJB 3与EJB 2的互操作性以及如何将EJB 2应用程序移植到EJB 3;第15章介绍Web服务,并且讨论与EJB 3和JAX WS 2.0相关的Web服务应用程序;第16章讲解如何集成EJB 3和Spring框架,从而构造良好的企业应用程序。
本书有五个附录。附录A介绍JNDI和RMI,附录B概述数据库。附录C和附录D提供注解和XML描述文件的参考。附录E介绍如何安装和配置Java EE RI(GlassFish)以及如何部署代码示例。
源代码下载
除了在GlassFish和Oracle Application Server上安装Java EE 5 Reference Implementation服务器的指导外,出版社的网站上还提供本书中出现的所有源代码。每章的源代码作为独立的zip文件下载,每个文件中说明了如何将代码部署到应用程序服务器并使之运行。你可以从本书的网页下载这些代码:www.manning.com/panda或www.manning.com/EJB3inAction 。
源代码约定
因为本书采用示例驱动的方式,所以非常注重源代码。大部分代码以独立的代码清单形式出现。为整洁美观,所有代码都使用宽度固定的Courier字体。所有内部代码,比如XML元素名称、方法名称、Java类型名称、包名称、变量名称等也采用Courier字体。一些代码使用Courier Bold格式以突出显示重点段落。在一些地方我们简化了代码,使之短小和简单。对于所有代码,简化代码的完整版本包含在可下载的zip文件中。我们鼓励你在阅读每章之前建立好开发环境。开发环境的设置指导也在网站上。
作者在线
购买本书的读者可以免费访问Manning出版社的私有Web论坛,你可以在论坛里对本书发表评论、进行技术咨询以及获得作者和其他读者的帮助。为了访问论坛和订阅论坛内容,在浏览器中输入www.manning.com/panda即可。这个页面告诉你在注册之后如何进入论坛、有哪些帮助和论坛管理规则的信息。
Manning承诺为读者提供一个场所,用于读者与读者、读者与作者之间进行有意义的交流。作者方面不承诺任何程度的参与,作者对“作者在线”的贡献是自愿的(并且没有报酬)。我们建议你尝试询问作者一些有挑战性的问题,以免他们失去兴趣!
只要本书还在销售,就可以从出版社的网站访问“Author Online”论坛和以前讨论的文档。
关于作者
DEBU PANDA是Oracle Application Server开发团队的产品经理主管,他领导着Java EE容器的开发工作。他有15年以上的IT产业工作经验,在若干杂志上发表了大量关于企业级Java技术的文章并且出席过很多会议。他的关于J2EE的博客网址是debupanda.com。
REZA RAHMAN是Tripod技术公司的体系架构设计师。当20世纪90年代中期Java EE出现时,Reza就开始使用它。他开发过出版业、金融业、电信业和制造业的企业系统,使用过Enterprise Java Bean、Spring和Hibernate。
DEREK LANE是Semantra公司的CTO。他有20多年的IT领域从业经验。他是达拉斯/沃斯堡、得克萨斯MicroJava用户组和俄克拉荷马城Java用户组的发起人,并活跃于美国西南部的众多技术组织中。
关于书名
通过结合介绍、概述和指导性示例,实战(In Action)系列丛书被设计为帮助学习和记忆的书籍。按照认知学的研究,人们记住的事情是他们自发地研究所发现的知识。
虽然Manning出版社没有认知学专家,但是我们相信要永久记住学到的知识,就必须经过探索、实践和重述已学到的知识的过程。人们了解和记忆新事物,只有在积极地探索后才能说掌握了它们。人们通过实战来学习,实战指南的核心部分是示例驱动的。我们鼓励读者尝试知识、实践新代码并且探索新概念。
本书的书名还有一个更加现实的原因:我们的读者很忙。他们通过书来完成工作或解决问题。他们需要容易地跳出或跳入,并且能根据自己的需要来学习书籍。读者需要帮助他们进行实战的书籍,本系列丛书就是为这样的读者编写的。
关于封面
本书的封面图片是“穿毛皮的俄罗斯女孩”,出自于一本法国旅行书——《旅行百科》(Encyclopedie des Voyages),作者J. G. St. Saveur,1796年出版。当时,为了乐趣而旅行是个新现象,这样的旅行指南非常流行,为旅游者和看书神游者介绍法国其他地区和国外的居民。
《旅行百科》一书中多样性的插图生动地介绍了200年前世界上的城镇和省市的独特性和个性。当时,相隔十几英里的两个地区的居民的衣着式样差别很大,容易区分。旅行指南展现了那个时期的隔绝与遥不可及。
从那时到现在,衣着式样有了很大变化,而且当时地域上的多样性现在也已经消失了。现在通常难以判断一个人是这个洲的居民还是那个洲的居民。从乐观的角度来看,我们牺牲了文化和视觉多样性,换来了更加丰富多彩的个人生活,或者说换来了更加多变、有趣的知识化、技术化生活。
我们在Manning出版社庆祝独创性、主动性和计算机行业的乐趣,本书的封面使我们从这本旅行指南生动地了解到两个世纪以前各地区生活的丰富多彩。...