2011-09-08 67 views
0

我在struts應用程序中使用連接池與SharedPoolDataSource。應用程序用戶通過用戶界面動態傳遞連接參數。我創建了DriverAdapterCPDS的對象,並將它分配給SharedPoolDataSource obj道具。連接池顯示數據庫中的INACTIVE連接

SharedPoolDataSource tds = new SharedPoolDataSource(); 
      tds.setConnectionPoolDataSource(cpds); 
      tds.setMaxActive(5); 
      tds.setMaxIdle(2); 
      tds.setMaxWait(50); 
      tds.setTestOnBorrow(true); 
      tds.setValidationQuery(validationQuery); 

我將它存儲在DBUtil類的哈希表中,公司名稱作爲關鍵字。像這個應用程序用戶分配很多與每個公司相關的數據庫詳細信息。

dbUtil.DSht.put(comp, tds); 

從另一個程序(Swing App)用戶發送公司名稱。所以我需要獲取公司的數據源對象,並在該數據庫上執行分配給用戶的查詢。並將結果作爲對象返回。

所以,我這樣寫

public static Connection getClientConnection(String comp){ 
    Connection con = null; 
    try{ 
     if(!dbUtil.DSht.contains(comp)){ 
      loadClientDataSource(comp); 
     } 
     DataSource ds = (DataSource)dbUtil.DSht.get(comp);    
     Idle:"+bds.getNumIdle()); 
     con = ds.getConnection(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
     throw new DBUtilException("Unable to get the client connection object. Cause: "+e.getMessage()); 
    }   
    return con; 
} 

功能關閉數據庫連接

public static void closeConnection(Connection con){ 
    try{ 
     if(con != null) 
      con.close(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    }   
} 

我打電話這個closeConnection功能finally塊

try{ 
     con = DBUtil.getClientConnection(comp); 
     pstmt = con.prepareStatement(sqlQuery);    
     pstmt.executeQuery(); 
    }catch(SQLException sqle) { 
     sqle.printStackTrace(); 
     throw new QueryException("Unable to add query. Cause: "+sqle.getMessage()); 
    }finally{ 
     DBUtil.closeStatement(pstmt); 
     DBUtil.closeConnection(con); 
    } 

是有沒有使用conn的問題彙集。使用這個應用程序數據庫後顯示很多INACTIVE連接關聯到我的電腦。即使在關閉連接後,它也是如此。我只爲數據庫設置了2個MAXIDLE連接。問題是什麼。爲什麼它顯示了很多INACTIVE連接。如果我們把數據源放在哈希表中,是否有任何問題。

請幫幫我。

回答

1

不用擔心,會話處於INACTIVE狀態不是異常。檢查http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:914029001168

+0

感謝您的快速回復,我應該怎麼知道我可以通過Java持有的連接? –

+0

這取決於您的連接池配置,應用程序連接的使用情況以及會話參數,例如會話的最長非活動時間。 – Adi

+0

我在getConnection()方法中從hashtable獲取數據源時發現問題。它應該是dbUtil.DSht.containsKey(compcode)而不是dbUtil.DSht.contains(compcode)。 –