第1部分 入门 2
第1章 什么是Seam 2
1.1整合和强化JavaEE框架 2
1.2一个为ORM设计的Web框架 3
1.3专为有状态Web应用而设计 4
1.4支持Web2.0 4
1.5依赖双向注入的POJO服务 5
1.6异常配置 5
1.7避免滥用XML 6
1.8为测试而设计 6
1.9卓越的工具支持 7
1.10开始编码 7
第2章 SeamHelloWorld 8
2.1创建数据模型 9
2.2映射数据模型到Web表单 10
2.3处理Web事件 11
2.4有关Seam编程模型的更多内容 12
2.4.1SeamPOJO组件 12
2.4.2Seam的内置组件 13
2.4.3易于测试 14
2.4.4基于Getter/Setter的双向注入 14
2.4.5避免过量的双向注入 15
2.4.6JSF中的页面导航 16
2.4.7通过EntityManager访问数据库 16
2.5配置和打包 17
2.5.1WAR文件 19
2.5.2Seam组件JAR包 21
2.6为何如此简单 22
第3章 推荐的JSF增强功能 23
3.1Facelets简介 24
3.1.1为什么使用Facelets 24
3.1.2使用Facelets的HelloWorld实例 25
3.1.3Facelets用做模板引擎 26
3.1.4数据列表组件 30
3.2SeamJSF的增强功能 30
3.2.1SeamUI标签 30
3.2.2SeamJSFEL的增强功能 31
3.2.3随处使用EL 33
3.2.4Seam过滤器 33
3.2.5有状态的JSF 33
3.3Facelets和SeamUI支持的补充说明 33
3.4PDF、邮件和富文本 36
3.4.1生成PDF报告 36
3.4.2基于模板的邮件 39
3.4.3显示富文本 41
第4章 应用程序快速开发工具 43
4.1前提条件 43
4.2快速指南 44
4.2.1创建SeamGen 44
4.2.2生成一个框架应用程序 47
4.2.3理解框架 48
4.2.4开发应用程序 49
4.2.5创建和部署 50
4.2.6运行测试案例 50
4.3与IDES一起工作 51
4.3.1NetBeans 51
4.3.2Eclipse 53
4.4由数据库生成CRUD应用程序 54
第2部分 轻松生成有状态的应用程序 58
第5章 有状态框架简介 58
5.1正确使用ORM 58
5.2更好的性能 60
5.3更好的浏览器导航支持 61
5.4更少的内存泄漏 62
5.5细粒度(HighGranularity)组件生命周期 62
5.6减少程式化编码 63
第6章 简单的有状态的应用程序 65
6.1有状态组件 66
6.1.1有状态实体Bean 67
6.1.2有状态会话Bean 68
6.1.3有状态组件的生命周期 69
6.1.4工厂方法模式 70
6.2页面导航流 71
第7章 对话 74
7.1默认的对话范围 74
7.2长对话进程 77
7.2.1定义长对话进程组件 81
7.2.2开始一个对话 81
7.2.3在对话内部 82
7.2.4结束对话 84
7.2.5链接和按钮 86
7.3新前沿 88
第8章 工作空间和并行对话 89
8.1什么是工作空间 89
8.2工作空间切换器 92
8.3跨工作空间对话 94
8.4管理对话ID 95
第9章事务 97
9.1管理事务 98
9.2强制事务回滚 99
9.2.1通过可控异常回滚事务 99
9.2.2通过返回值回滚事务 100
9.3原子级对话(Web事务) 101
9.3.1手动清除持久上下文 101
9.3.2一个对话对应一个事务 102
第3部分 集成Web和数据组件 106
第10章 验证输入数据 106
10.1表单验证基础 106
10.2实体Bean上的校验标注 107
10.3触发确认动作 109
10.4在Web表单中显示错误信息 112
10.5使用JSF自定义的校验器 114
第11章 提供超链接功能的数据表 115
11.1实现提供超链接功能的数据表 116
11.1.1显示数据表 116
11.1.2把选取对象注入事件处理器 117
11.1.3在数据表中使用扩展的EL 118
11.2Seam的数据绑定(Data-Binding)框架 119
第12章 支持书签的Web页面 121
12.1使用页面参数 122
12.2以Java为中心(Java-Centric)的方法 125
12.2.1在HTTPGET请求中获取查询参数 125
12.2.2为页面加载数据 126
12.2.3对书签页面的进一步处理 128
第13章 SeamCRUD应用程序构架 130
13.1数据访问对象 130
13.2Seam的CRUDDAO即为POJO 131
13.3声明式SeamDAO组件 132
13.3.1使用实体对象的简称(SimplerNames) 133
13.3.2实体对象的提取(Retrieving)和显示(Displaying) 134
13.3.3初始化一个新的实体实例 135
13.3.4成功消息 135
13.4查询 136
13.4.1动态查询 137
13.4.2显示多页(Multipage)查询结果 139
第14章 优雅地失败 142
14.1为什么不用标准的Servlet错误页面 143
14.2设置异常过滤器(ExceptionFilter) 144
14.3注解异常 144
14.4为系统异常使用pages.xml 146
14.5调试信息页面 148
14.5.1Facelets的调试页面 148
14.5.2Seam的调试页面 149
第4部分 AJAX支持工具 152
第15章 用户和AJAXUI组件 152
15.1局部表单提交示例 153
15.2自动补全文本输入的例子 155
15.3联合使用ICEfaces和Seam 158
15.4其他JSF组件库 160
第16章 为现有组件启用AJAX 162
16.1AJAX验证框架的例子 162
16.2可编程的AJAX 164
16.3AJAX按钮 167
16.4AJAX容器 168
16.5其他组件 168
16.6配置Ajax4jsf 169
16.7利弊分析 171
第17章 直接集成JavaScript 172
17.1AJAX的名字验证实例(已重新加载) 172
17.1.1服务器端组件 173
17.1.2触发Web页面的JavaScript事件 174
17.1.3产生一个AJAX请求 175
17.2AJAX进度条 177
17.2.1Seam组件 178
17.2.2通过JavaScript访问Seam组件 179
17.3集成Dojo工具 181
17.3.1视觉效果 181
17.3.2输入控件 183
第5部分 业务进程和规则 188
第18章 管理业务进程 188
18.1jBPM基础和有关词汇 188
18.2应用程序用户和jBPM的参与者 191
18.3创建业务进程 192
18.3.1定义进程 193
18.3.2创建业务进程实例 194
18.3.3在进程范围中绑定数据对象 195
18.4管理任务 197
18.4.1为任务实施业务逻辑 197
18.4.2指定要执行的任务 199
18.4.3在UI中选择一个任务 200
18.5jBPM库和配置 202
第19章 有状态的页面流 205
19.1pages.xml中的状态化导航规则 205
19.2把业务进程与Web页面关联起来 208
19.3页面流和有状态的对话 211
19.4配置 212
第20章基于规则的安全架构 214
20.1认证(Authentication)和用户角色(UserRoles) 214
20.2声明性访问控制(DeclarativeAccess Control) 216
20.2.1Web页面 216
20.2.2UI组件 217
20.2.3方法层(Method-Level)的访问控制(AccessControl) 218
20.3基于规则的访问控制 219
20.3.1简单的访问规则 219
20.3.2基于实例的访问规则 221
20.3.3配置JBoss规则 222
第6部分 测试Seam应用程序 226
第21章 单元测试 226
21.1一个简单的TestNG测试案例 227
21.2模拟依赖性双向注入 229
21.3模拟数据库和事务 230
21.4加载测试设施 232
第22章 集成测试 235
22.1完整的测试脚本 236
22.1.1模拟JSF交互过程 236
22.1.2使用JSFEL表达式 237
22.2访问不带EL的Seam组件 238
22.2.1获取Seam组件 238
22.2.2把数据与组件捆绑 239
22.2.3触发UI事件处理器方法 239
22.2.4校验响应 239
第7部分 产品部署 242
第23章 部署JavaEE5.0 242
23.1JBossAS4.0.5 242
23.2JBossAS4.2.x和JBossAS5.x 242
23.3GlassFish 243
第24章 没有EJB3.0的Seam 247
24.1带有JPA的SeamPOJO 248
24.1.1一个有关SeamPOJO的例子 248
24.1.2配置 250
24.1.3打包 252
24.2使用Hibemate的POJO和API 254
24.2.1使用HibernateAPI 254
24.2.2配置 256
第25章 Tomcat的部署 258
25.1为Tomcat打包POJO应用程序 259
25.1.1支持绑定JAR 259
25.1.2配置事务性数据源 261
25.1.3引导JBossMicroContainer 263
25.2为Tomcat打包一个EJB3.0应用程序 263
25.2.1在WAR文件中捆绑必需的JAR 264
25.2.2捆绑EmbeddableEJB3.0配置文件 265
25.2.3引导JBossMicroContainer 265
25.2.4应用其他数据源 266
第26章 使用生产数据库 268
26.1安装并搭建数据库 268
26.2安装数据库驱动程序 269
26.3定义一个数据源 270
26.4配置持久化引擎 270
第27章 性能优化与集群 272
27.1单机服务器的性能优化 272
27.1.1避免值调用 272
27.1.2JVM选项 273
27.1.3减少日志记录 274
27.1.4优化HTTP线程池 275
27.1.5在客户端和服务器端状态存储中的选择 276
27.1.6使用生产数据源 277
27.1.7使用一个二级数据库高速缓存 277
27.1.8小心使用数据库事务 280
27.2集群的可扩展性和故障转移 280
27.2.1粘session的负载均衡 281
27.2.2状态复制 281
27.2.3Failover架构 282
附录A 安装和部署JBossAS 283
A.1要求JDK5.0以上版本 283
A.2安装JBossAS 283
A.3部署和运行应用程序 286
附录B 使用例子程序作为模板 287
B.1基于EJB3.0的简单Web应用程序 287
B.2基于POJO的Web应用程序 293
B.3Tomcat集群应用程序 299
B.4更多复杂的应用程序 300