2017-02-20 6 views
0

私はこのようなWSO2データソースを経由して接続していますように、Oracleデータベースを使用するカスタムWSO2 ESBメディエーターの小さなセットがあります。私は、接続を使用した後oracleでwso2接続プールを使用して非アクティブなセッションを回避する方法はありますか。

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

をこのようにそれを閉じる:

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

すべてのカスタムメディエータは、最後の最後のスコープのbeginメソッドとCloseメソッドで上記のConnectメソッドを使用しています。

は、(メッセージ・プロセッサによって実行される)は、単一のシーケンスで呼び出され、少なくとも2つのカスタムメディエーターがあり、時には5

問題は、キューを通過するメッセージが多い場合、数百があることですデータベース(オラクル)上の非アクティブなセッションの数。 Connectメソッドが非アクティブな接続を取得して使用しようとしないように見えますが、これは接続プールを持つ全体のポイントだと思っていました。

すべてのヘルプははるかに高く評価されます。..

答えて

0

問題は、「アイドル時のテスト」がtrueに設定されていることでした。それをオフにした後、今はすべてが正常です。

1

は、私は現在のOracle DBに接続を取得する必要があるカスタムメディエーターを持っています。 このメディエーターはメッセージプロセッサー(何千ものメッセージを処理する)によって実行されるシーケンスで使用されますが、この非アクティブセッションの問題はありません

あなたのケースで何が間違っているのか正確には分かりませんが、

  • データソースは、WebコンソールでWSO2 ESBで定義されています。
  • 使用ドライバボローにテストがtrue
  • に設定されている
  • (デュアルから1を選択)検証クエリが定義されているoracle.jdbc.OracleDriver
  • アクティブmaxは放棄された正数
  • 削除あります
  • trueに設定されており、当然のことながら、データソースがJavaの一部でJNDIデータソース

として公開され、私はlookuを作ったために直接InitialContextを使用していませんP:私は最終的にはjndiPropertiesはちょうど新しいプロパティ(あるorg.apache.synapse.commons.datasource.DataSourceFinder.find(datasourcenameに、jndiProperties))

を使用し、私は結果セット、文と、接続を閉じる必要があり

これはESB 4.8.1とESB 5でうまく動作します。

+0

おそらくInitialContextを使用して私の問題です、私はそれを試してみません:) – poison64

関連する問題