powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Какого поведения обычно стоит ожидать от Connection Pool?
17 сообщений из 17, страница 1 из 1
Какого поведения обычно стоит ожидать от Connection Pool?
    #39137254
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть некий пул соединений, с которым работа происходит примерно следующим образом:
Код: java
1.
2.
3.
Connection conn = ds.getConnection(); // получаем соединение из пула
// какая-то с ним работа
conn.close(); // возвращаем соединение в пул



При этом у соединения можно выставлять всякие разные свойства, например:
Код: java
1.
2.
3.
conn.setTransactionIsolation
conn.setReadOnly
conn.setAutoCommit


А вопрос такой - какого поведения стоит ожидать от пула по умолчанию:
1. Будут ли сохранятся ли эти свойства у соединения, например, если я вдруг в каком то месте кода говорю, что соединение read only, то во всех других нужно заботиться, чтобы явно переключать этот флаг в false?
2. Или при каждом возврате обратно в пул возвращаются в исходные значения, таким образом всегда при получении соединения из пула можно ориентироваться на некие значения по умолчанию и не переживать, что какой то другой код мог их переключить в иное значение?

Или все вендоры, кто в лес, кто по дрова, везде по разному, или проверяй свой?
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39137269
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нормальный пул должен сам ставить подобные состояния в ожидаемые значения.

hikaricp, например, когда делаешь close() проверяет как минимум autoCommit, и если он не тот что надо, то ставит его в нужное значение. Остальные свойства - не пробовал, но по идее тоже должен. Если вы попробуете - отпишите сюда о результатах.
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39137273
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо, конечно, заглянуть в JDBC спеку, но на сколько я понимаю, там ничего конкретного на эту тему нет.
Пулы, не сильно заморачиваются с тем чтобы самостоятельно менять что-то в Connection, так как это может повлиять на состояние данных. Поэтому клиентский код сам заботится об этих атрибутах. Пул разве что дефолтные значения может установить при создании новых соединений.

Именно поэтому чтобы ничего не забыть, лучше навернуть какой-нибудь TransactionManager, который в начале транзакции выставит правильные атрибуты соединения.
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39137508
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вдруг кому интересно, то для пула из IBM WAS7 экспериментальным путем установил следующее:
При получении соединения из пула оно всегда приходит, со значениями Connection.TRANSACTION_READ_COMMITTED и установленным AutoCommit, независимо от того, что с ним делали при предыдущем использовании. О чем он каждый раз честно рапортует в SystemOut:
LocalTranCoor W WLTC0033W: Resource %datasourcename% rolled back in cleanup of LocalTransactionContainment.

Дополнительно выяснил, что, как минимум для случаев работы с соединением в рамках потока обработки http запроса возврат соединения в пул происходит не в момент conn.close(), а в какой то другой, после завершения обработки запроса. Т.к. в случае если max размер пула установлен в 10, то на 11ой итерации из ds.getConnection/conn.close() все начинает висеть на ожидании соединения. Да и похоже сам вызов conn.close() совсем не обязателен, по окончании обработки http запроса оно само возвращается в пул.
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39137649
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir
Код: java
1.
2.
3.
conn.setTransactionIsolation
conn.setReadOnly
conn.setAutoCommit


было б что интересного.
Все 3 трогать не рекомендуется.
Автокоммит выключить.
Бывают исключения). Но редко.
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39137652
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirно всегда приходит, со значениями Connection.TRANSACTION_READ_COMMITTED
это default для основных субд
just_vladimirи установленным AutoCommit
это странно.
Т.е. я даже роллбэк не смогу сделать, он сам коммитит?
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39137675
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirЕсли вдруг кому интересно, то для пула из IBM WAS7 экспериментальным путем установил следующее:
При получении соединения из пула оно всегда приходит, со значениями Connection.TRANSACTION_READ_COMMITTED и установленным AutoCommit, независимо от того, что с ним делали при предыдущем использовании.

Ну, нормалек! Наверняка оно еще где-то конфигурируется, и если надо, то можно подкрутить настройки по умолчанию, и будет отдавать то, что вы хотите.


just_vladimirДополнительно выяснил, что, как минимум для случаев работы с соединением в рамках потока обработки http запроса возврат соединения в пул происходит не в момент conn.close(), а в какой то другой, после завершения обработки запроса. Т.к. в случае если max размер пула установлен в 10, то на 11ой итерации из ds.getConnection/conn.close() все начинает висеть на ожидании соединения. Да и похоже сам вызов conn.close() совсем не обязателен, по окончании обработки http запроса оно само возвращается в пул.

Тут хз. Я не такой большой спец, но выглядит как вопрос, требующий проработки. Если бы у меня такое возникло, то мне казалось бы, что это какое-то странное поведение, и я бы пытался понять, что происходит.
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39137911
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123just_vladimir
Код: java
1.
2.
3.
conn.setTransactionIsolation
conn.setReadOnly
conn.setAutoCommit


