Hibernate 使用AQ时JDBC池上的JDBC连接泄漏

Hibernate 使用AQ时JDBC池上的JDBC连接泄漏,hibernate,connection-pooling,apache-commons-dbcp,oracle-aq,Hibernate,Connection Pooling,Apache Commons Dbcp,Oracle Aq,我们使用spring数据提供的Oracle AQ支持在同一数据源上同时使用JMS和JDBC,使用本地事务而不是XA。 我们的设置基本上是参考手册中描述的:在orcl:aq jms连接工厂上:使用本地数据源transaction=“true”和native jdbc extractor=“oracleNativeJdbcExtractor” HibernateTransactionManager(我现在尝试对AQ和Hibernate使用单一数据源(DBCP2基本数据源)。我使用驼峰JMS组件(通过

我们使用spring数据提供的Oracle AQ支持在同一数据源上同时使用JMS和JDBC,使用本地事务而不是XA。 我们的设置基本上是参考手册中描述的:在orcl:aq jms连接工厂上:使用本地数据源transaction=“true”和native jdbc extractor=“oracleNativeJdbcExtractor” HibernateTransactionManager(我现在尝试对AQ和Hibernate使用单一数据源(DBCP2基本数据源)。我使用驼峰JMS组件(通过使用Hibernate事务管理器和spring的连接工厂)进行JMS操作。 一切正常,但几分钟后,我们发现JDBC连接池已耗尽,一切都卡住了。在JDBC连接池监视器中,我们可以看到所有正在使用的连接:因此,很明显存在泄漏连接的情况。几分钟后,游泳池的水用完了。 同样的帖子在这里:

我们正在使用:
DBCP2基本数据源,
冬眠4,
Spring 4 Hibernate事务管理器,
Spring数据Oracle Aq,
JBoss6 EAP容器。
有什么想法吗?非常感谢。

我们在Tomcat8中遇到了与DBCP相同的问题。原因是默认情况下,数据源不允许访问底层本机连接。执行本机连接提取的代码实际上并没有失败,但会继续返回一个已包装的连接,而不是本机oracle连接。此本机连接被包装在代理中,用于将紧密连接传递回包装的连接。当Oracle AQ代码尝试调用连接上的Oracle特定方法时,此代理失败,AQ中止但泄漏连接。修复方法是允许在DBCP配置中使用accessToUnderlyingConnection=true访问本机连接。

我们在Tomcat 8中遇到了与DBCP相同的问题。原因是默认情况下,数据源不允许访问底层本机连接。执行本机连接提取的代码实际上并没有失败,但会继续返回一个已包装的连接,而不是本机oracle连接。此本机连接被包装在代理中,用于将紧密连接传递回包装的连接。当Oracle AQ代码尝试调用连接上的Oracle特定方法时,此代理失败,AQ中止但泄漏连接。修复方法是允许在DBCP配置中使用accessToUnderlyingConnection=true访问本机连接。

您有任何源代码示例吗?只是添加了源代码。谢谢。你有任何源代码示例吗?只是添加了源代码。谢谢
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.