![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Embedded |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 22.2.2011 Где: Россия Репутация: 1 Всего: 1 |
Здравствуйте
Просматривая чужой код обнаружил что некоторые программисты между вызовами методов транзакции (JPA) begin() и commit() помещают достаточно большие куски кода, иногда метод с кучей проверок и некоторыми действиями на прямую не связанными с сохранением объекта в БД или загрузой из БД. Подскажите пожалуйста, а вообще большое значение имеет время прошедшее с начала ( begin() ) транзакции и до ее конца ( commit() )? Мне кажется, что чем короче транзакция по времени тем лучше... |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
С точки зрения СУБД - да. А с точки зрения программиста, лучше автоматически начинать транзакцию при вызове метода и завершать по его окончании. Кстати Oracle достаточно спокойно относится к длинным транзакциям. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Embedded |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 22.2.2011 Где: Россия Репутация: 1 Всего: 1 |
Спасибо за помощь LSD! К сожалению я месяц назад начал изучать Java и почти тогда же БД. Использую PostgreSQL, но многих нюансов не знаю. Как наберу сотню плюс за мной, не забуду)
Еще раз спасибо! |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
Тут, как и во всем другом, нужен разумный компромисс. Между удобством написания и ограничениями используемых инструментов.
Пока время работы твоих методов измеряется секундами, можно особо не переживать. Когда оно перейдет на минуты/десятки минут, тут уже стоит думать над оптимизацией. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Embedded |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 22.2.2011 Где: Россия Репутация: 1 Всего: 1 |
LSD,
Там у меня пока примитивные проверки... Например заполнил ли пользователь поле или нет и т.д. Просто использя механизм исключений все проверки получается выполнить достаточно аккуратно. Но это получается не запутанно сделать только если работу с транзакциями спрятать в абстрактный класс типа такого:
Названия дал условные. Вся работа с транзакциями проводится в классе HelperTransactionUnit (в методе execute(), который в свою очередь вызывает doTransaction() между begin() и commit()), раньше я производил эту работу в TransactionalClass, но мне посоветовали еще добавить класс HelperTransactionUnit дабы уменьшить зависимости, хотя честно сказать у меня проект маленький чтобы возникли подобные проблемы с зависимостями... Вот такая история.. К сожалению поскольку знаний у меня мало очень, а про разнообразные методы программирования я уже немного почитал, я начинаю думать как облегчить себе жизнь благодаря новым знаниями и не всегда выходит хорошо или даже чаще выходит плохо |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
Можно например использовать декларативные транзакции. В том же спринге это делается довольно просто.
Аннотируешь класс или метод как @Transactional и спринг будет автоматически начинать транзакцию при вызове метода и завершать ее при выходе из метода. Если было исключение, то транзакция будет отменена.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Embedded |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 22.2.2011 Где: Россия Репутация: 1 Всего: 1 |
LSD,
Я начал с урока Stampede и поскольку кода написал много, а до спринга еще не добрался, то подобные радости мне пока еще недоступны. И часто приходится в одной транзакции произвести операции чтения/записи с различными сущностями так, что пока удобно делать как описал выше. Спасибо за советы и помощь LSD! Не обессудьте уж, что задаю примитивные вопросы, мне еще учиться и учиться... Это сообщение отредактировал(а) Embedded - 26.4.2011, 12:30 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |