powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate разрешение конфликтных ситуаций?
25 сообщений из 108, страница 4 из 5
Hibernate разрешение конфликтных ситуаций?
    #39193540
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lor2
Код: java
1.
@Transactional(isolation = Isolation.SERIALIZABLE)


я бы сервер не трогал.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39193552
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lor2при пессимистической блокировке если у меня запускается мешок транзакций, то несколько исполняются в очереди, а остальные сыпятся с ошибкой:
18835378
Я вам первым же сообщением написал что пессимистик не годится для высоких нагрузок. Сколько у тебя продавцов томатов что они усердно за них конкурируют? Если ты highload пишешь для высокой конкурентности, то тебе блокировки вообще не подходят ни в каком виде.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39193574
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123у тебя логика должна - наложили блок, работаем, соммит (сняли)
lor2,
проверь, где это у тебя происходит?
- в десктопе - сиди в локе хоть целый день.
- в вебе обычно это в сервлете или ещё где, за 0,01 секунды!
imho
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39194075
lor2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczlor2при пессимистической блокировке если у меня запускается мешок транзакций, то несколько исполняются в очереди, а остальные сыпятся с ошибкой:
18835378
Я вам первым же сообщением написал что пессимистик не годится для высоких нагрузок. Сколько у тебя продавцов томатов что они усердно за них конкурируют? Если ты highload пишешь для высокой конкурентности, то тебе блокировки вообще не подходят ни в каком виде.
да это всё ясно конечно же. я о том, чтоб разобраться в нюансах работы. а вообще, у меня товарищ есть скулевец, он вообще лютый проповедник-пессимист. для него опт. принципиально не существует. ну видимо, мнений много разных.

в практике у меня продавцов томатов не так уж и много, но вероятность что забронят больше, чем есть на складе свободного (если не морочиться блокировками) есть. по факту я конечно же там сделал тупо версионность как страховку и всё.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39194260
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lor2,

ты не путай транзакции хибера, бизнес и технические.
в сервлете у тебя должно так:

ВИ №1 ОРМ + пессимистик + короткие
=====================
за 0,01 сек
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
try {
  System.out.println("хибер читает объект с количеством помидоров");
  Main u = select count ....... for update = второй на этой строке отгребёт райзе
  if u.CountPomidores достаточно
    u.setPomidores(0);
  session.saveOrUpdate(u);
  System.out.println("Сохранили в БД класс без коммита");
} finally {
  HibernateUtil.commitTransaction();
  System.out.println("Коммит прошёл. Всё = блокировка снялась!");
}
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39194275
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lor2первый тяпнул 15 второй тяпнул 10 на выходе получаем минус 5???
технический овердрафт по дебетовой карте))
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39194441
lor2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

ахахаха точно. оно и есть. значит они тоже мучаются с такими проблемами.

Петро, ты извини, я просто не умею думать скулем, я думаю хиберовскими шаблонами :) разумеется, если речь о транзакции то это в рамках хибера. скажу более речь (с моей стороны) идет в рамках методов, помеченных аннтотацией "транзакшионал". идею в общем то понял, просто для меня грань еще более размытой стала между лок на чтение и оптимистик. если я делаю лок на чтение то последующие транзакции типа "в очереди ждут" а потом отваливаются бросая ексепшн, если ждут "долго", в оптимистике у меня тупо сразу же если версия изменилась идет откат транзакции и так же вылетает ексепшн. в обоих случаях надо городить логику как себя вести при ексепшене. либо ждать либо юзера посылать подальше либо еще что-то.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39194480
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lor2значит они тоже мучаются с такими проблемами
ты про банки?
Они не мучаются). Наоборот переложи на плечи клиентов свои проблемы. Транзакции то - отложенные и распределённые. Иначе ни как.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39194492
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lor2в обоих случаях надо городить логику
конечно надо.
Например, в десктопе длинная пессимистик:
====================
- в Урюпинске чел СМОТРИТ список товаров (select обычный)
- нажимет на выбранном товаре РЕДАКТИРОВАТЬ = (select update)
(если заснул, то все ругаются кто заблокировал)
- OK = Commit = выход из блока и гарантия что никто в минус не ушёл

