[英]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上建立連接。 我沒有閑置會話的問題,盡管此中介器按消息處理器執行的順序使用(處理成千上萬條消息)
不知道您的情況到底有什么問題,但我希望這可以為您提供幫助:
在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.