簡體   English   中英

如何在Oracle上使用wso2連接池來避免不活動的會話?

[英]How to avoid inactive sessions using wso2 connection pool on oracle?

我有一小部分自定義WSO2 ESB中介程序,這些中介程序使用我通過WSO2數據源連接到的oracle數據庫,如下所示:

  private void Connect(boolean isRetry) throws SQLException { DataSource ds = null; try { Hashtable environment = new Hashtable(); environment.put("java.naming.factory.initial", "org.wso2.carbon.tomcat.jndi.CarbonJavaURLContextFactory"); Context initContext = new InitialContext(environment); ds = (DataSource)initContext.lookup("jndi/kernel"); } catch (NamingException e) { throw new SQLException("Connection pool exception", e); } // Nawiazanie polaczenia this.connection = ds.getConnection(); this.connection.setAutoCommit(false); } 

使用連接后,我將如下關閉它:

  public void Close() throws SQLException { try { if (this.connection != null) { this.connection.close(); this.connection = null; } } catch (SQLException e) { System.out.println(" @@ Failed to close the connection!"); e.printStackTrace(); throw e; } } 

每個自定義介體都在beginning范圍的結尾處的begin和Close方法上使用上述Connect方法。

在一個序列中(由消息處理器執行),至少有2個自定義中介程序被調用,有時甚至是5個。

問題是,當有大量消息通過隊列時,數據庫(oracle)上有數百個非活動會話。 看起來Connect方法不會嘗試獲取不活動的連接並使用它,我認為這是擁有連接池的全部要點。

任何幫助都感激不盡..

我目前有一個自定義中介程序,需要在oracle db上建立連接。 我沒有閑置會話的問題,盡管此中介器按消息處理器執行的順序使用(處理成千上萬條消息)

不知道您的情況到底有什么問題,但我希望這可以為您提供幫助:

  • 數據源在WSO2 ESB中通過Web控制台定義。
  • 使用的驅動程序是oracle.jdbc.OracleDriver
  • 定義了一個驗證查詢(從雙重查詢中選擇1個)
  • 借閱測試設置為true
  • 最大活躍是一個正數
  • 刪除廢棄設置為true
  • 當然,數據源作為JNDI數據源公開

在Java部分中,我不直接使用InitialContext進行查找:我使用org.apache.synapse.commons.datasource.DataSourceFinder.find(dataSourceName,jndiProperties),其中jndiProperties只是一個新的Properties()

最后,我只需要關閉結果集,語句和連接

它與ESB 4.8.1和ESB 5一起很好地工作

問題是我將“空閑測試”設置為true。 關閉它之后,現在一切都很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM