2009-07-13 2 views
2

Мы пытаемся реализовать пул соединений Oracle с помощью Spring Framework. Мы используем метод объединения соединений DBCP. Однако интеграция между DBCP и весной не идет так хорошо.Oracle - соединение Пул с пружинным каркасом

Проблема, с которой мы сталкиваемся, заключается в том, что DBCP возвращает объект PoolableConnections, в то время как Oracle ожидает OracleConnection Objects. (Throws ClassCastException)

Похоже, эта проблема была решена в Oracle 11g. Однако мне любопытно, как другие реализовали пул соединений Oracle с использованием Spring Framework для Oracle 10g (с использованием TOMCAT).

Мы используем Ibatis в качестве рамки ORM.

Уверен, что есть способ. любая помощь приветствуется.

ответ

15

Я бы воспользовался решением, поставляемым в комплекте с Oracles, которое включено в их баночки ojdbc.Более старый путь был с классом 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-out устарело и рекомендуется использовать Oracle UCP: http://stackoverflow.com/questions/1427890/oracledatasource-vs-oracle-ucp-pooldatasource Достаточно смешно, он использует OracleDataSource внутренне через фабрику и вообще не упоминается там ... Дон Не знаю, что произойдет, если этот метод уничтожения здесь просто отсутствует. – virgo47

4

Я использую C3PO для установления соединения. Он также имеет преимущество для объединения пулов соединений для вас. Просто укажите источник данных bean типа например. com.mchange.v2.c3p0.ComboPooledDataSource (или аналогичный) через ваши файлы конфигурации Spring. Прежде чем я столкнулся с проблемами с пулом соединений, я даже использовал один из Spring (DriverManagerDataSource), который не рекомендуется для использования в производстве, потому что он фактически не выполняет объединение пулов.

Вот пример конфигурации пружин.

<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"/> 

Spring затем впрыскивает DATASOURCE фасоль в спящий режим, и все хорошо. Вам также необходимо иметь банку файл c3po на вашем пути к классам ...

+0

пожалуйста, вы можете предоставить некоторые ссылки для более подробной информации об этом. Простой пример конфигурации - отличный указатель. – Priyank

+0

hibernate также использует c3p0 –

+0

yes right, но вы должны настроить его, например ... – raoulsson

-1

Я также сталкиваются с той же проблемой, как вы .. так как я использовал Oracle Native пул соединений .. это работает гладко ..

вот ссылка для получения более подробной информации http://www.lambdaprobe.org/d/oracle.shtml

Спасибо! Pratik

+1

Эта ссылка была настолько информативной, что я плакал. Пожалуйста, удалите этот ответ – branchgabriel

+3

... и домен с этого момента истек. –

3

Вы должны не, используя свой собственный пул, если это то, что вы используете. Tomcat уже делает это для вас, вместо этого, определяя источник данных в Tomcat и использую вашу инфраструктуру ORM (когда вы определяете свой источник данных Tomcat, вы можете указать здесь конфигурации пула).

Если вы могли бы опубликовать некоторые фрагменты кода, в частности соответствующие контекстные конфигурации Spring, я могу помочь вам предоставить вам, как вы это сделаете.

Вот Tomcat документации, которая показывает вам, как именно вы делаете что:

Кстати, Tomcat использует ГСБД также, и это лучше полагаться на JNDI, как это делает ваш код более переносимый (от одной среды к другой - например, dev для постановки на производство или даже через серверы приложений - например, в WebSphere, WebLogic и т. д.).

0

Вместо использования SimpleNativeJdbcExtractor использовать CommonsDbcpNativeJdbcExtractor, чтобы получить нативный соединение. оно работает.

При работе с простым пулом соединений, который обертывает соединения, а не с заявлениями, часто бывает достаточно SimpleNativeJdbcExtractor. Однако некоторые пулы (например, DBCP от Jakarta Commons) переносят все объекты JDBC, которые они возвращают: поэтому вам нужно использовать с ними определенный NativeJdbcExtractor (например, CommonsDbcpNativeJdbcExtractor).

Нажмите здесь [http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/jdbc/support/nativejdbc/NativeJdbcExtractor.html]

+0

Не совсем понятно, что вы просите. Попробуйте переписать этот вопрос. –

+0

* Я думаю, вы имеете в виду этот ответ –