《企业级Java EE架构设计精深实践》这本书能引起技术人员的关注确实不是偶然的,它全面并深入地探讨了Java EE架构设计的相关领域,以实际问题为导向,通过案例分析,旨在提升读者在该领域的问题解决能力,书中每章围绕一个具体问题展开讨论,结构清晰,内容涵盖虚拟文件系统、缓存技术、数据库访问层等多个方面,极具实践价值,不过,从读者反馈来看,该书似乎过分强调了作者自己开源框架Tiny的运用,可能会让不了解或不使用这个框架的人感觉有些格格不入,代码示例虽多,但对框架设计的深层次理论讲解不够,可能会让读者在理解上略感吃力,尽管附录部分提供了必要的学习资源,但如果能在理论与实操之间找到更好的平衡,这本书将更加接近完美,更好地服务于那些渴望深化企业级Java EE架构设计能力的专业人士。
企业级Java EE架构设计精深实践
读者评价
没用过tiny,书中提及的内容其实还可以。但贴了太多代码,对内在的框架设计思想没有太丰富的描写。如果在学tiny的话,倒是再合适不过了
名字起的太大了,不知道开源软件tiny不要买,完全就是宣传的自己开源框架;而且前后一点逻辑没有,纯粹堆了一堆别人根本不知道何意的代码,有的还没有贴完全,还要去翻着源码去看
内容介绍
本书全面、深入介绍了企业级Java EE设计的相关内容,内容涵盖了Java EE架构设计的常见问题。每一章讲解一个Java EE领域的具体问题,采用问题背景、需求分析、解决思路、架构设计、实践示例和章节总结的顺序组织内容,旨在通过分析相关领域中的常用框架及存在问题,给出相应的解决方案,提高读者分析和解决问题的能力,并增强其架构设计的能力。共13章。内容主要包括虚拟文件系统实践、缓存实践、文件处理框架实践、模板语言实践、数据库访问层实践、数据库扩展实践、服务层实践、流程引擎实践、元数据实践、展现层开发实践、Web扩展实践、Tiny统一界面框架实践和RESTful实践。附录中给出了相关学习资源和配置运行指南。语言简洁,思路清晰,示例丰富、完整,适合具有一定Java基础的读者阅读,尤其适合从事企业级Java EE软件架构和设计的人员阅读。
目录
- 第1章 虚拟文件系统实践
- 1.1 背景介绍
- 1.2 什么是VFS
- 1.3 VFS对比
- 1.3.1 Apache VFS
- 1.3.2 Tiny VFS
- 1.4 VFS框架设计思想
- 1.5 VFS实现讲解
- 1.5.1 VFS管理器
- 1.5.2 SchemaProvider模式提供者
- 1.5.3 FileObject虚拟文件
- 1.5.4 FileObjectFilter过滤接口
- 1.6 VFS应用示例
- 1.6.1 本地文件
- 1.6.2 Jar文件
- 1.6.3 FTP文件
- 1.6.4 ZIP文件
- 1.7 本章总结
- 第2章 缓存实践
- 2.1 缓存简介
- 2.1.1 问题的提出及其解决方案分析
- 2.1.2 用户需求
- 2.1.3 Tiny缓存解决思路
- 2.2 字节码缓存设计
- 2.2.1 字节码操作工程
- 2.2.2 预编译工程
- 2.2.3 缓存实现工程
- 2.2.4 技术特点
- 2.3 动态代理缓存设计
- 2.3.1 缓存接口定义
- 2.3.2 切面缓存工程
- 2.3.3 技术特点
- 2.4 缓存方案实践
- 2.4.1 字节码方案配置
- 2.4.2 字节码方案示例
- 2.4.3 动态代理方案配置
- 2.4.4 动态代理方案示例
- 2.5 本章总结
- 2.5.1 关键点:缓存实现方案的可替换性
- 2.5.2 关键点:缓存代码与业务代码的解耦
- 2.5.3 关键点:模板语言的应用
- 第3章 文件处理框架实践
- 3.1 概述
- 3.1.1 FileProcessor接口
- 3.1.2 FileResolver接口
- 3.1.3 FileMonitorProcessor类
- 3.2 基础文件扫描器
- 3.2.1 XStreamFileProcessor类
- 3.2.2 I18nFileProcessor类
- 3.2.3 Annotation扫描器
- 3.2.4 SpringBeansFileProcessor类
- 3.3 完整示例
- 3.3.1 单独使用
- 3.3.2 通过配置文件配置
- 3.4 本章总结
- 第4章 模板语言实践
- 4.1 模板语言简介
- 4.1.1 模板语言构成
- 4.1.2 模板语言应用场景
- 4.2 常见的模板语言
- 4.2.1 Velocity模板语言
- 4.2.2 FreeMarker模板语言
- 4.2.3 Tiny模板语言
- 4.3 Tiny模板语言设计
- 4.3.1 Tiny模板语言的构建原因
- 4.3.2 模板语言执行方式
- 4.3.3 模板语言架构
- 4.3.4 Tiny模板语言实现与扩展
- 4.3.5 模板语言语法解析
- 4.3.6 模板语言渲染机制
- 4.4 模板语言的使用
- 4.4.1 依赖配置
- 4.4.2 模板语言的配置
- 4.4.3 模板语言的Eclipse插件
- 4.4.4 Hello,TinyTemplate
- 4.5 模板语言语法介绍
- 4.5.1 变量
- 4.5.2 取值表达式
- 4.5.3 Map常量
- 4.5.4 数组常量
- 4.5.5 其他表达式
- 4.5.6 索引表达式
- 4.5.7 #set指令
- 4.5.8 条件判断
- 4.5.9 ==相等运算
- 4.5.10 AND运算
- 4.5.11 OR运算
- 4.5.12 NOT运算
- 4.5.13 循环语句
- 4.5.14 循环状态变量
- 4.5.15 循环中断:#break
- 4.5.16 循环继续:# continue
- 4.5.17 while循环
- 4.5.18 模板嵌套语句#include
- 4.5.19 宏定义语句#macro
- 4.5.20 宏引入语句#import
- 4.5.21 布局重写语句#layout #@layout
- 4.5.22 停止执行#stop
- 4.5.23 返回指令#return
- 4.5.24 行结束指令
- 4.5.25 读取文本资源函数read和readContent
- 4.5.26 解析模板parser
- 4.5.27 格式化函数fmt、format和formatter
- 4.5.28 宏调用方法call和callMacro
- 4.5.29 实例判断函数is、instanceOf和instance
- 4.5.30 求值函数eval和evaluate
- 4.5.31 随机数函数rand和random
- 4.5.32 类型转换函数
- 4.5.33 日期格式转换formatDate
- 4.6 模板语言扩展
- 4.6.1 资源加载器的使用
- 4.6.2 宏的使用
- 4.6.3 函数的使用
- 4.6.4 国际化的使用
- 4.6.5 静态类和静态方法的使用
- 4.6.6 Servlet集成
- 4.6.7 SpringMVC集成
- 4.7 本章总结
- 第5章 数据库访问层实践
- 5.1 数据访问层简介
- 5.2 常见数据库访问层介绍
- 5.2.1 Hibernate简介
- 5.2.2 Ibatis简介
- 5.2.3 JPA简介
- 5.2.4 DSL数据库访问层简介
- 5.3 TinyDsl设计方案
- 5.3.1 SQL抽象化设计
- 5.3.2 DSL风格SQL设计
- 5.3.3 SQL执行接口设计
- 5.3.4 执行接口实现介绍
- 5.4 数据库访问层示例
- 5.4.1 工程创建
- 5.4.2 准备工作
- 5.4.3 Hibernate示例
- 5.4.4 Ibatis示例
- 5.4.5 JPA示例
- 5.4.6 TinyDsl示例
- 5.5 本章总结
- 第6章 数据库扩展实践
- 6.1 数据库扩展简介
- 6.2 常见数据库扩展方案
- 6.2.1 DAO层
- 6.2.2 DataSource层
- 6.2.3 JDBC层
- 6.2.4 Proxy层
- 6.3 读写分离
- 6.3.1 读写分离
- 6.3.2 负载均衡
- 6.3.3 数据同步
- 6.4 分库分表
- 6.4.1 同库分表
- 6.4.2 不同库分表
- 6.5 开源方案介绍
- 6.5.1 TDDL
- 6.5.2 Routing4DB
- 6.5.3 TinyDbRouter
- 6.5.4 开源方案的对比
- 6.6 TinyDbRouter的设计和实现
- 6.6.1 设计目标
- 6.6.2 设计原理之接入层设计
- 6.6.3 设计原理之SQL解析层设计
- 6.6.4 设计原理之路由决策层设计
- 6.6.5 设计原理之执行层设计
- 6.6.6 实现
- 6.7 应用实践
- 6.7.1 读写分离示例
- 6.7.2 分库分表示例
- 6.7.3 集群事务示例
- 6.7.4 元数据示例
- 6.7.5 自定义扩展
- 6.7.6 常见FAQ
- 6.8 本章总结
- 第7章 服务层实践
- 7.1 服务层简介
- 7.1.1 传统服务层
- 7.1.2 Tiny服务层
- 7.2 Tiny服务层介绍
- 7.2.1 服务声明
- 7.2.2 服务注册
- 7.2.3 小结
- 7.3 本地服务层实践
- 7.3.1 服务描述
- 7.3.2 服务定义
- 7.3.3 服务收集与注册
- 7.3.4 服务执行
- 7.3.5 小结
- 7.4 远程服务实践
- 7.4.1 传统的远程服务
- 7.4.2 新的远程服务模式
- 7.4.3 多服务中心支持
- 7.4.4 新的远程服务实现
- 7.4.5 小结
- 7.5 本地服务调用示例
- 7.5.1 非Tiny框架调用示例
- 7.5.2 Tiny框架应用调用
- 7.6 远程服务配置示例
- 7.6.1 非Tiny框架配置示例
- 7.6.2 Tiny框架应用配置
- 7.7 本章总结
- 第8章 流程引擎实践
- 8.1 流程引擎简介
- 8.1.1 流程引擎的来历
- 8.1.2 解决方案
- 8.1.3 特性简介
- 8.2 流程引擎实现
- 8.2.1 流程组件
- 8.2.2 流程组件配置
- 8.2.3 流程组件管理
- 8.2.4 流程配置
- 8.2.5 流程管理
- 8.2.6 流程执行
- 8.3 流程引擎特性
- 8.3.1 流程可继承性
- 8.3.2 灵活的EL表达式
- 8.3.3 流程可重入
- 8.3.4 流程可转出
- 8.3.5 强大异常处理
- 8.4 流程编辑器
- 8.4.1 创建流程
- 8.4.2 界面说明
- 8.4.3 操作说明
- 8.5 本章总结
- 第9章 元数据实践
- 9.1 元数据简介
- 9.1.1 问题背景
- 9.1.2 解决途径
- 9.2 基础元数据设计
- 9.2.1 支持语言类型
- 9.2.2 标准数据类型
- 9.2.3 业务数据类型
- 9.2.4 标准字段
- 9.3 数据库元数据设计
- 9.3.1 表及索引
- 9.3.2 视图
- 9.4 元数据开发指南
- 9.4.1 元数据加载机制
- 9.4.2 元数据处理器
- 9.5 元数据开发实践
- 9.5.1 Eclipse插件
- 9.5.2 应用配置
- 9.5.3 生成方言模板
- 9.5.4 生成标准数据类型
- 9.5.5 生成业务数据类型
- 9.5.6 生成标准字段
- 9.5.7 生成数据库表
- 9.5.8 定义元数据
- 9.5.9 生成Java代码
- 9.5.10 生成SQL
- 9.6 本章总结
- 第10章 展现层开发实践
- 10.1 展示层简介
- 10.1.1 Servlet
- 10.1.2 JSP
- 10.1.3 模板语言
- 10.1.4 展示层常见问题
- 10.2 展示层方案设计
- 10.2.1 UI组件包开发
- 10.2.2 资源合并实践
- 10.2.3 避免重复代码
- 10.2.4 国际化问题
- 10.3 前端访问方案实践
- 10.3.1 组件包封装
- 10.3.2 宏接口定义
- 10.3.3 页面和布局编写
- 10.3.4 前端参数配置
- 10.4 本章总结
- 10.4.1 关键点:DRY原则的实现
- 10.4.2 关键点:JS文件的合并
- 10.4.3 关键点:CSS文件的合并
- 第11章 Web扩展实践
- 11.1 背景简介
- 11.2 监听器设计原理
- 11.2.1 应用配置管理
- 11.2.2 应用处理器(ApplicationProcessor)
- 11.2.3 Web监听器
- 11.2.4 监听器配置管理
- 11.3 过滤器设计原理
- 11.3.1 请求上下文(WebContext)
- 11.3.2 TinyFilter介绍
- 11.4 处理器设计原理
- 11.4.1 过滤器配置(TinyProcessorConfig)
- 11.4.2 过滤器配置管理(TinyProcessorConfigManager)
- 11.4.3 处理器管理接口(TinyProcessorManager)
- 11.5 BasicTinyFilter类
- 11.5.1 拦截器接口
- 11.5.2 默认拦截器
- 11.6 SetLocaleTinyFilter类
- 11.6.1 Locale基础
- 11.6.2 Charset编码基础
- 11.6.3 Locale和charset的关系
- 11.6.4 设置locale和charset
- 11.6.5 使用方法
- 11.7 ParserTinyFilter类
- 11.7.1 基本使用方法
- 11.7.2 上传文件
- 11.7.3 高级选项
- 11.8 BufferedTinyFilter类
- 11.8.1 实现原理
- 11.8.2 使用方法
- 11.8.3 关闭buffer机制
- 11.9 LazyCommitTinyFilter类
- 11.9.1 什么是提交
- 11.9.2 实现原理
- 11.9.3 使用方法
- 11.10 RewriteTinyFilter类
- 11.10.1 概述
- 11.10.2 取得路径
- 11.10.3 匹配rules
- 11.10.4 匹配conditions
- 11.10.5 替换路径
- 11.10.6 替换参数
- 11.10.7 后续操作
- 11.10.8 重定向
- 11.10.9 自定义处理器
- 11.11 SessionTinyFilter类
- 11.11.1 概述
- 11.11.2 Session框架
- 11.11.3 Cookie Store
- 11.11.4 总结
- 11.12 SpringMVCTinyProcessor介绍
- 11.12.1 基于扩展协议的内容协商
- 11.12.2 约定开发
- 11.12.3 扩展协议
- 11.13 TinyWeb实践
- 11.13.1 准备工作
- 11.13.2 使用TinyHttpFilter
- 11.13.3 使用TinyProcessor
- 11.14 本章总结
- 第12章 Tiny统一界面框架实践
- 12.1 UIML简介
- 12.2 UIML开发指南
- 12.3 UIML使用实践
- 12.4 常见FAQ
- 12.5 本章总结
- 第13章 RESTful实践
- 13.1 RESTful简介
- 13.2 Spring RESTful实践
- 13.3 Tiny RESTful风格实践
- 13.4 Tiny RESTful实践
- 13.5 本章总结
- 附录A 相关资源
- 附录B 配置运行指南
Java EE应用程序模型——这个模型描述了一个实现服务的多层架构。“什么是服务”没有明确的界限。事实上,服务只是一个逻辑上的概念,它的对应实体取决于应用实现的概念。例如,客户端/服务器模型就是一种服务。 Java EE 服务——这是一个J2EE中三层架构的应用服务范例。它是由网页层(服务JSP页面)和事务层(管理企业的数据层)组成的。 Java EE 组件——“组件”是指独立的软件单元,可以和其他的组件组合来建立一个应用。 Web组件(Web Component)——web端生成的页面或者对用户请求的返回。代表性的有: Java Servlets, JavaServer Faces 和 Java Server Pages. 小程序(Applet)——一个小型的Java应用程序可以作为响应的一部分返回给用户,用户可以在他们的浏览器上运行此程序。这种小型的程序是Javascript的竞争对手。 客户端程序(Application Client)——例如,一个用Java写的桌面应用程序。 EJB(Enterprise Java Beans)——见下文。 Java EE 客户端——这个概念中包含三个其他的概念: 网页客户端(Web Client)或小型客户端(thin client)——以前(也不是非常久以前),客户端的请求返回的网页会包含脚本代码,这些代码会在应用服务器上执行了再将运行结果返回给客户端。这就是EE客户端。比如,用户可以查询员工的信息,并且对不同的结果按照他们喜欢的方式排列。现在,大多数开发者都不是在网页中使用脚本了,因为这不是个好习惯。他们更喜欢使用MVC设计原则,即禁止在网页中使用脚本。 小程序(Applet) 应用客户端(Application Client) Java EE 服务器通信(Java EE Server Communication)——这是指发生在小型客户端和应用客户端之间在服务器上的通信。具有代表性的是,小型客户端和小程序在Web层通信,但是应用客户端在EJB通信。 你觉得这不够清晰是吗?你觉得这很麻烦是吗?这就对了!这就是REST以及MVC设计原理现在在开发中流行的缘故。
多层式应用(Multitier Application)——多层式应用(或者多层式架构)分成多个逻辑部分,大多在多层服务器上实现。例如,三层应用模型:用户和浏览器,应用服务器,数据库服务器。其中应用服务器和数据库服务器就是分别在不同的服务器上来处理应用的请求。 多层式服务(Multitier Service)——以三层架构模型的服务为例,应用服务器响应用户的请求。数据库服务器响应应用服务器的查询求情。 Java Bean——由一些包含私有属性的Java类组成,对外提供get和set方法。从技术上讲,这些类必须保证有一个不含参数的构造器并且实现Serializable接口。