powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / откатывается транзакция пойманая на OptimisticLockException
14 сообщений из 39, страница 2 из 2
откатывается транзакция пойманая на OptimisticLockException
    #40105177
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчет обработки исключений.

Обычная практика:
- определяются кастомные исключения;
- слой DAO может отдавать только эти кастомные исключения;
- слой сервисов (бизнес логики) понимает и обрабатывает эти кастомные исключения.

Таким образом, кастомные исключения и объекты DTO определяют контракт взаимодействия слоя DAO со слоем сервисов. При замене слоя DAO достаточно, чтобы новый DAO удовлетворял этому контракту.
...
Рейтинг: 0 / 0
откатывается транзакция пойманая на OptimisticLockException
    #40105264
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov,
Нарушение FK это кастомные?
...
Рейтинг: 0 / 0
откатывается транзакция пойманая на OptimisticLockException
    #40105292
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev

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

Андрей ПанфиловИ вот дальше вы пытаетесь размазать ответственность за кривой API между всеми (давайте в DAO не лепить @Transactional), а мое мнение заключается в том, что пусть хотя бы один слой работает правильно, а тот, кто делает неправильно, пусть с этим и разбирается.
@Transactional это не часть DAO слоя. То что мы где-то ожидаем что у нас всего один вызов DAO и поэтому мы не ставим @Transactional над сервисом - это неправильное определение обязанностей DAO. DAO не имеет права определять границы транзакции, это не часть DAO абстракции. Как в общем-то и обработка оптимистических блокировок - это часть бизнес логики.
Вы пытаетесь рассказать довольно странную историю на мой взгляд. Из вашего рассказа следует примерно следующее:
- вот есть некий слой который в итоге производит манипуляции в БД (тут на самом деле уже странно, поскольку чтобы заставить хибер что-то сделать в БД до вызова flush нужно очень сильно постараться, а если мы вызываем flush явно, то это на самом деле так себе затея, к тому же это касается исключительно ваших проектов, а не вообще всех подряд, я, к примеру, принимал участие в проекте где вызывать flush() считалось западно)
- вы смотрите в код хибера (точнее спринга) и наблюдаете, что при определенном стечении обстоятельств в вашем проекте оно выкинет более-менее понятное исключение, причем нужно подчеркнуть что именно в вашем проекте и на вполне определенных версиях (здесь как в соседнем топике: 22385060 , chpasha считает что нужно следоать жавадоку, а вы его игнорируете), откуда принимаете решение что нужно делать именно так как вы увидели и несете это знание в массы, здесь есть кое-какие проблемы:
-- если DAO - это самостоятельный слой, то никаких предположений относительно того, как его будут вызывать он делать не должен, т.е. вариантов развития событий в нем всего два: принять данность как есть (т.е. использовать @Trsnsactional), либо отвергнуть (@Transactional(MANDATORY)), у него, как самостоятельного слоя, есть вполне определенная задача: всегда работать корректно
-- оба упомянутых варианта всегда работают правильно вне зависимости от того что вы там себе придумали, отличаются они только тем, насколько мы уважаем "клиента" - еще раз повторюсь: заставлять "клиента" приседать с транзакциями на ровном месте - это путь вникуда
- если у вас разработчики не понимают где начинаются бизнес-транзакции, а где заканчиваются, то это проблема исключительно разработчиков и их руководства
...
Рейтинг: 0 / 0
откатывается транзакция пойманая на OptimisticLockException
    #40105294
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Нарушение FK это кастомные?

чет у меня есть подозрение, что если по уму делать, то "кастомных" исключений получится где-то полста (которые, к слову сказать, уже в JPA присутствуют), если не добрая сотня, но если скроить, то можно сделать исключение "хрен его знает что тут вообще произошло" и обойтись только им
...
Рейтинг: 0 / 0
откатывается транзакция пойманая на OptimisticLockException
    #40105295
Андрей Панфилов , как-то очень абстрактно написано, я перестаю понимать что мы обсуждаем. Какие-то непонятные предположения про меня, про команду и про руководство.. Не понимаю откуда они взялись и на чем основываются.

