<< Using Multi Data Sources with Oracle RAC - 11g Release 1 (10.3.6) | 首页 | 常用旅游英语口语 >>

探查 JDBC Multipool 问题

负载平衡算法
采用负载平衡算法的 MultiPool 以 Round Robin 方式提供其连接,各连接在为其定义的所有 JDBC 连接池之间均匀分布。如果对某个连接的连接测试失败,MultiPool 会尝试从列表中的下一个池中提供连接。以下位置提供了更多详细信息:http://e-docs.bea.com/wls/docs81/jdbc/programming.html#1023962 (English)。

因此,负载平衡既具有在若干个池间分配负载的长处,又能够在其中一个池不可用时提供一定程度的 Failover 能力。不过,如果采用负载平衡算法,将无法控制 MultiPool 响应来自其列表中不同池的连接请求的顺序及其 Failover 的目标池。

MultiPool 的限制
若要为 MultiPool 启用高可用性算法,需要考虑一些限制和前提条件。http://e-docs.bea.com/wls/docs81/jdbc/programming.html#1068130 (English) 中提供了详细信息。下面是对上述要点的总结:
  • 启用 JDBCConnectionPool 上的 TestConnectionsOnReserve(MultiPool 的一部分),以便 MultiPool 可以检测到连接失败及 Failover 到列表中下一个 JDBC 连接池的必要性。
     
  • MultiPool 的名称在域配置内必须是唯一的。不应以相同名称命名 JDBC 连接池和 MultiPool,因为那样会导致 Failover 故障。
     
  • 如果第一个池中的所有连接都处于使用状态,MultiPool 将不会从列表中的下一个池提供连接。只有在 MultiPool 配置中的 JDBC 连接池的数据库发生故障或某个池被暂停使用时,才会提供 Failover。
    不过,WebLogic Server 8.1 SP3 及更高版本中添加了一个新属性FailoverRequestIfBusy,可以通过该属性配置 MultiPool,从而实现当某个池中的所有连接都处于使用状态时,从列表中的下一个池中提供连接。WebLogic Server 版本 8.1 SP3 及更高版本中针对 MultiPool 的增强功能中对此有更为详尽的描述。
     
  • 当某个应用程序从 MultiPool 中得到了一个连接后,在该应用程序使用该连接期间,将不再为该连接执行 Failover。这是因为 MultiPool 在连接测试期间调用 getConnection() 时检测到连接失败。后面阶段出现的数据库故障需要由应用程序处理,其步骤与用于正常 JDBC 连接池的步骤相同。由于数据库崩溃或关闭时会将事务回滚,因此应用程序需要对这种情况进行处理,并重新执行相关工作。

 

java.sql.SQLException: Pool connect failed :
weblogic.common.ResourceException: testMultiPool(myMultiPool):
weblogic.common.resourcepool.ResourceLimitException: No resources currently available in pool myMultiPool to allocate to applications, 
please increase the size of the pool and retry..
at weblogic.jdbc.common.internal.JDBCUtil.wrapAndThrowResourceException(JDBCUtil.java:160)

阅读全文……




发表评论 发送引用通报