连接池 - 深入J2EE的连接合用2011-06-16 IBM Siva VisveswaranJava 2 Enterprise Edition (J2EE) 规范提供了实现高度可伸缩、可靠和可 用的电子商务应用的分布式基于服务的体系结构。通常,J2EE 应用体系结构与 模型-视图-控制器 (MVC) 框架相对应 -- 资源库/外部系统资源支持域模型( 模型),JSP/Servlet 管理显示(视图),而 EJB 处理商业逻辑(控制器)。通过服务器端所有三层中的组件实现一个典型的电子商务应用用例。考虑到 用户交互数量的庞大(对于面对客户的应用,有上百万个),需要优化地共享有 限的服务器端资源。这类资源可能包括数据库、消息队列、目录、企业系统 (SAP、CICS) 等等,它们中的每一个都可以由使用代表资源访问点的连接对象的 应用来访问。管理对那些共享资源的访问对于满足 J2EE 应用的高性能需求来说 至关重要。连接合用是由数据库供应商倡导的技术,其目的是允许客户机共享一组高速 缓存的连接对象,这些对象提供对数据库资源的访问。在本文中,我分析了 J2EE 环境中服务器端资源(例如数据库、消息队列、目录和企业系统)的连接 合用。为何合用资源连接?考虑一下 代码示例 ,其中,EJB 使用 JDBC 1.0、 不使用连接合用来访问 数据库资源。很明显,该示例的主要问题是连接的打开和关闭。考虑到实体 bean 是共享 组件,因此,对每个客户机请求,都要进行几次获取和释放数据库连接的操作。从图 1 可以看出,使用 JDBC 1.0 通过数据库管理器获取和释放数据库连接 将影响 EJB 层的性能。这种影响是由数据库资源管理器进程创建和摧毁那些对 象而引起的。应用服务器一般需要花 1 到 3 秒的时间来建立数据库连接(包括 与服务器通信、认证等等),并需要对每一个客户机 (EJB) 的请求进行连接。图 1. 使用 JDBC 1.0 的连接管理

使用服务供应商设施的连接合用现在看一下在 J2EE 环境中,数据库和非数据库资源类型当前可以使用哪些 连接合用设施。JDBC 2.0 标准扩展 API
JDBC 2.0 标准扩展 API 指定数据库服务供应商可以实现具有以下特性的合用 技术:允许请求客户机透明地共享资源池的多个连接对象。在那种情况下,因为 池管理器预先在启动时创建连接对象,所以,J2EE 组件可以使用连接对象,而 不会导致数据库资源管理器上的系统开销。应用服务器供应商在其内存空间实现 池管理器,并根据需要动态改变池的大小,从而优化资源的使用。图 2 中显示 了这种情况。图 2. 使用 JDBC 2.0 标准扩展的连接合用