Я наверно зря писал что отвергаю @Transactional на DAO - я имел в виду именно умолчания, т.е. @Transactional(REQUIRED). А вот @Transactional(MANDATORY) как раз и выливается в то что DAO не определяет границы транзакций - это делают выше по стеку. Это меня устраивает. Так что складывается впечатление что мы говорим об одном и том же.

Только для меня ставить @Transactional(MANDATORY) и не ставить @Transactional на DAO вообще с практической точки зрения - одно и то же. Потому как мы в любом случае получаем исключение. А ты, насколько я понимаю, подходишь к этому более строго и требуешь проставлять @Transactional(MANDATORY) чтоб получить более понятное исключение.

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

Хотя меня продолжает смущает вот эта формулировка:
Андрей Панфилов- если мы заставляем "клиента" явно объявлять транзакцию, то это начинает довольно сильно влиять на структуру его кода: нужно или часть методов в public выносить (+ еще появляются приседания с проксями) либо какой-то непонятный утиль внедрять - на мой взгляд это слишком много мороки для большинства случаевТут ты как будто говоришь что клиент не должен управлять транзакциями. Но MANDATORY именно к этому и приводит. Что хорошо.
...
Рейтинг: 0 / 0
откатывается транзакция пойманая на OptimisticLockException
    #40105304
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
PetroNotC Sharp
Нарушение FK это кастомные?

чет у меня есть подозрение, что если по уму делать, то "кастомных" исключений получится где-то полста (которые, к слову сказать, уже в JPA присутствуют), если не добрая сотня, но если скроить, то можно сделать исключение "хрен его знает что тут вообще произошло" и обойтись только им
я не о том.
Я вот вообще не вижу кастомных.
Например у оракле есть 30 исключений. Как пример выше - нарушение FK при вставке.
Эти 30 это же НЕ кастомные.
Так в старой парадигме они просто пробрасываются наверх через DAO или через репозиторий.
Наверх туда где БЛ.
Думаю что спринг бут парадигме тоже самое.
Это будет логично.
А вот в слое БЛ можно и кастомные родить хоть 500 штук
...
Рейтинг: 0 / 0
откатывается транзакция пойманая на OptimisticLockException
    #40105317
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Андрей Панфилов , как-то очень абстрактно написано, я перестаю понимать что мы обсуждаем. Какие-то непонятные предположения про меня, про команду и про руководство.. Не понимаю откуда они взялись и на чем основываются.
А как иначе писать, если DAO - это абстракция. Если у меня в DAO не хибернейт закрытый спрингом, а что-то другое, что наличие активной транзакции не проверяет, мне нужно в DAO лепить @Transactional или нет? А если у меня в методах DAO несколько взаимодействий с БД, мне нужно лепить @Transactional или нет? А если дело касается только вашего определенного кейса, тогда почему вы несете в массу "знания" что в DAO лепить @Transactional не нужно?
...
Рейтинг: 0 / 0
откатывается транзакция пойманая на OptimisticLockException
    #40105321
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Osipov
Насчет обработки исключений.

Обычная практика:
- определяются кастомные исключения;
- слой DAO может отдавать только эти кастомные исключения;
- слой сервисов (бизнес логики) понимает и обрабатывает эти кастомные исключения.

Таким образом, кастомные исключения и объекты DTO определяют контракт взаимодействия слоя DAO со слоем сервисов. При замене слоя DAO достаточно, чтобы новый DAO удовлетворял этому контракту.


это тоже не всегда работает - потому что например спринг перехватывает ваши исключения и если вы делаете norollBakcFOr =myExeption.class
вас ждет сюрприз в некторых случаях ,так как кастомный эксепшен перехватит спринг и в это время вы тут же получите
UnexpectedRollbackException и как следвствие откат транзакции ,хотя по логике ожидаете что отката не будет

