站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题《实战POJOs》:开发企业级Java应用程序

《实战POJOs》:开发企业级Java应用程序

摘要: 很多Java企业应用程序开发者已经发现了Java企业版的EJB框架所产生的问题比它解决的问题多。《实战POJOs》这本书列出了这些问题并提出了基于简单Java对象(POJOs)和轻量级框架的解决方法。在本文中,Jeff Friesen对书中的每一章进行了回顾总结。
摘要

很多Java企业应用程序开发者已经发现了Java企业版的EJB框架所产生的问题比它解决的问题多。《实战POJOs》这本书列出了这些问题并提出了基于简单Java对象(POJOs)和轻量级框架的解决方法。在本文中,Jeff Friesen对书中的每一章进行了回顾总结。

Chris Richardson已经开发企业级Java应用很多年了。最初的时候,他基于servlets、JavaServer Pages和EJB开发这些应用程序。Chris发现可以通过使用简单Java对象(POJOs)简化开发过程。尽管使用POJOs使代码没有被部署到服务器时(一个重要的不足)就可以进行测试成为可能,但是servlet和EJB框架缺乏对POJO的支持,使得Chris必须绕很多弯去使用它们。在阅读完一篇文章中描述的这些不足之后,Chris学习用轻量级框架直接调用POJOs。

读者们告诉Chris使用实体beans来管理一个应用程序的映射对象到关系数据表格的持久层框架不会很简单。Chris在很短时间内就能使用两种持久化技术:JDO(Java Data Objects)和Hibernate。现在麻烦的实体beans可以被排除不用,但是还要处理存在疑问的会话beans。就像实体beans一样,会话beans需要被部署到服务器端,这样就减慢了开发速度。Chris阅读完一些关于Spring框架的文章后,发现了一个解决会话beans问题的方法。

Chris发现在轻量级的JDO、Hibernate和Spring框架下与POJOs协同开发企业级Java应用比在Java企业版EJB框架下具有更少的麻烦和缺陷。他决定写一本书分享他的POJO/轻量级框架的知识,并且讲授采用简单而快速的方法来编写企业级Java应用。2006年1月Manning出版社出版的《实战POJOs》重点介绍纯POJO和轻量级框架设计——一个开发企业级Java应用的更好方法。在本文中,我对《实战POJOs》提出了自己的看法。

版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接
作者:cicitgd;cicitgd;cicitgd at hotmail.com
原文:http://www.matrix.org.cn/resource/article/2006-10-31/POJOs_9f83dc32-6876-11db-bdce-bdc029e475a1.html
关键字:Java;POJOs

实战POJOs
《实战POJOs》的目标读者是在Java企业报EJB框架下开发企业级Java应用方面具有丰富经验的开发者和设计师,他们想要通过有效地使用POJOs和轻量级框架提高他们的开发效率。但是,如果你曾经使用其它框架(如C++和非Java技术)开发企业级应用,那么你可能需要去理解这本书中的很多内容(并非全部)。

《实战POJOs》分成四部分,共有13章。第一部分的2章概述了POJOs和轻量级框架。第二部分的5章阐述了结合使用POJOs和轻量级框架来有效地设计应用程序。在第三部分的3章中,提供了设计业务层和数据接入层的其他方法。最后部分的3章涉及了在开发企业级Java应用时经常遇到的数据库相关的一些重要问题。

POJOs和轻量级框架概述
第1章重点讨论了EJB的幻灭/觉醒。这一章在简短地介绍了EJB的历史后,描述了一个典型的EJB 2.0应用程序结构,着重探讨了EJB存在的问题,深入研究了过程设计(和为什么Java EE提倡这样的实践)的缺陷和EJB开发的困难,并且探究了EJB 3.0如何试图去克服这些问题。

这一章还重点讨论了基于POJO的程序开发。你从中可以学到面向对象设计中强调的POJO,使用POJOs的益处,结合Hibernate和JDO持久化POJOs,清除数据传输对象(DTO),使用Spring使POJOs具有事务处理能力,结合Spring配置应用程序,以及部署一个POJO应用到不一定完全成熟的应用服务器端。我很赞赏作者的基于POJOs、Spring和Hibernate的转帐服务例子。

