2009-03-03 100 views
0

我正在使用proxool java連接池(版本0.9.1)。一切工作正常,直到我達到最大連接數。如果達到最大連接數的proxool立即引發SQLExcepionProxool最大連接數

java.sql.SQLException: Couldn't get connection because we are at maximum 
connection count (n/n) and there are none available 

當然代替n最大連接數顯示。

爲什麼proxool立即拋出SQLException而不是等待可用連接?當然不是永遠的,但可配置的超時會很好。

我不知道它是否重要,但我在Tomcat J2EE應用程序中使用proxool。 proxool的參數在context.xml中定義,我正在使用Proxool DataSource Support

回答

2

我在proxool郵件列表上問了一個問題,我得到了一個快速,但不幸的消極answer

現在不支持可配置(或任何類型)超時,但有計劃實現此功能。

1

我快速瀏覽了源代碼,這看起來像是ConnectionPool.getConnection的標準行爲。 documentation說同樣的事情。

還有其他的數據庫池庫(如Apache DBCP和C3P0),但是你必須做一些重構來使用它們。另一種方法是自己封裝getConnection方法(或者修改proxool源代碼)並使其按照您想要的方式工作。

0

您可以使用Thread.sleep()來處理它。 當達到最大連接數時,Proxool將引發異常。一旦你發現它,你可以通過調用「Thread.sleep()」等一會兒,希望在這段時間之後,連接將再次可用。

 
public Connection getConnection() throws SQLException { 
    Connection conn = null; 
    while (conn ==null){ 
     try { 
     conn = DriverManager.getConnection("proxool."+connectionPoolAlias); 
     } catch (SQLException e) { 
     e.printStackTrace(); 
     String methodName =e.getStackTrace()[0].getMethodName(); 
     if (methodName.equalsIgnoreCase("checkSimultaneousBuildThrottle") || 
            methodName.equalsIgnoreCase("quickRefuse")){ 
      try{ 
      Thread.sleep(500); 
      }catch(InterruptedException ie){} 
     }else{ 
      throw e; 
     } 
     } 
    } 
    return conn; 
    }