2

Oracle UCP の次の Spring Bean 構成があります。何らかの理由で DB がバウンスされた場合、プールは Web サーバーを再起動せずに自動的に接続を再確立する必要があります。以下の Bean 構成が機能しなかったようです。つまり、接続プールの接続は新しい接続で検証されません。Bean の構成を確認して、再接続するための提案/オプションを提供してください。

<bean id="jpaDataSource" class="oracle.ucp.jdbc.PoolDataSourceFactory"
    factory-method="getPoolDataSource">
    <property name="URL" value="${app.jdbc.url}" />
    <property name="user" value="${app.jdbc.username}" />
    <property name="password" ref="password"/>
    <property name="connectionFactoryClassName" value="oracle.jdbc.pool.OracleDataSource" />
    <property name="connectionPoolName" value="SVC_POOL" />
    <property name="minPoolSize" value="1" />
    <property name="maxPoolSize" value="5" />
    <property name="initialPoolSize" value="1" />
    <property name="validateConnectionOnBorrow" value="true"/>
    <property name="inactiveConnectionTimeout" value="120"/>
</bean>

上記の構成では、DB の再起動後に次の例外が発生します。

Caused by: org.hibernate.TransactionException: JDBC rollback failed
        at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:200)
        at org.hibernate.ejb.TransactionImpl.rollback(TransactionImpl.java:107)
        ... 61 more
Caused by: java.sql.SQLRecoverableException: Closed Connection
        at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:3921)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at oracle.ucp.jdbc.proxy.JDBCConnectionProxyFactory.invoke(JDBCConnectionProxyFactory.java:274)
        at com.sun.proxy.$Proxy24.rollback(Unknown Source)
        at org.hibernate.transaction.JDBCTransaction.rollbackAndResetAutoCommit(JDBCTransaction.java:213)
        at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:192)

編集:

新しいボックスで同じ構成を試しましたが、問題なく動作しました。私のマシンの1つ(ジョブを実行するためにmaven tomcat:runゴールを使用していた場所)でのこの例外についてはわかりません。

4

1 に答える 1

1

ここのドキュメントhttp://docs.oracle.com/cd/E11882_01/java.112/e12265/connect.htm#CHDIDJGHには、Oracleが内部pingを実行してデータベースかどうかを確認すると書かれていますが、SQL setSQLForValidateConnectionを設定してみましたか(弦)

于 2013-10-24T18:07:30.073 に答える