O’Reilly Java Enterprise Best Practices 笔记
书籍信息
- 书名: Java Enterprise Best Practices
- 作者: Robert Eckstein (Editor), O’Reilly & Associates
- 出版: O’Reilly & Associates, 2003
- 页数: 314 页
- 格式: PDF (text_based)
核心主题
本书汇集 O’Reilly 多位 Java 专家的实战经验,覆盖 J2EE 各核心 API 的最佳实践,不是 API 教程,而是”如何用对”的经验总结。
Chapter 2: EJB Best Practices (Sasha Nikolic)
- 设计层面:无状态 Session Bean 优先、合理使用值对象(Value Object)减少远程调用次数、善用 Session Façade 模式封装复杂交互
- 实现层面:EJB 部署描述符中的事务属性调优、只读方法标记、连接池配置
- 部署打包:正确设置事务隔离级别、钝化策略、集群部署注意事项
Chapter 3: Servlet Best Practices (Jason Hunter)
- 高效使用 Servlet:init/destroy 生命周期管理、线程安全问题(避免共享可变状态)、合理使用 ServletContext 共享数据
- Servlet 缓存:合理使用 HTTP 缓存头、页面片段缓存策略、RequestDispatcher 合理使用、Filter 链设计
Chapter 4: JDBC Best Practices (George Reese)
- 配置:DataSource vs DriverManager 选择、连接池调优参数(initialSize, maxActive, maxIdle)
- 设计:PreparedStatement 复用、ORM 模式选择、批处理操作优化
- 代码:资源释放(try-with-resources/finally)、事务管理最佳实践
- 事务隔离级别成本递增: TRANSACTION_READ_UNCOMMITTED < TRANSACTION_READ_COMMITTED < TRANSACTION_REPEATABLE_READ < TRANSACTION_SERIALIZABLE
Chapter 5: XML Best Practices (Brett McLaughlin)
- SAX:事件驱动解析技巧、大文件内存控制
- DOM:文档操作注意事项
- JAXP:统一 API 使用方式
Chapter 6: RMI Best Practices (William Grosso)
- 对象编组/反编组:序列化性能优化(transient 字段使用)、Externalizable 接口瓶颈处理
- 减少网络传输次数、合理使用缓存和负载均衡
Chapter 7: Java Management Extensions (JMX) (J. Steven Perry)
- 命名规范:MBean 命名最佳实践、监控/插桩、性能指标收集
Chapter 8: Enterprise Internationalization (David Czarnecki, Andy Deitsch)
- J2EE 开发从一开始就要考虑国际化/本地化
- Presentation 层(JSP/标签库)、Business Object 层、Data Access 层分别处理 i18n
Chapter 9: JSP Best Practices (Hans Bergsten)
- JSP 在企业应用中的定位(View 层,不含业务逻辑)
- 合理使用 JSTL/EL、避免在 JSP 中写 Java 代码、缓存策略、Tag Library 开发
Chapter 10: JavaMail Best Practices (William Crawford)
- 企业邮件系统使用模式、邮件附件处理、异步发送、SMTP 连接管理
Chapter 11: Enterprise Performance Tuning (Jack Shirazi) ★核心章节
性能规划
- 容量计划(Scalability)、争用分析(Contention)、基准测试
- 可扩展性指标:吞吐量随资源翻倍而翻倍
分布式计算架构
- Front Controller 负载均衡 → 中间层 Web 应用服务器集群
- Message Façade 异步组件+消息队列优化吞吐
- NIO Selector 多路复用 socket,Reactor 模式支持高效负载均衡
- 缓存、资源池(线程池、连接池)、性能监控子系统,避免单点故障
减少延迟的核心手段
- 合并多个远程调用为单个粗粒度 Session Façade / Composite Entity
- Service Locator 缓存 JNDI 查找
- 批量消息和数据传输、数据本地化执行
- Value Object 合并多次 RMI 传输为一次
调优流程 (Tuning Procedure)
- 测量性能(日志、监控、Profiler、基准测试)
- 识别主要瓶颈(CPU/内存/IO)
- 一次只解决一个瓶颈
- 假设-验证-测试-修改循环,充分文档化
关键数据
- 百万请求/天 ≈ 12 req/s,高峰可达百 TPS
- 光速约 3.33ms/1000km,软网延迟通常主导传输时间
调优技巧
- 大数据集考虑 Compromise / Aggregate / Hybrid 数据结构策略
- 事务:避免不必要事务、乐观锁、批量操作在大事务中更高效
- JMS:先启动 Consumer、非持久消息更快、较短消息、低重投递次数
关键模式索引
| 模式 | 用途 |
|---|---|
| Front Controller | 前端负载均衡分发请求 |
| Message Façade | 异步消息队列优化吞吐 |
| Session Façade | 合并多个 EJB 远程调用 |
| Composite Entity | 粗粒度接口减少网络传输 |
| Data Access Object | 数据访问层优化 |
| Service Locator | 缓存 JNDI 查找结果 |
| Value Object | 合并多次 RMI 传输为一次 |
| Reactor | NIO Selector 多路复用 |
| Page-by-Page Iterator | 大数据集分页获取 |
关联笔记
价值评估
- J2EE 1.4 时代经典经验集,EJB 2.x 已淘汰
- 第 11 章性能调优方法论至今仍有参考价值
- 适合了解企业 Java 历史演进、架构设计模式原理