Например, в десктопе КОРОТКАЯ пессимистик:
================
- (select update) только в момент изменения значения как выше в сервлете

Оптимистик будет хибером при сохранеии вылетит что НЕ ПОЛУЧИЛОСЬ.
...
Типо так.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39194495
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123lor2первый тяпнул 15 второй тяпнул 10 на выходе получаем минус 5???
технический овердрафт по дебетовой карте))
Я с технический "овердрафт по дебетовой карте" сталкивался только тогда, когда КОММИСИЯ банка не помещалась в остаток по счету. Т.е. деньги у меня есть, а вот на КОММИСИЮ банка(ов) не хватило

Дебетовая карточка, которая позволяет лихо "тяпать 15 кг. помидоров и потом без денег еще 10" - не видел.

Мало того, некоторые банки свою коммисию даже в выписку по карточному счету не включают. Сам так лет 15 назад пытался выяснить, почему деньги на начало периода - выписка по счету != деньги на конце периода. Оказалось, что ежегодный платеж за пользованием карточкой в выписку не включается.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39194537
lor2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

я хз у меня есть валютная визакард, и действительно раз вышло что на алиюшке заказал два товара на сумму больше чем по карте и карта ушла в минус )) карта дебетовая. покупки делал подряд.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39195076
lor2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чота я щас сижу и думаю, что оказывается у меня очень много случаев работы с базой когда может произойти лютый треш если не делать хоть какую то блокировку, аж волосы на спине зашевелились. )) типа одна транзакция закидывает бабки а другая их списывает. и может выйти так что списала с той суммы, которая была до закидывания первой транзакцией в итоге закидывание вообще пропадает но списание проходит. ненене. версионирование - без него по ходу никуда.

кстати, ткой вопрос в контексте спринга и его аопа.

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

теперь собссно вопрос: спринг в хибер один раз открыл сессию на момент скажем так инициализации и всё время ее держит открытой? или открывает закрывает каждый раз с запуском метода помеченного транзакшнл? или там еще какой то механизм?
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39195084
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lor2теперь собссно вопрос: спринг в хибер один раз открыл сессию на момент скажем так инициализации и всё время ее держит открытой? или открывает закрывает каждый раз с запуском метода помеченного транзакшнл? или там еще какой то механизм?

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate3/HibernateTransactionManager.html

По-умолчанию одна сессия на одну транзакцию. При остром желании это можно изменить, но нужно понимать что делаешь.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39195108
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lor2версионирование - без него по ходу никуда.
Ты не учился в ВУЗе? )))
Первое что делают - списывают и ищут "рыбу".
- найди аналог из сети твоего ВИ \ use case.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39195110
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lor2может произойти лютый треш если не делать хоть какую то блокировку, аж волосы на спине зашевелились. ))
"Компромиссы и проблемы"
http://www.k-press.ru/cs/2009/3/ts/ts.asp
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39195111
lor2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123lor2версионирование - без него по ходу никуда.
Ты не учился в ВУЗе? )))
Первое что делают - списывают и ищут "рыбу".
- найди аналог из сети твоего ВИ \ use case.
я учился в вузе 6 лет, но мое направление хоть и связано с техникой, но мало связано с программированием.


автор
По-умолчанию одна сессия на одну транзакцию. При остром желании это можно изменить, но нужно понимать что делаешь.


просто есть мнение что открытие и закрытие сессии в хибере отгрызает достаточно много ресурсов и делая много мелких тразакций ты эти ресурсы будешь под себя подгребать. с другой стороны делая мало длинных трнанзакций ты тоже получаешь определенные недостатки.

