Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / jdbc, hibernate и пул соединений к Oracle / 6 сообщений из 6, страница 1 из 1
24.07.2014, 20:24
    #38705421
lLocust
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc, hibernate и пул соединений к Oracle
День добрый!

Потихоньку разбираюсь с web программированием и столкнулся с некоторым концептуальным недопониманием использования пула соединений к СУБД.

Т.к. пул соединений предполагает что неизвестно какая сессия к СУБД будет получена текущим пользователем для работы, то использование временных таблиц в данном случае невозможно. Правильно?
Так же, как я понимаю, невозможно использовать блокировку документа для эксклюзивного доступа к нему.

Если как-то best practics для, скажем, такой ситуации:
мне нужно открыть документ для его изменений (при этом я должен быть уверен что никто больше его не поменяет).
Я вношу в документ некоторые изменения (меняю его шапку или может даже наполнение другими документами), и только при сохранении все изменения накатываются в БД (хотелось бы что бы вносимые мной изменения так же находились в БД для возможности join`а справочников или других операций).
После того как я его закрыл документ доступен другим пользователям.

или этот процесс стоит организовать по-другому?
...
Рейтинг: 0 / 0
24.07.2014, 21:10
    #38705441
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc, hibernate и пул соединений к Oracle
В многопользовательских приложениях это реализуется через Optimistic Lock. Каждый апдейт документа инкрементирует версию.
Если сохраняемая версия окажется старее, чем текущая в базе, то будет ошибка блокировки. Такое решение позволяет избежать длинных транзакций в многопользовательской системе. Но если у вас intranet приложение. Количество пользователей ограничено, а БД дорогая и модная, тогда уже можно смотреть на альтернативные возможности этой БД.
...
Рейтинг: 0 / 0
24.07.2014, 22:13
    #38705464
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc, hibernate и пул соединений к Oracle
On 24.07.2014 21:24, lLocust wrote:

> Потихоньку разбираюсь с web программированием и столкнулся с некоторым
> концептуальным недопониманием использования пула соединений к СУБД.

Интересное начало.
Казалось бы, причём тут WEB?


> Т.к. пул соединений предполагает что неизвестно какая сессия к СУБД
> будет получена текущим пользователем для работы, то использование
> временных таблиц в данном случае невозможно. Правильно?

Неправильно.

> Так же, как я понимаю, невозможно использовать блокировку документа для
> эксклюзивного доступа к нему.

Понимаешь неправильно.


> Если как-то best practics для, скажем, такой ситуации:
> мне нужно открыть документ для его изменений (при этом я должен быть
> уверен что никто больше его не поменяет).

Есть так называемые "блокировки уровня приложения", они бы подошли тут
максимально. Это, в общем, блокировки сущностей уровня приложения,
которые выполняются тоже на уровне приложения. Т.е. ты их реализуешь
сам. У тебя есть сессии, пользователи, и объекты (документы), так вот,
ты в каке-то место записываешь, что пользователь такой-то в такой-то
сессии заблокировал такой-то документ(ы). Соответственно, при каждом
изменении проверяешь, что этот пользователь в этой сессии имеет блокировку.

> Я вношу в документ некоторые изменения (меняю его шапку или может даже
> наполнение другими документами), и только при сохранении все изменения
> накатываются в БД (хотелось бы что бы вносимые мной изменения так же
> находились в БД для возможности join`а справочников или других операций).
> После того как я его закрыл документ доступен другим пользователям.
> или этот процесс стоит организовать по-другому?

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


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.07.2014, 23:35
    #38705488
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc, hibernate и пул соединений к Oracle
lLocustмне нужно открыть документ для его изменений (при этом я должен быть уверен что никто больше его не поменяет).
над этим подумай.
Раньше 1С тоже хотела....ещё круче - всю таблицу заблокировать.
...
Рейтинг: 0 / 0
25.07.2014, 11:07
    #38705716
lLocust
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc, hibernate и пул соединений к Oracle
Blazkowicz,
Спасибо.

Petro123,
Вы тоже намекаете на оптимистическую блокировку?

MasterZiv> Т.к. пул соединений предполагает что неизвестно какая сессия к СУБД
> будет получена текущим пользователем для работы, то использование
> временных таблиц в данном случае невозможно. Правильно?

Неправильно.

> Так же, как я понимаю, невозможно использовать блокировку документа для
> эксклюзивного доступа к нему.

Понимаешь неправильно.
А что именно я не правильно понимаю? Ведь если я не ошибаюсь, то если я что-то запишу во временные таблицы (или заблокирую запись), то либо должен использовать длинные транзакции (т.е. удерживать соединение с БД за собой) либо есть вероятность что это соединение будет отдано другому пользователю....

авторЕсть так называемые "блокировки уровня приложения", они бы подошли тут максимально. Это, в общем, блокировки сущностей уровня приложения, которые выполняются тоже на уровне приложения. Т.е. ты их реализуешь сам. У тебя есть сессии, пользователи, и объекты (документы), так вот, ты в каке-то место записываешь, что пользователь такой-то в такой-то
сессии заблокировал такой-то документ(ы). Соответственно, при каждом изменении проверяешь, что этот пользователь в этой сессии имеет блокировку.
Как вариант, спасибо.

автор> Я вношу в документ некоторые изменения (меняю его шапку или может даже
> наполнение другими документами), и только при сохранении все изменения
> накатываются в БД (хотелось бы что бы вносимые мной изменения так же
> находились в БД для возможности join`а справочников или других операций).
> После того как я его закрыл документ доступен другим пользователям.
> или этот процесс стоит организовать по-другому?

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

Вообщем как понял есть 2 основных направления обеспечения конкурентного доступа при использовании пула соединений:
- Оптимистическая блокировка
- Реализация блокировок на уровне приложения
Угу?
...
Рейтинг: 0 / 0
25.07.2014, 11:43
    #38705750
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
jdbc, hibernate и пул соединений к Oracle
lLocust,
угу - намекал.
Бери шире, технологии веб - вообще нет конкурентного доступа.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / jdbc, hibernate и пул соединений к Oracle / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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