|
|
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczlor2а такой вопрос. ексепшн при оптимистической блокировке через вершн будет выкидываться из транзакции или из метода, который применяет изменения внутри транзакции? я к чему спрашиваю - где его ловить и как обрабатывать ) В идеале у вас есть 2 класса 1) Класс Domain Model отвечающий за бизнес-логику. Возможно Service. Так, вот валидация количества, перехват OptimisticLockException и его обработка это бизнес-логика. 2) Класс Repository (иногда DAO) отвечающий за доступ к ORM. Это тот самый класс, который делает UPDATE сущности и выкидывает OptimisticLockException. В идеале, конечно, надо смотреть где коммит в базу происходит. Либо на session.flush(), либо на session.commit(), либо на выходе из @Transactional метода. сейчас у меня в приложении три слоя - дао, сервис, контроллеры. @Transactional естественно на уровне сервиса. я не понимаю ОЛЕ выкинет меня сразу же из метода с меткой @Transactional или... где?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 17:52 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
lor2, в смысле ексепшн залетит в контроллер? при такой схеме? или мне надо промежуточный слой между сервисом и контроллером создавать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 17:54 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
lor2сейчас у меня в приложении три слоя - дао, сервис, контроллеры. @Transactional естественно на уровне сервиса. я не понимаю ОЛЕ выкинет меня сразу же из метода с меткой @Transactional или... где?? Можно явно вызвать коммит у сессии и там ловить исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 17:57 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczlor2сейчас у меня в приложении три слоя - дао, сервис, контроллеры. @Transactional естественно на уровне сервиса. я не понимаю ОЛЕ выкинет меня сразу же из метода с меткой @Transactional или... где?? Можно явно вызвать коммит у сессии и там ловить исключение. т.е. я в дао создаю еще один метод типа "коммит_транзакшн" вызываю его в сервисном слое и там же окружаю трайкечем? по-моему вообще макарон-пакарон получается. не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 18:23 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
можно решить и по другому - начал выбирать - тебе всплыла подсказка - этот товар зарезервирован тем-то, в таком количестве ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 18:30 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
вадяможно решить и по другому - начал выбирать - тебе всплыла подсказка - этот товар зарезервирован тем-то, в таком количестве Как вариант в сервисе сделать два метода. Один содержащий логику БД, ну то есть ваш первоначальный вариант, обернуть его в Transactional, а второй метод это вызов первого и обработка OptimistickLocking ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 18:33 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
не то процитировал сорри ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 18:34 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
lor2т.е. я в дао создаю еще один метод типа "коммит_транзакшн" вызываю его в сервисном слое и там же окружаю трайкечем? по-моему вообще макарон-пакарон получается. не? Ну, не же. У тебя в сервисе: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. А в DAO Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 18:37 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczА в DAO Код: java 1. 2. 3. А если update вызывается из нескольких мест? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 18:46 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
забыл никlor2, вам надо почитать про уровни изоляции транзакций. Вам скорее всего подойдет READ_COMMITTED SERIALIZABLE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 18:49 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
ох. а оказывается @Version нельзя поставить на стринг! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 19:00 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
забыл никА если update вызывается из нескольких мест? Так DAO не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 19:00 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
lor2ох. а оказывается @Version нельзя поставить на стринг! Вы реально даже не пытаетесь понять что этот version делает и как работает optimistic lock? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 19:01 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
ну я понял так - ставим в какое-то поле аннотацию вершн и теперь у нас получается что в случае коммита каких то изменений этого объекта одна из транзакций будет выкидывать ексепшн. не?? сейчас сижу бьюсь. автор public void testCall(){ Employee employee = (Employee) sessionFactory.getCurrentSession().get(Employee.class, 2); employee.setName(new Date().toString()); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } employee.setName(new Date().toString()); sessionFactory.getCurrentSession().update(employee); } запускаю это вот внутри транзакции через секунду два раза. (две транзакции) никаких ексепшенов не вываливается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 19:26 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
lor2ну я понял так - ставим в какое-то поле аннотацию вершн и теперь у нас получается что в случае коммита каких то изменений этого объекта одна из транзакций будет выкидывать ексепшн. не?? сейчас сижу бьюсь. Нет, это специально поле должно быть, не ленитесь почитайте про эту аннотацию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 19:29 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
забыл ник, блин. просто забыл аннотацию саму поставить, совсем мозги заклинило :) спасибо всё работает сроу выкидывается. НО. делал по этому варианту 1 к 1: Blazkowiczlor2т.е. я в дао создаю еще один метод типа "коммит_транзакшн" вызываю его в сервисном слое и там же окружаю трайкечем? по-моему вообще макарон-пакарон получается. не? Ну, не же. У тебя в сервисе: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. А в DAO Код: java 1. 2. 3. один фиг выкидывает ексепшн в контроллер. причем вначале он в дао ловится, потом не ловится в сервисе вообще никак. даже ексепшн чистый. и улетает в контроллер (там ловится). бред какой то. хотя может так и правильно. словили в контроллере и там же решили репит или показать клиенту что-нибудь ругательное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 20:29 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
вот интересно с оптимистиком залупил чтоб пробовал с рандомной задержкой заново и заново сохранить. так и не дождался когда с десяток запросов отработается. потом сделал с пессимистиком. причем пессимистик локать не давал когда залочено. алгоритм анлогичный - пробуем залочить если не вышло ждем рандомное время и еще раз пробуем (всего 10 попыток) -- отстрелялись все транзакции. блин. ява это что то с чем то :) я ее люблю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 21:48 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
MasterZivSERIALIZABLE.Пристрелил бы ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 18:49 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
копаю дальше... такая тема когда пессимистически ставлю лок, то у меня последующие транзакции выкидывают сразу же ексепшн :) а я думал они просто висеть будут и ждать своей очереди. а они не ждут. или я что то не так делаю? как сделать очередь? иначе я разницы с @Version не вижу кроме разве что типа выбрасываемого ексепшна. причем оба кидаются в контроллер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2016, 19:48 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
lor2копаю дальше... такая тема когда пессимистически ставлю лок, то у меня последующие транзакции выкидывают сразу же ексепшн :) а я думал они просто висеть будут и ждать своей очереди. а они не ждут. или я что то не так делаю? как сделать очередь? иначе я разницы с @Version не вижу кроме разве что типа выбрасываемого ексепшна. причем оба кидаются в контроллер. Какой ексепшн? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2016, 19:50 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, в каком случае? в случае аннотации вершн там что то вроде ОЛЕ вылетает но не ОЛЕ, в случае пессимистика - другая. могу завтра уточнить. но точно они разные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2016, 21:01 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, при пессимистической блокировке если у меня запускается мешок транзакций, то несколько исполняются в очереди, а остальные сыпятся с ошибкой: Код: sql 1. 2. 3. 4. т.е. я так понимаю транзакции выстраиваются в очередь, и те что успели отработать - отработали, а те что нет - тупо ексепшн: я так понимаю надо либо где то этот таймаут увеличивать, (хз где? это хиберская штучка или бдшная уже?) либо ловить ексепшн и долбить пока не додолбится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 16:24 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
lor2я так понимаю надо либо где то этот таймаут увеличивать , (хз где? это хиберская штучка или бдшная уже?) либо ловить ексепшн и долбить пока не додолбится. Может просто сказать транзакции Serializable и пусть сервер их в очередь выстраивает сам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 16:42 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, изьвиняюсь, как это в хибере делается - вариант Код: java 1. чот ругается. да и в таком случае я логики работы не понимаю если у меня пару транзакций сериалайзбл, а остальные нет? )) откуда он узнает что и как раскладывать. нет, у меня нет вопросов если я всю базу просто помечаю на четвертый (сериалайзбл) уровень изоляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 16:54 |
|
||
|
Hibernate разрешение конфликтных ситуаций?
|
|||
|---|---|---|---|
|
#18+
lor2, у тебя логика должна - наложили блок, работаем, соммит (сняли) Дак вот, когда пошла первая транзакция с select for update, то после райзе надо откатывать все технические транзакции в одной бизнес-транзакции. А долбится или нет решается на самом верху. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 16:57 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39174679&tid=2124254]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
89ms |
get tp. blocked users: |
2ms |
| others: | 272ms |
| total: | 450ms |

| 0 / 0 |
