Главная » Spring » Управление транзакциями Spring

0

Отвлечемся на минутку и вспомним детство. Если вы были по- хожи на большинство детей, вы наверняка провели немало безза- ботных часов на детской площадке, качаясь на качелях, лазая по лестницам и кружась на карусели.

Беда в том, что на качелях, устроенных в виде качающейся дос- ки, практически невозможно качаться в одиночку. Чтобы удоволь- ствие было полным, необходим еще один человек: вы и ваш друг оба должны согласиться покачаться на таких качелях. Такое соглашение не допускает компромиссов – все или ничего. Либо вы оба будете качаться, либо никто. Если кто-то из вас не сможет сесть на свой конец качелей, покачаться просто не получится – грустный ребенок будет сидеть на неподвижных качелях1.

В программном обеспечении подобные бескомпромиссные опера- ции называются транзакциями. Транзакции позволяют объединить несколько операций в единый блок, в котором будут выполнены либо все операции, либо ни одной. Если все идет гладко, транзак- ция завершается успехом. Но если что-то пойдет не так, результаты операций, которые успеют выполниться к этому моменту, будут от- брошены, как если бы ничего и не происходило.

Пожалуй, самым типичным примером транзакций в реальном ми- ре может служить перевод денег. Представьте, что вы переводите

1 После выхода первого издания этой книги я убедился, что слово «каче- ли» достаточно часто используется в технической литературе. Это так же просто, как окликнуть своих друзей.

$100 со своего срочного вклада на свой же вклад до востребования. Перевод производится в виде двух последовательных операций: сна- чала выполняется списание $100 со срочного вклада и затем про- изводится зачисление этой же суммы на вклад до востребования. Перевод денег должен быть выполнен полностью или не выполнен вообще. Если операция списания будет выполнена успешно, а опе- рация зачисления потерпит неудачу, вы потеряете $100 (хорошо для банка, но плохо для вас). С другой стороны, если неудачу потерпит операция списания, а операция зачисления завершится успехом, вы получите лишние $100 (хорошо для вас, но плохо для банка). Оптимальным вариантом для обеих сторон будет полный возврат вкладов к первоначальному состоянию, если какая-то операция по- терпит неудачу.

В предыдущей главе мы исследовали поддержку различных ме- ханизмов доступа к данным в Spring и познакомились с нескольки- ми способами чтения и записи данных в базу данных. При записи данных необходимо гарантировать целостность данных, выполняя запись в рамках транзакции. Фреймворк Spring обладает широкими возможностями, обеспечивая как программное, так и декларативное управление транзакциями. В этой главе будет показано, как исполь- зовать транзакции в приложениях, чтобы в случае, когда все идет как надо, результаты работы не терялись. А когда что-то пойдет не так… никто бы и не догадался об этом. (Почти никто, потому что вы как программист можете предусмотреть возможность регистрации проблем в файле журнала для дальнейшей работы над ошибками.)

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии