2012-03-18 1 views
1

Мы разрабатываем приложение Java SE, и я использую Hibernate для связи с базой данных. Моя база данных - Oracle 11g Express Edition. До сих пор я не использовал пул соединений в приложении. Но раньше я использовал пул соединений c3p0, но у меня никогда не было хорошего понимания.Каковы преимущества и недостатки использования пула соединений в приложении Java SE?

Каковы преимущества и недостатки использования c3p0 в приложении Java SE? Я могу понять, что это полезность, когда дело доходит до приложения Java EE, но Java SE?

Вот моя конфигурация для спящего режима.

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
<session-factory> 
    <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
    <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:XE</property> 
    <property name="hibernate.connection.username">EP</property> 
    <property name="hibernate.connection.password">123</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> 
    <property name="hibernate.default_schema">EP</property> 
    <property name="show_sql">true</property> 

    <property name="hibernate.c3p0.min_size">5</property> 
    <property name="hibernate.c3p0.max_size">20</property> 
    <property name="hibernate.c3p0.timeout">300</property> 
    <property name="hibernate.c3p0.max_statements">50</property> 
    <property name="hibernate.c3p0.idle_test_period">3000</property> 

    <mapping class="app.model.User"></mapping> 
</session-factory> 
</hibernate-configuration> 
+0

Выполнение соединений стоит дорого, а прохождение существующих ранее соединений вместо создания нового для каждого запроса намного дешевле. (Вам будет безразлично, есть ли у вашего db такая легкая нагрузка, это не имеет значения.) Обратите внимание, что мой ответ не имеет ничего общего с SE или EE, потому что проблема не имеет к этому никакого отношения. – bdares

+0

Да, но нужно ли для приложений Java SE иметь несколько подключений одновременно? – Chan

+0

У вас когда-нибудь будет более 1 пользователя за раз? – bdares

ответ

3

Я могу понять, что это польза, когда дело доходит до применения Java EE, но Java SE?

Причина использования пула подключений в Java SE является принципиально такой же как и в случае Java EE. Открытие и закрытие соединений JDBC относительно дорого, а пулы соединений позволяют повторно использовать подключения, которые приложение открыло ранее.

(Очевидно, что если приложение Java SE когда-либо понадобилось использовать одно (или небольшое число) соединений JDBC, то в использовании пула соединений нет никакой окупаемости, но то же самое относится к приложению Java EE с теми же характеристиками.)


Да, но это необходимо для Java SE приложений, чтобы иметь несколько соединений одновременно?

1) Это полностью зависит от приложения и от того, что он делает.

2) Пул соединений также полезен для приложения, которое требует нескольких подключений последовательно ... но только по одному соединению за раз. Например, если соединения создаются и закрываются в сторонней библиотеке.

+0

Что вы думаете о производительности Hibernate? Будет ли больше соединений улучшать производительность Hibernate, поскольку Hibernate использует прокси для ленивой загрузки? – Chan

+0

Это другая проблема. Hibernate решит использовать больше соединений независимо от того, используете ли вы пул соединений. Объединение пулов связано с жизненными циклами соединений, а не с тем, как и как использовать несколько соединений. –

+0

Меня поражает (из вашего вопроса и комментариев), что вы ищете волшебную формулу для улучшения производительности Hibernate, которая оправдывает вас необходимостью понимать технологию. К сожалению, их нет. Существуют различные вещи, которые вы можете * попробовать *, но нет никакой гарантии, что они помогут. Это зависит от того, как ваше приложение использует Hibernate. –

0

Кто-нибудь когда-либо понимал, что приложения Java EE работают на одном Java JVM и некоторые библиотеки дополнений? Это говорит о том, что для приложения Java EE требуются библиотеки, которые заставляют его работать как приложение Java SE, или другими словами: Все контейнеры EE являются приложениями Java SE.

Прежде чем было отмечено, что объединение пулов не связано с SE или EE, оно больше основано на том, что должно делать приложение.

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

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