вообще я лично думаю что флоу,которое строится на эксепшенах это признак плохой архитектуры
...
Рейтинг: 0 / 0
откатывается транзакция пойманая на OptimisticLockException
    #40105333
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080
Roman Osipov
Насчет обработки исключений.

Обычная практика:
- определяются кастомные исключения;
- слой DAO может отдавать только эти кастомные исключения;
- слой сервисов (бизнес логики) понимает и обрабатывает эти кастомные исключения.

Таким образом, кастомные исключения и объекты DTO определяют контракт взаимодействия слоя DAO со слоем сервисов. При замене слоя DAO достаточно, чтобы новый DAO удовлетворял этому контракту.


это тоже не всегда работает - потому что например спринг перехватывает ваши исключения и если вы делаете norollBakcFOr =myExeption.class
вас ждет сюрприз в некторых случаях ,так как кастомный эксепшен перехватит спринг и в это время вы тут же получите
UnexpectedRollbackException и как следвствие откат транзакции ,хотя по логике ожидаете что отката не будет

вообще я лично думаю что флоу,которое строится на эксепшенах это признак плохой архитектуры
ты научился писать только технические посты?
Вот что java животворящая делает))
...
Рейтинг: 0 / 0
откатывается транзакция пойманая на OptimisticLockException
    #40105336
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов,

-- если DAO - это самостоятельный слой, то никаких предположений относительно того, как его будут вызывать он делать не должен, т.е. вариантов развития событий в нем всего два: принять данность как есть (т.е. использовать @Trsnsactional), либо отвергнуть (@Transactional(MANDATORY)), у него, как самостоятельного слоя, есть вполне определенная задача: всегда работать корректно

Вот здесь ошибка в рассуждениях. Не может и не должен слой DAO всегда работать корректно. Поэтому обрабатывать некорректную работу слоя DAO должен клиент.
...
Рейтинг: 0 / 0
откатывается транзакция пойманая на OptimisticLockException
    #40105344
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov,
Ты видел его как самостоятельный слой? Кому он нужен?
Это просто сущности с геттерами
...
Рейтинг: 0 / 0
откатывается транзакция пойманая на OptimisticLockException
    #40105349
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
localhost8080
пропущено...


это тоже не всегда работает - потому что например спринг перехватывает ваши исключения и если вы делаете norollBakcFOr =myExeption.class
вас ждет сюрприз в некторых случаях ,так как кастомный эксепшен перехватит спринг и в это время вы тут же получите
UnexpectedRollbackException и как следвствие откат транзакции ,хотя по логике ожидаете что отката не будет

вообще я лично думаю что флоу,которое строится на эксепшенах это признак плохой архитектуры
ты научился писать только технические посты?
Вот что java животворящая делает))


Те кто хоть что-то умеет - пишет посты по сути топика, те кто не умеет - бла-бла-бла посты. Как-то так.
...
Рейтинг: 0 / 0
откатывается транзакция пойманая на OptimisticLockException
    #40105354
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov,
А ты че влез в наш с ним разговор?
Тебе выше вопрос технический про то как ты писал самодостаточный DAO.
Борешься за место?))))
...
Рейтинг: 0 / 0
откатывается транзакция пойманая на OptimisticLockException
    #40105447
Андрей Панфилов
А как иначе писать, если DAO - это абстракция. Если у меня в DAO не хибернейт закрытый спрингом, а что-то другое, что наличие активной транзакции не проверяет, мне нужно в DAO лепить @Transactional или нет? А если у меня в методах DAO несколько взаимодействий с БД, мне нужно лепить @Transactional или нет? А если дело касается только вашего определенного кейса, тогда почему вы несете в массу "знания" что в DAO лепить @Transactional не нужно?
Я ж уже согласился с тобой, что на DAO ставить @Transactional(MANDATORY) - это более правильно. Итого от самого правильного до самого неправильного:
1. Ставить @Transactional(MANDATORY)
2. Не ставить @Transactional
3. Ставить @Transactional(REQUIRES)
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / откатывается транзакция пойманая на OptimisticLockException
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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