1

SpringデータのOracle AQサポートを使用して、XAではなくローカルトランザクションを使用して、同じデータソースにJMSとJDBCの両方を使用します。 私たちの設定の大きな部分は、基本的にリファレンス・マニュアルに記載されています。orcl:aq-jms-connection-factory:use-local-data-source-transaction = "true"およびnative-jdbc-extractor = " oracleNativeJdbcExtractor " HibernateTransactionManager(AQとHibernateのために単一のDataSource(DBCP2基本データソース)を使用しようとしています)JMS操作のためにcamel JMSコンポーネントを使用しています(春からhibernateトランザクションマネージャと接続ファクトリを使用しています)。 すべて動作していますが、数分後にJDBC接続プールが使い果たされ、すべてが停止しているという兆候が表示されます。 JDBC接続プールモニタでは、すべての接続が使用中であることがわかりました。そのため、明らかに接続が漏れていました。数分後に疲れたプール。 同じポストはここにある:https://jira.spring.io/browse/DATAJDBC-8AQ使用時のJDBCプールでのJDBC接続リーク

We are using: 
DBCP2 Basic datasource, 
Hibernate 4, 
Spring 4 Hibernate Transaction Manager, 
Spring Data Oracle Aq, 
JBOSS 6 EAP container. 

<orcl:aq-jms-connection-factory id="connectionFactory" 
     use-local-data-source-transaction="true" 
     native-jdbc-extractor="dbcpNativeJdbcExtractor" 1 
     data-source="dataSource" /> 

    <bean id="dbcpNativeJdbcExtractor" 
     class="org.springframework.jdbc.support.nativejdbc. OracleJdbc4NativeJdbcExtractor"/> 

    <bean id="dbcpDataSource" class="org.apache.commons.dbcp.BasicDataSource" 
      destroy-method="close"> 
     <property name="driverClassName" value="${jdbc.driverClassName}" /> 
     <property name="url" value="${jdbc.url}" /> 
     <property name="username" value="${jdbc.username}" /> 
     <property name="password" value="${jdbc.password}" /> 
    </bean> 

<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

<bean id="jms" class="org.apache.camel.component.jms.JmsComponent"> 
     <property name="connectionFactory" ref="connectionFactory"/> 
     <property name="transacted" value="true"/> 
     <property name="transactionManager" ref="txManager"/> 
    </bean> 

Any ideas? Thank you. 
+1

ソースコードの例はありますか? – ibre5041

+0

にソースコードが追加されました。ありがとう。 – integrationarchitect

答えて

0

は、我々は、Tomcat 8にDBCPと同じ問題を抱えていた理由は、デフォルトでは、データ・ソースは、基本となるネイティブ接続へのアクセスを許可しないということです。ネイティブ接続抽出を実行するコードは実際には失敗しませんが、ネイティブのOracle接続ではなくラップされた接続が返され続けます。このネイティブ接続は、ラップされた接続に近づ​​けるためにプロキシでラップされます。 Oracle AQコードが接続上でOracle固有のメソッドをコールしようとすると、このプロキシは失敗し、AQはアボートしても接続をリークします。 DBCP構成でaccessToUnderlyingConnection = trueを使用して、ネイティブ接続にアクセスできるようにすることです。