2009-07-13 15 views
2

Spring Frameworkを使用してOracle接続プーリングを実装しようとしています。 DBCP接続プーリング方式を使用しています。しかし、DBCPとバネの統合はうまく機能しません。Oracle接続Springフレームワークによるプール

私たちが直面する問題は、OracleがOracleConnectionオブジェクトを予期している間に、DBCPがPoolableConnectionsオブジェクトを戻すという問題です。 (ClassCastExceptionをスローします)

この問題はOracle 11gで処理されたようです。しかし、私は他の人たちがOracle 10g(TOMCATの使用)用のSpringフレームワークを使用してOracle接続プーリングを実装しているかどうか不思議です。

私たちはORMフレームワークとしてIbatisを使用します。

方法があると確信しています。どんな助けもありがとう。

答えて

15

ojdbc jarに含まれているOracles提供のソリューションを使用します。以前の方法は、クラスでOracleConnectionPoolDataSourceでしたが、通常のパラメータOracleDataSourceにパラメータを設定し、接続プーリングを取得できます。ここで

は、春にそれを行う方法です:

<bean id="datasource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close"> 
    <property name="connectionCachingEnabled" value="true" /> 
    <property name="URL" value="${jdbc.url}" /> 
    ...all your connection properties 
    <property name="connectionCacheProperties"> 
     <props merge="default"> 
     <prop key="MinLimit>3</prop> 
     <prop key="MaxLimit">20</prop> 
     </props> 
    </property> 
</bean> 
+0

そこにはタイプミスがあります。 Bob

+0

現在、destroy-method closeは推奨されていません。また、 virgo47

4

私はC3POを使用して接続を確立します。また、接続プーリングを行う利点もあります。例えば、データソースのbeanを定義してください。 com.mchange.v2.c3p0.ComboPooledDataSource(またはそれに類するもの)をバネの設定ファイルを使って読み込みます。接続プーリングで問題が発生する前に、実際に接続プーリングを行っていないため、私は春(DriverManagerDataSource)の1つをプロダクション用に使用することはしませんでした。

ここでは、スプリング設定の例を示します。

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/> 
    <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:XE"/> 
    <property name="user" value="username"/> 
    <property name="password" value="secret"/> 
    <property name="minPoolSize" value="5"/> 
    <property name="maxPoolSize" value="20"/> 
    <property name="acquireIncrement" value="1"/> 
    <property name="idleConnectionTestPeriod" value="100"/> 
    <property name="maxStatements" value="0"/> 
    <property name="checkoutTimeout" value="60000"/> 

スプリングその後休止状態へのdataSource Beanを注入し、すべてがよくあります。また

...それがスムーズに動作します。..ので、私は、Oracleのネイティブ接続プールを使用..あなたがそうであるように、私も同じ問題に直面していた

+0

あなたは、いくつかのリンクを提供してくださいすることができますこれの詳細については、設定のための簡単な例は素晴らしいポインタです。 – Priyank

+0

休止状態でもc3p0 –

+0

はい、使用しますが、設定する必要があります。 – raoulsson

-1

...あなたのクラスパスにC3POのjarファイルを持っている必要がありますここに詳細のリンクがあります http://www.lambdaprobe.org/d/oracle.shtml

ありがとうございます! Pratik

+1

そのリンクは私が泣いたのでとても有益でした。この回答を削除することを検討してください – branchgabriel

+3

...そしてドメインは有効期限が切れています。 –

3

あなたが使用している場合は、独自のプーリングを実装する必要があります。 Tomcatは既にあなたのために、Tomcatでデータソースを定義し、ORMフレームワークでそれを使用しています(Tomcatデータソースを定義するときにそこでプール設定を指定できます)。

いくつかのコードスニペット、具体的には関連するSpringコンテキスト設定を投稿できる場合は、これをどのように行うかをお手伝いします。

ここことを正確にあなたが行う方法を示しますTomcatのドキュメントです:

。なお、TomcatはまたDBCPを使用し、それはあなたのコードをより作るとして、それは、JNDIに依存する方が良いでしょうが、ポータル(ある環境から別の環境、例えば、開発環境へのステージング、またはWebSphere、WebLogicなどのアプリケーションサーバを経由して)。

0

代わりのネイティブ接続を取得するためにCommonsDbcpNativeJdbcExtractorを使用SimpleNativeJdbcExtractorを使用します。できます。

SimpleNativeJdbcExtractorでは、接続をラップしてステートメントをラップしない単純な接続プールで作業する場合は、しばしばSimpleNativeJdbcExtractorで十分です。ただし、一部のプール(ジャカルタのCommons DBCPなど)は、返されるすべてのJDBCオブジェクトをラップします。したがって、特定のNativeJdbcExtractor(CommonsDbcpNativeJdbcExtractorなど)を使用する必要があります。ここ

をクリックし、[http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/jdbc/support/nativejdbc/NativeJdbcExtractor.html]

+0

あなたが求めていることはまったく明確ではありません。この質問を書き直してください。 –

+0

*あなたはこの答えを意味すると思います –