Transaction

Transaction konusu kendi içinde çok önemli bir konudur. Bir transactionun başlaması, devam etmesi ve bitmesi, bittiğinde her şey yolunda gitmiş mi, herhangi bir hata almış mı, bu konuların tamamı yönetilmesi, durumlara göre aksiyonların belirlenmesi gerekir.

Bir transaction un taşıması gereken özellikler nelerdir?

Bir transaction un taşıması gereken 4 önemli özellik vardır. Bunlar ACID olarak kodlanırlar.

ACID nedir?

Atomicity: Her bir işlemin başarılı olduğu durumda commit edilmeli, aksi halde rollback yapılmalıdır. (“all-or-nothing – ya hep ya hiç)
Consistency:  Tutarlı demektir. Verilerin tutarlı olması gerekir.
Isolation: İzole etmek demektir. Aynı anda birden fazla transaction tarafından güncelleme yapılmamalıdır.
Durability: Dayanıklı, kalıcı demektir. Transaction sonlandığında tüm işlemler kalıcı hale gelmelidir. Eğer bir hata olduysa da tüm güncellemeler iptal edilip, birebir eski haline dönmelidir.

İki çeşit transaction yönetim şekli vardır.
– Programmatic Transaction
– Declarative Transaction

Programmatic Transaction

Transaction işleminin başlatılıp sonlandırılması ve açık kalan bağlantıların kapatılması kodlarının içinde barındıran bir yöntemdir.

https://gist.github.com/sbahadirm/ae65e32b66b017098f75dbfbcde98f4a

Yukarıdaki kod bloğundan da görülebileceği üzere, kodun commit edilmesi, hata durumunda rollback yapılması vs, bir çok işlem manuel olarak yapılmaktadır. Transaction un yönetiminin, kodun içinde yapılması olayına “Programmatic Transaction” denir.

Declarative Transaction

Bu yöntem sayesinde kodlarımızdaki karmaşa azaltıp, transaction yönetimini başka bir yapıya bırakıp, kodumuzu daha sade, anlaşılır ve kendi business ına odaklanacak şekilde yazabiliriz. Buna “Declarative Transaction” denir.

https://gist.github.com/sbahadirm/ae8edebc85bc80f345e8acdb4ae79f15

Yukarıdaki kod bloğunda da aslında bir transaction var fakat görülebileceği gibi sadece kendi business’ına odaklanmış ve daha sadece bir kod yapısı var. Bunu sağlayan yapı @Transactional anotasyonu ve Spring’tir.