что лучше
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39195112
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lor2типа одна транзакция закидывает бабки а другая их списывает
общее правило - Ты должен страться уйти вообще от блокировок.
Тебя не смущает, что ты просматриваешь тут тему, а она может быть удалена админом в данный момент.
Или мы смотрим на звезду, а она уже миллионы лет не существует)).
...
Сначала помидоры разбери, прежде чем везде версии совать.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39195113
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lor2что лучше
вошёл в сервлет = открыл
вышел из сервлета = закрыл и забыл.
Разве не очевидно?
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39195114
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lor2просто есть мнение что открытие и закрытие сессии в хибере отгрызает достаточно много ресурсов

Мнение авторитетное или так себе? Открытие сессии не стоит ничего. Закрытие, естественно, отжирает ресурсы, так как оно связно с обновлением состояния и коммитом транзакции.

lor2 и делая много мелких тразакций ты эти ресурсы будешь под себя подгребать.

Это лирика, которая к технической стороне вопроса никакого отношения не имеет.

lor2 с другой стороны делая мало длинных трнанзакций ты тоже получаешь определенные недостатки.

Короткие транзакции лучше, это в каждом букваре написано. Чем короче транзакции, тем меньше между ними соперничества, тем меньше системе нужно тратить ресурсов на разруливание конкуренции. А на тупых блокировочниках типа MySQL длинные транзакции это смерть системы под нагрузкой.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39195116
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz тебе уже сказал. Откуда мелкие транзакции тогда могут у тебя произойти?
При декларативных ставь то, что написано выше статье.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39195123
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вошёл в сервлет = открыл
вышел из сервлета = закрыл и забыл.
Разве не очевидно?
Если сервлет это бизнес-транзакция, то да. А если это всего лишь View к бизнес-слою, то, наверное, не надо.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39195132
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж. Читаю и волосы встают дыбом.

А еще меня удивляло, как система мировой лидер ( Oracle Customer Care & Billing, SPL WG Customer Care & Billing) умудряется ничего не блокировать и создавать одному клиенту по два одинаковых счета на одну и ту же дату.

Тот же подход... Hibernate, @Version и не е#$т
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39195134
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЕсли сервлет это бизнес-транзакция, то да. А если это всего лишь View к бизнес-слою, то, наверное, не надо.
да, конечно так.
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39195141
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вчера набивал ответ в данную тему, потом стер.

Т.к. IMHO вопрос топикастера с Java и Hibernate связан слабо. Концептуально проблема как организована работа с системой и данными. И вопрос скорее относится к форуму ERP.

Т.к. я бы разделял две задачи:

1. Форма ввода документов

Тут есть блокировка и запрета одновременного ввода несколькими пользователями. Решать можно по разному.
Но проблем "списание", "остатков на складе" и так далее нет. По определению

2. Проведение операций (транзакций) в системе.

Тут обычно нет проблемы "длинных транзакций". Все транзакции обычно короткие.

Если одно с другим не смешивать - особых проблем быть не должно

IMHO & AFAIK
...
Рейтинг: 0 / 0
Hibernate разрешение конфликтных ситуаций?
    #39195259
lor2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczКороткие транзакции лучше, это в каждом букваре написано. Чем короче транзакции, тем меньше между ними соперничества, тем меньше системе нужно тратить ресурсов на разруливание конкуренции. А на тупых блокировочниках типа MySQL длинные транзакции это смерть системы под нагрузкой.
я по собеседованиям походил и такого наслушался, что уже сам себе не верю. да, я так же считаю как ты написал. вернее я так не считаю я так читал в куче источников.

Петро, так что там насчет помидоров то не так? процесс прост как дважды-два: есть помидоры - откусываем от доступных остатков - перекладываем в заброньканые остатки-коммитимся. нет помидоров - идем мимо.

по деньгам просто если параллельно вдруг так случится отработают две транзакции просто в худшем случае без всяких блокировок выйдет так что (кажется в 1с это регистр называется ) так вот регистр у клиента будет показывать на счету 100 рублей, а по факту (и по логу денежных транзакций) у него 150 рублей. это в самом худшем для него случае. надо просто пересчет делать.
...
Рейтинг: 0 / 0
25 сообщений из 108, страница 4 из 5
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate разрешение конфликтных ситуаций?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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