第二章强调了创建企业应用程序的5种设计决策。这些决策帮助你在轻量级POJO方法、重量级EJB 2.0方法(在下一章中,你会发现这对于一定类型的企业应用是必须的)和EJB 3.0使用的POJO/重量级结合方法中做出选择。本章还向你展示了一个片断——一个开发团队如何根据Food to Go应用程序的用例做出每一个决策。我认为这个片断非常有用。

一个简单而快速的方法
第3章介绍了按照一个领域模型(或称为对象模型)实现业务逻辑,这领域模型是基于你要解决的问题域的。在向你介绍了领域模型设计模式后,本章向你展示了领域模型的开发设计。在领域模型设计中,你可以看到如何确定领域模型在应用程序全局结构中的适合位置,一个基于Food to Go的领域模型例子,并且还其中介绍了在领域模型中类所扮演的各种角色。

首先,你学会识别问题域中的那些特征,这样你就能够用类、属性和关系为之建模。接着,你学会给领域模型添加行为。作者展示了他最喜欢的实现行为的方法:测试驱动开发。你会发现重构你的代码的重要性,使用JUnit执行测试的益处,及使用模仿对象简化和加速测试的方法。最后,第3章为Food to Go的一个用例开发了一部分领域模型。

第4章探讨了在一个存储库(一个对象数据存储)中持久化一个领域模型。重要的概念有映射一个领域模型到数据库,使用一个对象关系映射(ORM)框架存取数据库,使用Spring的ORM支持类,和测试一个持久层。我特别享受这个映射部分。在向你展示了如何将类映射到数据表和对象关系映射后,这一部分还向你展示了如何映射继承,管理对象生命周期,及持久化对象标识符。

在讨论完映射部分后,第4章概述了ORM框架。你将学到为什么你不需要自己去持久化对象和探究ORM框架中的关键特征。对ORM框架讨论的内容必须包含它的优点和缺点,这是本章重点讨论的一个专题。概述之后,本章还介绍了Hibernate和JDO,以及讨论了这两个框架支持的ORM关键特征。

接下来,第4章着眼于应用Spring设计存储库。它讲授了如何使用Spring的ORM类实现JDO和Hibernate的存储库及如何使测试存储库变得更容易。你会看到在不管有没有底层数据库的情况下的多种测试策略。Chris介绍了他对Junit的扩展——ORMUnit,它将简化测试O/R映射和持久化对象。本章还讨论了JDO和Hibernate对性能的调校,最后给出了Food to Go应用的数据库schema例子。

第5、6章讨论了分别使用JDO 2.0和Hibernate 3.0持久化一个领域模型。 每章以检查每个框架相关的各种问题作为开始。比如,JDO要求每个领域模型类拥有一个对象标识符。但这个标识符是应用程序标识符还是数据存储标识符呢?Hibernate要求你决定哪些领域模型类是实体,哪些是组件。这两章还讨论了使用JDO或Hibernate来实现一个存储库及进行性能调校。

第7章探讨了使用POJO外观来封装业务逻辑。本章开始用一个例子(Food to Go应用程序)来说明一个POJO外观。外观处理来自表现层组件的请求,那个表现层组件实现了一个特定的用例,并调用了第3章开发的领域模型。外观还使用Spring的事务处理interceptor开始一个事务,打开存储库使用的一个持久层框架连接,然后关闭连接,并执行事务处理。

第7章像其他章节一样给出了一些优点和缺点的描述,这是本书一直强调的。具体来说,本章指出了使用一个POJO外观的优点(如快速而简单的开发)和缺点(如不支持远程客户端初始化事务)。接下来,本章探讨了你在设计外观时必须作的几个决定。然后本章还讨论了如何设计外观的公共接口,如何以测试驱动的方式实现外观,及如何通过Spring部署外观。

