Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Hibernate. Как отключить connection pooling?


Автор: ochnev 15.4.2008, 17:56
Как полностью отключить connection pooling в Hibernate?
Мне необходимо, чтобы каждый раз коннект к базе производился заново.

Пока нагрузка на сайт не вырастет, не желаю использовать пул. Достали непредсказуемые отвалы по таймауту.

Автор: tux 16.4.2008, 06:56
Можно создавать соединение самому и для получения сессии использовать метод http://www.hibernate.org/hib_docs/v3/api/org/hibernate/SessionFactory.html#openSession(java.sql.Connection). Только учитывай, что при создании соединения для каждой операции значительно упадет производительность.

Автор: ochnev 16.4.2008, 10:39
Цитата(tux @ 16.4.2008,  06:56)
Можно создавать соединение самому и для получения сессии использовать метод http://www.hibernate.org/hib_docs/v3/api/org/hibernate/SessionFactory.html#openSession(java.sql.Connection).


В javadocs про этот метод написано: "Hibernate will not be able to track any statements you might have executed in the same transaction."
Это значит, что транзакции фактически работать не будут?

Цитата(tux @ 16.4.2008,  06:56)
Только учитывай, что при создании соединения для каждой операции значительно упадет производительность.


Мне не для каждой операции, мне для нескольких, то есть для одной транзакции.

P.S.:
А через hibernate.cfg.xml есть какой-нибудь способ отключить pooling, чтобы ничего не менять в коде?

Автор: tux 16.4.2008, 11:56
Цитата(ochnev @  16.4.2008,  10:39 Найти цитируемый пост)
Это значит, что транзакции фактически работать не будут?

Hibernate не в силах отключить работу транзакций. smile Это значит, что Hibernate не сможет отслеживать другие операции, выполняемые с использованием того же соединения.

Цитата(ochnev @  16.4.2008,  10:39 Найти цитируемый пост)
Мне не для каждой операции, мне для нескольких, то есть для одной транзакции.

Я имею ввиду операции, которые пользователь выполняет. Фактически каждый клик пользователя будет вызывать создание соединения. Работал бы ты с Ораклом, производительность упала бы в разы, но в MySQL вроде бы соединение создается быстро. В любом случае это неправильная практика, лучше все-таки добить проблему с отвалом соединений.

Цитата(ochnev @  16.4.2008,  10:39 Найти цитируемый пост)
А через hibernate.cfg.xml есть какой-нибудь способ отключить pooling, чтобы ничего не менять в коде?

Если отключить DBCP и C3P0, Hibernate будет использовать свой встроенный пул, он никак не отключается.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)