前 言
从本书的书名《企业级Java EE架构设计精深实践》可以看到几个关键词:企业级、Java EE、架构和实践。简单地说,本书是一本基于Java EE技术路线,面向企业级应用,解决企业级应用架构问题,并以实践为主的书籍。
目前市场上已经有了许多Java EE领域的书籍,涵盖了Java EE规范、Java EE的各种流行前后台框架等。这些书籍有一些写得非常好,比较全面地覆盖了企业级Java EE应用的方方面面。因此本书不会讲解Java相关的基础知识,不会讲解Java EE规范方面的知识,也不会花大量篇幅介绍流行框架的使用及技巧,而是把重点放在需要解决的一些企业级应用中的问题及其解决方案和实践过程,让读者跟随笔者的思路一起实践。笔者不能保证书中所有的实践都是最优解,但一定是相当不错的解。
企业级应用是本书内容的核心,那么什么是企业级应用呢?这个问题本身就没有标准答案。但是企业级应用涉及的一些领域还是可以列举的。
* 数据持久化:这里的数据泛指结构化和非结构化数据。这些数据从产生到消亡有着漫长的创建、更新、查询和删除的生命周期,有的数据甚至要存在许多年。这些数据需要为避免丢失而进行存储操作,为高效利用而进行缓存加载操作,再加上数据自身的CRUD等操作,在上述过程中就需要解决各种各样的问题。
* 海量并发访问:对于小的应用系统,访问者可能就是一个或几个人,稍大点的系统访问者有上百人。但是对于企业级应用尤其是互联网级应用来说,其注册用户、在线用户和并发请求都是巨大的。应用请求数较少和应用请求数巨大的架构模式是有巨大差异的,由此也会引入许多的架构问题。
* 海量数据:对于企业级应用来说,百万级数据只不过是起步,千万甚至数十亿条数据都是常见的。在数据规模比较小的时候不存在问题,而在数据规模比较大的时候就会出现严重的性能问题。为了保证在海量应用的情景下也可以使用,这时原有的数据架构就需要进行重构。
* 应用规模庞大:应用的规模越大,开发、测试、集成和维护起来就越困难。笔者就亲眼见到过一个项目,业务方面是非常出色的,但是随着产品的规模越来越大,而项目的开发方式无法适应,导致整个项目无法继续进行,以失败而告终。所以如何让应用随着规模的变大,其开发、测试、集成和维护成本只是出现等比例增长,而不是随着应用规模的变大产生指数级增长,这就变得非常重要了。
* 界面需求复杂:随着应用规模的变大,企业级应用的界面也越来越多。而在企业级应用中,又需要对使用权限、界面一致性和界面的易集成性等有非常高的要求。所以在企业级应用中,界面层有一个良好解决方案是非常有挑战性的。
* 与第三方系统协作:与小的应用不同,企业级应用的生成周期比较长,一个企业当中又有多个不同方面的系统同时存在,这些系统之间往往需要有数据或服务协作。但是由于不同的应用可能是来自于不同厂商采用不同开发语言和不同数据库开发的,所以这就对它们协同运作产生了许多问题。
总之,企业级应用可以理解成业务复杂、规模巨大、数据种类多、数据量大、访问请求大、生命周期长和并发请求巨大的应用。正是由于上述特点而产生了许许多多的问题,而这些问题的解决方案往往是有冲突的,因此如何艺术性地解决这些问题就往往需要从架构上想办法。
本书重点介绍的Tiny框架是Tiny开源小组历经5年业余时间,孜孜不倦地投入与坚持的产物。它是通过团队艰苦卓绝的努力所构建的体系完整、内容庞大的企业级开源框架。笔者和Tiny团队在解决这些问题时做了大量的尝试和实践,在诸多领域都有非常专业的解决方案,我们非常愿意通过本书与读者分享。
本书特色
1.基于原创,开拓思路
本书有大量的原创实践及原理性讲述,不管读者用不用本书中的框架,都可以对企业级Java EE架构中的一些技术及其解决方案有较为深入的理解,这对于读者开拓思路,避免踩同样的“坑”有非常强的借鉴作用。
2.涵盖广泛,讲解深入
本书介绍的内容都是当前主流框架和优秀技术,涵盖缓存、文件处理、模板语言、服务层、数据库架构、数据库水平扩展、元数据、Web架构和前端界面等Java EE领域经常用到的知识,涉及企业级应用架构开发的方方面面。对这些内容的讲解不是泛泛而谈,而是有相当的深度。
3.内容实用,注重实践
本书内容非常注重知识的实用性和可操作性,这些内容都是作者多年以来构建Java EE开发框架实践过程中的宝贵经验汇集而成的。本书每章都给出了实践性很强的开发案例供读者理解。
4.思路清晰,文笔简练
本书每章按照问题背景、需求分析、解决思路、架构设计、实践示例和章节总结的顺序行文,丝丝入扣,符合人们的认知规律。而且本书行文风格朴实,文笔简练,知识的讲解由浅入深、循序渐进,即便是初学者,只要肯用心也会有所收获。
5.与众不同,切中要害
本书有相当多的实践具有“反模式”的特质,也就是说与常见的解法不一样,再辅之以简单的示例,可以让读者非常容易理解其设计精要,有醍醐灌顶之感觉。
6.理论与实践齐抓,局部与整体并重
本书注重问题的解决思路和开发细节,既介绍了企业级Java EE架构的设计思想,也兼顾了应用的具体实践,避免了学习过程中理论与实践的脱节,连贯而统一。本书每章都有独立的测试用例,最后还提供了完整的Web开发案例,这样通过先局部后整体的方式,可以让读者更好地理解Java EE开发架构。
7.编排科学,适用面广
本书内容编排既可以让初学者对Java EE架构有整体的认知,也可以让那些学有余力、经验丰富的开发人员深入钻研自己感兴趣的内容。无论是哪个层次的读者,阅读完本书后都会有所收获,甚至对以前自己觉得深不可测的问题有豁然开朗的感觉。
本书内容
本书正文共13章,采用问题背景、需求分析、解决思路、架构设计、实践示例和章节总结的顺序来组织内容。下面简单介绍一下每章的内容。
第1章 虚拟文件系统实践
本章从Apache VFS框架存在的内存泄露Bug说起,引入企业级应用常见的虚拟文件系统的概念,并介绍了Apache VFS框架和Tiny VFS框架。另外,还讲解了VFS的设计思想,介绍了VFS管理器、虚拟文件接口和模式提供者等概念,并给出本地文件、JAR和FTP的实践用例。
第2章 缓存实践
本章以Java EE应用遇到的性能问题作为话题,引导读者了解缓存技术的重要性。在讲解一个实际项目缓存的代码变迁过程中,自然而然地列举了对现有缓存方案的改进:业务代码与缓存框架分离;具体缓存实现的切换不影响业务开发;支持XML配置等。本章介绍了两种缓存架构:字节码缓存方案和动态代理缓存方案,并对比了两者的优缺点。希望读者通过阅读本章内容,能够对开发企业级应用有新的心得体会。
第3章 文件处理框架实践
本章介绍了文件处理框架,可以有效地解决Java EE应用模块化导致的各种配置文件分散在不同模块而带来的处理这些资源难度大的问题。在介绍Tiny文件处理框架的过程中,请仔细阅读文件扫描器接口、文件扫描器主入口和定时扫描器的介绍,理解框架如何把文件的扫描、文件的变化、文件的遍历等与文件的实际处理分离,体会“开-闭”原则的具体运用。
第4章 模板语言实践
本章介绍了模板语言及其在Java EE领域的实践开发。为了便于读者理解,笔者先介绍模板语言的概念、原理和应用场景,并列举了常见的模板语言Velocity、FreeMarker和Tiny,比较了三者的优势和不足。特别是在设计开发的章节,按模板语言的架构、语法解析和渲染机制的顺序,从零开始讲解如何构建一种模板语言。通过对本章内容的学习,有能力的读者完全可以尝试扩展模板语言。
第5章 数据库访问层实践
本章首先介绍了应用框架的三层架构,然后引入了数据库访问层的相关概念。为了便于读者理解数据库访问层,笔者讲解了业界常用的数据库访问层框架Hibernate、Ibatis和JPA,以及DSL风格的数据库访问层JEQUEL、JOOQ和Querydsl。通过比较它们的优缺点,分析了Tiny团队开发TinyDsl的原因,然后详细说明TinyDsl的实践过程。最后通过具体示例说明各种数据库访问层框架的用法和配置。
第6章 数据库扩展实践
本章侧重介绍数据库水平扩展方案。首先从互联网的发展所导致的业务应用压力日益增加,从而让读者认识到数据库水平扩展方案对Java EE企业级应用是非常合理的需求。论证了水平扩展的合理性之后,列举了常见的扩展层次:DAO层、DataSource层、JDBC层和Proxy层,重点讲解了Tiny分库分表的技术架构和设计思路,并讲解了分库分表、读写分离和集群事务的处理,还与开源软件Routing4DB做了详细对比。最后通过具体示例演示数据库水平扩展的配置和增删改查的结果。
第7章 服务层实践
本章首先介绍了传统的服务层定义,以及与表现层、业务逻辑层的关系,然后讲解了Tiny对服务层的改进,通过重新定义服务概念,引入服务定义、服务注册和服务中心的设计思路。基于Tiny服务体系,应用可以不必关心服务提供方的具体信息。同时,由于远程调用与本地调用在代码层面并没有区别,所以系统根据不同场景进行多机部署或者单机部署时,无须对代码进行调整。远程调用体系由核心服务中心来组织整个调用网络,水平扩展极为容易。最后列举了本地场景、远程场景、单中心场景和多中心场景下,读者如何配置部署服务与服务中心。
第8章 流程引擎实践
本章介绍了面向对象编程的不足,引入了面向组件编程的概念。流程引擎框架(后文亦称之为Flow)是一款基于面向组件开发的组件流程执行框架。目前Flow支持两种流程:逻辑流程和页面流程。在设计部分,读者可以通过组件设计、流程管理、流程配置和流程执行了解流程引擎的强大。在实践部分笔者介绍了如何通过组件化开发算术表达式的流程。
第9章 元数据实践
本章介绍的是基本的元数据元素,包含方言模板、标准数据类型、业务数据类型和标准字段这几类基础元数据。最后的示例演示使用Eclipse插件设计元数据,包括通过工具动态生成业务Java代码和SQL语句。
第10章 展现层开发实践
本章首先介绍了Java EE展现层的常用代表技术Servlet、JSP和模板语言,并详细分析了三者的特性及优缺点。接着讲解了展现层方案设计,列举了设计人员常见的做法和技巧。然后给出了Tiny框架的展现层架构思路:采用模板语言做前端展示,同时引入组件包的概念,通过资源合并和压缩等框架手段,提升展现层的性能。最后演示了Tiny展现层的告警框和文本输入框的示例。
第11章 Web扩展实践
本章主要讲解了Tiny Web层框架的实践过程。首先介绍了Tiny Web层框架的由来及设计思想与设计原理。然后详细介绍了框架内置过滤器与处理器的使用方式。最后通过具体示例讲解Tiny Web层框架的开发过程,从而加强对Tiny Web层框架的理解。
第12章 Tiny统一界面框架实践
本章重点介绍了Java EE领域的界面开发设计,并通过介绍问题由来,归纳用户需求,提出UIML解决方案。本章的侧重点是介绍UIML设计思路和开发细节,让读者了解UI组件化开发带来的好处与便利。在实践小节中介绍了图形编辑器的使用,最后还列举了UIML配置开发示例,归纳和总结了开发过程中的常见问题。
第13章 RESTful实践
本章讲解了业界流行的RESTful的背景和开发方式。首先介绍了Spring RESTful的开发方式,这种方式比较适用于新项目开发,而不适用于已经开发完毕的项目。然后讲解了Tiny RESTful如何解决这个问题。本章详细介绍了Tiny RESTful的设计思想与实现过程,最后的Web层示例演示了RESTful风格配置Web映射。
本书读者对象
* 有一定Java EE基础的编程人员;
* 对Java EE架构设计感兴趣的开发人员;
* 构建企业级应用的架构师;
* 学有余力,乐于尝试新事物的初学者;
* 想通过本书学习分析问题和解决问题思路的人员。
本书源文件获取方式
本书涉及的案例源文件需要读者自行下载。请登录清华大学出版社的网站(http://www.tup.com.cn),搜索到本书页面,然后单击“资源下载”模块中的“课件下载”或“网络资源”按钮即可下载。
本书作者
本书由罗果主笔编写,其他参与编写的人员有严诚、陈佼、任辉、李强强、王维煜、张程浩、王玲珑、严文杰、葛强燕、陈超、陈锴、陈佩霞、陈锐、黎华、李鹏钦、李森、李奕辉、李玉莉、刘仲义、卢香清、鲁木应、马向东、麦廷琮、米永刚、欧阳昉、綦彦臣、冉卫华、宋永强、滕科平、王秀丽、王玉芹、魏莹、魏宗寿、乐西萍。
限于笔者及团队能力水平,书中可能会存在一些疏漏或对软件领域一些有失偏颇的理解,对于有些框架的优缺点总结也不一定完全到位,我们给出的一些实践与希望达到的完美程序也许会有一定的差距。欢迎各位读者向我们提出意见和建议,也欢迎对我们的方案提出批评与指正,给出更好的思路,以便及时进行优化和完善。联系我们请发邮件至bookservice2008@163.com。
最后祝各位读者读书快乐,学习进步!
编著
??
??
??
??
企业级Java EE架构设计精深实践
前 言
·XII·
·XI·