|
откатывается транзакция пойманая на OptimisticLockException
|
|||
---|---|---|---|
#18+
Насчет обработки исключений. Обычная практика: - определяются кастомные исключения; - слой DAO может отдавать только эти кастомные исключения; - слой сервисов (бизнес логики) понимает и обрабатывает эти кастомные исключения. Таким образом, кастомные исключения и объекты DTO определяют контракт взаимодействия слоя DAO со слоем сервисов. При замене слоя DAO достаточно, чтобы новый DAO удовлетворял этому контракту. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2021, 14:27 |
|
откатывается транзакция пойманая на OptimisticLockException
|
|||
---|---|---|---|
#18+
Roman Osipov, Нарушение FK это кастомные? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2021, 18:30 |
|
откатывается транзакция пойманая на OptimisticLockException
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Но допустим мы работаем по сценарию "разработчики об этом не знают, поэтому не ставим @Transactional над сервисом" - что мы этим достигаем? Еще больше вероятность багов, еще более сложное управление транзакциями, еще больше непониманий о том как это все работает. Это ведь более сложная и неявная схема. Андрей ПанфиловИ вот дальше вы пытаетесь размазать ответственность за кривой API между всеми (давайте в DAO не лепить @Transactional), а мое мнение заключается в том, что пусть хотя бы один слой работает правильно, а тот, кто делает неправильно, пусть с этим и разбирается. Вы пытаетесь рассказать довольно странную историю на мой взгляд. Из вашего рассказа следует примерно следующее: - вот есть некий слой который в итоге производит манипуляции в БД (тут на самом деле уже странно, поскольку чтобы заставить хибер что-то сделать в БД до вызова flush нужно очень сильно постараться, а если мы вызываем flush явно, то это на самом деле так себе затея, к тому же это касается исключительно ваших проектов, а не вообще всех подряд, я, к примеру, принимал участие в проекте где вызывать flush() считалось западно) - вы смотрите в код хибера (точнее спринга) и наблюдаете, что при определенном стечении обстоятельств в вашем проекте оно выкинет более-менее понятное исключение, причем нужно подчеркнуть что именно в вашем проекте и на вполне определенных версиях (здесь как в соседнем топике: 22385060 , chpasha считает что нужно следоать жавадоку, а вы его игнорируете), откуда принимаете решение что нужно делать именно так как вы увидели и несете это знание в массы, здесь есть кое-какие проблемы: -- если DAO - это самостоятельный слой, то никаких предположений относительно того, как его будут вызывать он делать не должен, т.е. вариантов развития событий в нем всего два: принять данность как есть (т.е. использовать @Trsnsactional), либо отвергнуть (@Transactional(MANDATORY)), у него, как самостоятельного слоя, есть вполне определенная задача: всегда работать корректно -- оба упомянутых варианта всегда работают правильно вне зависимости от того что вы там себе придумали, отличаются они только тем, насколько мы уважаем "клиента" - еще раз повторюсь: заставлять "клиента" приседать с транзакциями на ровном месте - это путь вникуда - если у вас разработчики не понимают где начинаются бизнес-транзакции, а где заканчиваются, то это проблема исключительно разработчиков и их руководства ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2021, 04:15 |
|
откатывается транзакция пойманая на OptimisticLockException
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Нарушение FK это кастомные? чет у меня есть подозрение, что если по уму делать, то "кастомных" исключений получится где-то полста (которые, к слову сказать, уже в JPA присутствуют), если не добрая сотня, но если скроить, то можно сделать исключение "хрен его знает что тут вообще произошло" и обойтись только им ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2021, 04:21 |
|
откатывается транзакция пойманая на OptimisticLockException
|
|||
---|---|---|---|
#18+
Андрей Панфилов , как-то очень абстрактно написано, я перестаю понимать что мы обсуждаем. Какие-то непонятные предположения про меня, про команду и про руководство.. Не понимаю откуда они взялись и на чем основываются. Я наверно зря писал что отвергаю @Transactional на DAO - я имел в виду именно умолчания, т.е. @Transactional(REQUIRED). А вот @Transactional(MANDATORY) как раз и выливается в то что DAO не определяет границы транзакций - это делают выше по стеку. Это меня устраивает. Так что складывается впечатление что мы говорим об одном и том же. Только для меня ставить @Transactional(MANDATORY) и не ставить @Transactional на DAO вообще с практической точки зрения - одно и то же. Потому как мы в любом случае получаем исключение. А ты, насколько я понимаю, подходишь к этому более строго и требуешь проставлять @Transactional(MANDATORY) чтоб получить более понятное исключение. Я даже начинаю склоняться к тому чтобы тоже начать проставлять MANDATORY. Получается, что таким образом я буду документировать для других что сделал явный выбор не управлять транзакциями на этом уровне. Меня только лишние прокси в стеке раздражают.. Хотя меня продолжает смущает вот эта формулировка: Андрей Панфилов- если мы заставляем "клиента" явно объявлять транзакцию, то это начинает довольно сильно влиять на структуру его кода: нужно или часть методов в public выносить (+ еще появляются приседания с проксями) либо какой-то непонятный утиль внедрять - на мой взгляд это слишком много мороки для большинства случаевТут ты как будто говоришь что клиент не должен управлять транзакциями. Но MANDATORY именно к этому и приводит. Что хорошо. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2021, 05:38 |
|
откатывается транзакция пойманая на OptimisticLockException
|
|||
---|---|---|---|
#18+
Андрей Панфилов PetroNotC Sharp Нарушение FK это кастомные? чет у меня есть подозрение, что если по уму делать, то "кастомных" исключений получится где-то полста (которые, к слову сказать, уже в JPA присутствуют), если не добрая сотня, но если скроить, то можно сделать исключение "хрен его знает что тут вообще произошло" и обойтись только им Я вот вообще не вижу кастомных. Например у оракле есть 30 исключений. Как пример выше - нарушение FK при вставке. Эти 30 это же НЕ кастомные. Так в старой парадигме они просто пробрасываются наверх через DAO или через репозиторий. Наверх туда где БЛ. Думаю что спринг бут парадигме тоже самое. Это будет логично. А вот в слое БЛ можно и кастомные родить хоть 500 штук ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2021, 08:00 |
|
откатывается транзакция пойманая на OptimisticLockException
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Андрей Панфилов , как-то очень абстрактно написано, я перестаю понимать что мы обсуждаем. Какие-то непонятные предположения про меня, про команду и про руководство.. Не понимаю откуда они взялись и на чем основываются. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2021, 09:10 |
|
откатывается транзакция пойманая на OptimisticLockException
|
|||
---|---|---|---|
#18+
Roman Osipov Насчет обработки исключений. Обычная практика: - определяются кастомные исключения; - слой DAO может отдавать только эти кастомные исключения; - слой сервисов (бизнес логики) понимает и обрабатывает эти кастомные исключения. Таким образом, кастомные исключения и объекты DTO определяют контракт взаимодействия слоя DAO со слоем сервисов. При замене слоя DAO достаточно, чтобы новый DAO удовлетворял этому контракту. это тоже не всегда работает - потому что например спринг перехватывает ваши исключения и если вы делаете norollBakcFOr =myExeption.class вас ждет сюрприз в некторых случаях ,так как кастомный эксепшен перехватит спринг и в это время вы тут же получите UnexpectedRollbackException и как следвствие откат транзакции ,хотя по логике ожидаете что отката не будет вообще я лично думаю что флоу,которое строится на эксепшенах это признак плохой архитектуры ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2021, 09:15 |
|
откатывается транзакция пойманая на OptimisticLockException
|
|||
---|---|---|---|
#18+
localhost8080 Roman Osipov Насчет обработки исключений. Обычная практика: - определяются кастомные исключения; - слой DAO может отдавать только эти кастомные исключения; - слой сервисов (бизнес логики) понимает и обрабатывает эти кастомные исключения. Таким образом, кастомные исключения и объекты DTO определяют контракт взаимодействия слоя DAO со слоем сервисов. При замене слоя DAO достаточно, чтобы новый DAO удовлетворял этому контракту. это тоже не всегда работает - потому что например спринг перехватывает ваши исключения и если вы делаете norollBakcFOr =myExeption.class вас ждет сюрприз в некторых случаях ,так как кастомный эксепшен перехватит спринг и в это время вы тут же получите UnexpectedRollbackException и как следвствие откат транзакции ,хотя по логике ожидаете что отката не будет вообще я лично думаю что флоу,которое строится на эксепшенах это признак плохой архитектуры Вот что java животворящая делает)) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2021, 09:42 |
|
откатывается транзакция пойманая на OptimisticLockException
|
|||
---|---|---|---|
#18+
Андрей Панфилов, -- если DAO - это самостоятельный слой, то никаких предположений относительно того, как его будут вызывать он делать не должен, т.е. вариантов развития событий в нем всего два: принять данность как есть (т.е. использовать @Trsnsactional), либо отвергнуть (@Transactional(MANDATORY)), у него, как самостоятельного слоя, есть вполне определенная задача: всегда работать корректно Вот здесь ошибка в рассуждениях. Не может и не должен слой DAO всегда работать корректно. Поэтому обрабатывать некорректную работу слоя DAO должен клиент. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2021, 09:55 |
|
откатывается транзакция пойманая на OptimisticLockException
|
|||
---|---|---|---|
#18+
Roman Osipov, Ты видел его как самостоятельный слой? Кому он нужен? Это просто сущности с геттерами ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2021, 10:48 |
|
откатывается транзакция пойманая на OptimisticLockException
|
|||
---|---|---|---|
#18+
PetroNotC Sharp localhost8080 пропущено... это тоже не всегда работает - потому что например спринг перехватывает ваши исключения и если вы делаете norollBakcFOr =myExeption.class вас ждет сюрприз в некторых случаях ,так как кастомный эксепшен перехватит спринг и в это время вы тут же получите UnexpectedRollbackException и как следвствие откат транзакции ,хотя по логике ожидаете что отката не будет вообще я лично думаю что флоу,которое строится на эксепшенах это признак плохой архитектуры Вот что java животворящая делает)) Те кто хоть что-то умеет - пишет посты по сути топика, те кто не умеет - бла-бла-бла посты. Как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2021, 11:15 |
|
откатывается транзакция пойманая на OptimisticLockException
|
|||
---|---|---|---|
#18+
Roman Osipov, А ты че влез в наш с ним разговор? Тебе выше вопрос технический про то как ты писал самодостаточный DAO. Борешься за место?)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2021, 11:26 |
|
откатывается транзакция пойманая на OptimisticLockException
|
|||
---|---|---|---|
#18+
Андрей Панфилов А как иначе писать, если DAO - это абстракция. Если у меня в DAO не хибернейт закрытый спрингом, а что-то другое, что наличие активной транзакции не проверяет, мне нужно в DAO лепить @Transactional или нет? А если у меня в методах DAO несколько взаимодействий с БД, мне нужно лепить @Transactional или нет? А если дело касается только вашего определенного кейса, тогда почему вы несете в массу "знания" что в DAO лепить @Transactional не нужно? 1. Ставить @Transactional(MANDATORY) 2. Не ставить @Transactional 3. Ставить @Transactional(REQUIRES) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2021, 16:48 |
|
|
start [/forum/topic.php?fid=59&gotonew=1&tid=2120325]: |
0ms |
get settings: |
24ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
13ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
296ms |
get tp. blocked users: |
3ms |
others: | 364ms |
total: | 778ms |
0 / 0 |