было б что интересного.
Все 3 трогать не рекомендуется.
Автокоммит выключить.
Бывают исключения). Но редко.
C учетом того, что readonly ни Oracle не умеет, ни сама WebSphere не поддерживает, то на него можно забить.
Уровень изоляции транзакции доступны только TRANSACTION_READ_COMMITTED и TRANSACTION_SERIALIZABLE, остальные не поддерживаются и в итоге действительно остается только автокоммит...

Petro123Т.е. я даже роллбэк не смогу сделать, он сам коммитит?
Ага, именно так, идея этой штуки в том, что в тривиальных случаях это избавляет от лишнего бойлерплейт кода. В целом согласен, что удобней иметь по умолчанию отключенным, но для новых соединений это явно оговорено в доке:
http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html When a connection is created, it is in auto-commit mode. This means that each individual SQL statement is treated as a transaction and is automatically committed right after it is executed. (To be more precise, the default is for a SQL statement to be committed when it is completed, not when it is executed. A statement is completed when all of its result sets and update counts have been retrieved. In almost all cases, however, a statement is completed, and therefore committed, right after it is executed.)

chabapokjust_vladimirЕсли вдруг кому интересно, то для пула из IBM WAS7 экспериментальным путем установил следующее:
При получении соединения из пула оно всегда приходит, со значениями Connection.TRANSACTION_READ_COMMITTED и установленным AutoCommit, независимо от того, что с ним делали при предыдущем использовании.
Ну, нормалек! Наверняка оно еще где-то конфигурируется, и если надо, то можно подкрутить настройки по умолчанию, и будет отдавать то, что вы хотите.
Скорее всего да, но где то глубоко, либо через custom properties, но явно не где то на поверхности...


chabapokjust_vladimirДополнительно выяснил, что, как минимум для случаев работы с соединением в рамках потока обработки http запроса возврат соединения в пул происходит не в момент conn.close(), а в какой то другой, после завершения обработки запроса. Т.к. в случае если max размер пула установлен в 10, то на 11ой итерации из ds.getConnection/conn.close() все начинает висеть на ожидании соединения. Да и похоже сам вызов conn.close() совсем не обязателен, по окончании обработки http запроса оно само возвращается в пул.
Тут хз. Я не такой большой спец, но выглядит как вопрос, требующий проработки. Если бы у меня такое возникло, то мне казалось бы, что это какое-то странное поведение, и я бы пытался понять, что происходит.
Имхо, в целом понятно что происходит. Подозреваю, что если открыть новый поток и проделать тоже самое в нем, то там возврат в пул уже будет только по conn.close и сразу же, может даже проверю чуть позже.
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39138025
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir,
ну а я о чём.
Не ломать голову над этими параметрами (низкоуровневыми\системными).
- автокоммит сделан для молодых домохозяек и Hello World.
Уже на втором приложении это мешает и надо отключать.
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39138063
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
просто у меня есть очень много read only обращений, причем таких, что вообще пофиг на всевозможные dirty read и т.д. в связи с чем закралась идея, а не попытаться ли мне с экономить на этом деле, но как оказалось все тлен, ни read only, ни read uncommited не поставить, а автокоммит вообще тут как то сбоку.
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39138091
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www-01.ibm.com/support/docview.wss?uid=swg21600078 There is no data source custom property for autoCommit. To set this property in WebSphere Application Server, you need to call setAutoCommit on the connection, as shown above.
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39138101
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirв связи с чем закралась идея
классика жанра - оптимизация ради оптимизации.
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39138373
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirпросто у меня есть очень много read only обращенийНу так заберите одно соединение из пула и не возвращайте, ибо нефиг.
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39138430
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovjust_vladimirпросто у меня есть очень много read only обращенийНу так заберите одно соединение из пула и не возвращайте, ибо нефиг.
Идею не понял, в чем смысл? Как выяснилось это свойство все равно никем не поддерживается...
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39138449
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идея в том, что соединение возвращается в пул тогда, когда оно больше не требуется.
Если у вас "много запросов ...", то соединение требуется часто или почти всегда.
В этой ситуации "забрать и настроить один раз" - оптимальное решение.
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39138471
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,
получить/вернуть соединение в пул ничего не стоит, особо не с экономишь на этом. Хотя в общем то у нас создается ThreadLocal переменная с соединением на каждый Request требующий работу с БД, думаю дополнительно тут больше ничего уже не отыграть...
Пока самое существенное, что удалось отыграть это изменение FetchSize, если заранее знаем, что предстоит фетчить много записей.
...
Рейтинг: 0 / 0
Какого поведения обычно стоит ожидать от Connection Pool?
    #39138494
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovjust_vladimirпросто у меня есть очень много read only обращенийНу так заберите одно соединение из пула и не возвращайте, ибо нефиг.

В общем случае - совет вредный.
tcp-коннекшен к базе рвется - и пипец. Например хост с базой перегрузят, или что-то с сетью будет.
Годится только когда и база и приложение локально крутится и все бегает через 127.0.0.1
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Какого поведения обычно стоит ожидать от Connection Pool?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]