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)

  1. 测量性能(日志、监控、Profiler、基准测试)
  2. 识别主要瓶颈(CPU/内存/IO)
  3. 一次只解决一个瓶颈
  4. 假设-验证-测试-修改循环,充分文档化

关键数据

  • 百万请求/天 ≈ 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 传输为一次
ReactorNIO Selector 多路复用
Page-by-Page Iterator大数据集分页获取

关联笔记

价值评估

  • J2EE 1.4 时代经典经验集,EJB 2.x 已淘汰
  • 第 11 章性能调优方法论至今仍有参考价值
  • 适合了解企业 Java 历史演进、架构设计模式原理