1

Мы используем поддержку Oracle AQ из весенних данных, чтобы иметь JMS и JDBC на одном источнике данных с локальными транзакциями вместо XA. Общая картина нашей установки в основном описана в справочном руководстве: на orcl: aq-jms-connection-factory: use-local-data-source-transaction = "true" и native-jdbc-extractor = " oracleNativeJdbcExtractor " HibernateTransactionManager (теперь я пытаюсь использовать один источник данных (базовый источник данных DBCP2) для AQ и Hibernate). Я использую компонент JMS верблюда (с использованием диспетчера транзакций hibernate и фабрики подключений с весны) для операций JMS. Все работает, но через пару минут мы получаем указания, что пул соединений JDBC исчерпан, и все застряло. На мониторе пула соединений JDBC мы могли видеть, что все соединения, в которых они используются: что-то явно пропускает соединения. через несколько минут исчерпал бассейн. же пост здесь: https://jira.spring.io/browse/DATAJDBC-8Ошибка утечки JDBC в пуле JDBC при использовании AQ

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. Причина заключается в том, что источник данных по умолчанию не разрешает доступ к основной родной связи. Код, выполняющий извлечение собственного подключения, на самом деле не работает, но продолжает возвращать завернутое соединение, а не родное соединение оракула. Это родное соединение обернуто в прокси-сервер для перехода обратно в завернутое соединение. Когда код Oracle AQ пытается вызвать oracle определенные методы в соединении, прокси-сервер не работает, и AQ прерывает, но утешает соединение. Исправление состоит в том, чтобы разрешить доступ к собственному соединению с помощью accessToUnderlyingConnection = true в вашей конфигурации DBCP.

 Смежные вопросы

  • Нет связанных вопросов^_^