变化(Variations)
尽管它听起来很奇特,但是它对分发POJO外观和直接暴露领域模型给表现层有很大的益处。第8章关注这个暴露的领域模型模式。你会发现这个模式的优点(如编写和维护较少的代码)和缺点(如缺乏封装)。你将学会如何通过一个基于Spring的servlet过滤器管理持久层框架。你也会学到如何管理事务处理,不管是通过servlet过滤器还是Spring interceptor。

有时候把注意力集中于面向对象设计和ORM框架没有很大的意义。第9章讨论了何时通过过程设计实现业务逻辑和使用iBATIS存取数据库。iBATIS映射POJOs到SQL语句,并且能非常方便地执行这些语句。你还能看到如何从一个用例开始开发过程业务逻辑,和如何结构化这个逻辑使它易于维护。第9章的结尾部分向你展示了如何使用Spring的iBATIS支持类存取数据库。

很多Java开发者由于对EJB的不满,已经转向其他像Spring、JDO和Hibernate这样的框架。这样的转移导致Sun通过优化EJB来包含更多的POJO和轻量级框架概念。第10章对EJB 3.0进行了概述,指出了它的关键的改进之处(如现在的EJB组件是POJOs)和局限性(如对collections有限的支持)。本章中还可以看到如何使用EJB 3.0持久化领域模型,实现一个外观和实现其他的设计模式(如Transaction Script)。

处理数据库和并发
第11章讨论了搜索屏幕的实现,允许用户输入搜索条件和浏览匹配的搜索结果。本章提出了三种主要的设计论题:实现页面调度机制,动态产生查询和优化查询来改进性能。接着,本章谈论了结合iBATIS、JDO和Hibernate实现动态页面查询。然后,你可以看到Food to Go应用程序中使用JDO和Hibernate的设计例子。最后,你会学到SQL本地化查询。

因为企业应用程序经常是多用户的,多后台任务的及多数据库事务处理的,有时它会在同一时刻存取相同的数据。因此,数据损坏的几率就增加了。第12章给出了解决这个问题的optimistic锁定和pessimistic锁定方法。它展示了如何在iBATIS/JDBC、JDO和Hibernate环境下使用这些方法,以及如何使用Spring从并发失败中恢复。

optimistic和pessimistic锁定的方法适用于没有用户输入的单一事务的用例。对于多事务的用例,尤其是包含用户输入的那些称为编辑类型的用例,你需要使用offline锁定模式。第13章是整本书的最后一章,探究了optimistic offline锁定和pessimistic offline锁定模式。你可以看到每种模式的优缺点,及这些模式在iBATIS/JDBC、JDO和Hibernate中的应用。

结论
《实战POJOs》介绍了许多很有趣的专题。下面一系列的关于这些专题的问题将会激起你的好奇心:
? 乐观锁定是如何工作的?悲观锁定是如何工作的?
? 什么是DAOs,什么是DTOs?EJB的DTOs怎么了?
? 什么是模仿对象?
? 什么是Transaction Script模式?
? 对于数据库你可以进行什么类型的测试,什么类型的测试不需要数据库?
? 什么时候关注面向对象设计和ORM框架没有意义?
? 为什么JDO的数据存储标识符使表现层更加复杂?
你将会在这本书中得到这些问题的答案。

尽管我对Java EE体系结构没有很多的经验,但是我发现读《实战POJOs》会让你欲罢不能。这本书教会了我何时与EJBs协同工作,而何时应该与POJOs和轻量级框架协同工作。这些将会在我最终进入企业级Java应用开发时防止将来可能发生的很多挫败的发生。《实战POJOs》同意会给你很多的帮助。

作者简介
Jeff Friesen是一个精通C, C++和Java技术的自由软件开发专家和教育家

资源
《实战POJOs》,Chris Richardson (Manning出版社,2006年1月,ISBN 1932394583) :http://manning.com/crichardson/
↑返回目录
前一篇: EJB应用从WebLogic到JBoss的迁移方法
后一篇: 拥抱移动Web2.0{Ajax在移动开发领域的影响}