目录 1
序 1
前言 1
缩略语 1
第1章 简介 1
J2EE的目标 2
中间件和J2EE 3
J2EE实现 7
企业计算的十大谬误 9
第1项 优先采用构件作为开发、部署和重用的核心元素 13
第2章 架构 13
第2项 跨越构件边界优先采用松耦合 17
第3项 区分逻辑层和物理层 20
第4项 数据和处理程序要尽可能靠近 23
第5项 牢记标识引起的竞争 26
第6项 使用“挂钩点”来注入优化、定制或新功能 30
第7项 面对故障时要健壮 35
第8项 定义性能和可扩展性目标 38
第9项 只在事务性处理中使用EJB 41
第10项 先测量性能,再进行优化 43
第11项 认清“提供商中立”的成本 47
第12项 内置监控功能 50
第13项 内置管理支持 55
第14项 部署要尽可能简单 60
第3章 通信 63
第15项 理解你所做的通信选择 63
第16项 仔细考虑你的查找 67
第17项 识别网络访问的代价 71
第18项 优选上下文完整的通信风格 76
第19项 优选数据驱动的通信而不是行为驱动的通信 82
第20项 避免为远程服务请求去等待响应 87
第21项 考虑构件的划分以避免任何一台机器负载过重 90
第22项 为了开放集成而考虑使用Web服务 94
第23项 大批量地传送数据 96
第24项 考虑定制你自己的通信代理 100
第4章 处理 103
第25项 保持简洁 104
第26项 优先采用规则引擎去处理复杂状态的评估和执行 106
第27项 优先为隐含的非原子性错误场景采用事务性处理 110
第28项 区分用户事务和系统事务 114
第29项 最小化锁窗口 117
第30项 当持有锁时不要让步给在构件之外的控制 123
第31项 理解EJB的事务关联 128
第32项 优先使用本地事务而不是分布式事务 130
第33项 为了更好的可扩展性而考虑使用乐观的并发机制 132
第34项 为了显式的并发控制而考虑使用悲观的并发机制 137
第35项 考虑使用较低的隔离级别以获得更大的事务吞吐量 140
第36项 面临回滚时使用保存点来保留部分工作 143
第37项 当有可能避免锁定区域时就复制数据源 145
第38项 偏爱不可变的,因为它不需要任何锁 147
第5章 状态管理 151
第39项 节省地使用HttpSession 152
第40项 使用对象优先的持久化来保存你的领域模型 155
第41项 使用关系优先的持久化来显示关系模型的威力 158
第42项 使用过程优先的持久化来创建一个封装层 165
第43项 识别对象-层次结构阻抗失配 167
第44项 使用进程内或本地存储以避开网络 174
第45项 不要假设拥有数据或数据库 177
第46项 惰性加载不频繁使用的数据 179
第47项 积极加载频繁使用的数据 182
第48项 批处理SQL的工作以避免往返访问 183
第49项 了解你的JDBC供应商 186
第50项 调整你的SQL语句 189
第6章 表示 193
第51项 考虑富客户端UI技术 194
第52项 使HTML短小精悍 200
第53项 表示与处理相分离 202
第54项 内容与样式相分离 207
第55项 预生成内容以最小化处理过程 209
第56项 尽早验证,尽量验证 211
第7章 安全 219
第57项 安全是一个过程,而不是产品 221
第58项 记住安全不仅仅是预防 224
第59项 建立威胁模型 225
第60项 做不安全假设 227
第61项 总是验证用户的输入 231
第62项 打开平台安全机制 238
第63项 使用基于角色的授权 240
第64项 使用SignedObject以保证序列化对象的完整性 247
第65项 使用SealedObject以保证可序列化对象的机密性 250
第66项 使用GuardedObJect以保证对象的存取控制 252
第8章 系统 257
第67项 主动释放资源 257
第68项 调整JVM 262
第69项 为版本并存使用独立的JRE 268
第70项 识别类加载器的边界 272
第71项 理解Java的对象序列化 278
第72项 不要对抗垃圾收集器 283
第73项 优选容器管理的资源管理 290
第74项 使用Reference对象来扩展垃圾收集行为 293
第75项 不要担心在服务器上的JNI代码 304
参考资料 307