Spring – 24 – Transaction & ACID

Merhaba Arkadaslar
Bu bolumde Transaction kavramini incelemeye baslayacagiz sonrasinda Spring ‘te Transaction kavraminin uygulanis yontemlerini inceleyecegiz.

Transaction

Transaction‘lar guvenilir (reliable) enterprise uygulamalar gelistirebilmek icin son derece kritik bir oneme sahiptir. Transaction kavraminin en yaygin tipi database islemleridir. TIpik bir database update isleminde , database transaction ‘i baslar , data update edilir ve sonrasinda transaction commit edilir ya da rollback yapilir.

Transaction kelime anlami olarak islem anlamina gelmektedir. Bununla birlikte “islem” kavrami bahsettigimiz Transaction kavramini anlatmak icin yeterli olmayacaktir.

Transaction kavramini daha iyi anlayabilmek icin su ornegi gozumuzde canlandirabiliriz.
Sinemaya gittigimizde bilet alana kadar su adimlar gerceklesecektir

  • Oturacagimiz yeri seceriz ve bu yeri onaylariz.
  • Bu yer bizim icin ayrilir. Oturacagimiz koltuk kilitlenir , bir baskasi burayi an itibariyle secemez.
  • Odemeyi yapariz.
  • Biletimizi aliriz.

transaction

Bu ornekte oldugu gibi 4 adimin da basarili olmasi sonucu film keyfimize baslayabiliriz.
Bu adimlarin herhangi birinde problem olmasi sonucunda tum adimlar gecersiz olacaktir ve transaction tamamen iptal olacaktir. Ornegin bilet alacak paramizin olmamasi sonucunda odemeyi gerceklestiremeyiz ve transaction iptal olacaktir , bizim icin ayrilan koltuk tekrar aktif hale gelecektir.

Buradaki 4 adimla ifade ettigimiz ‘islem’lerin hepsine birden transacion adini veriyoruz.
Bir transaction icin tum adimlarin basarili olmasi sonucu transaction commit edilir , aksi durumda bir transaction ‘daki herhangi bir adimda problem olmasi sonucu transaction roll back yapilir.
Transaction roll back yapildiginda oncesindeki basarili adimlarin bir onemi kalmaz , bu adimlarda yapilan her sey geri alinir. Transaction icin ya hep ya hic kurali calisir.

ACID

ACID ( Atomicity , Consistency , Isolation , Durability) kavrami database transaction’larinin guvenilir(reliable) bir sekilde islemesini garanti eden bir ozellikler kumesidir.

ACID kavrami 1983 yilinda Andreas Reuter ve Theo Härder tarafindan tanimlanmistir.

Atomicity
Transaction , bir ya da birden fazla is/islem/aktivite/is parcasindan meydana gelmektedir. Sinema bilet ornegimizde 4 madde ile is parcaciklarini ifade ettik.

Atomic kurali; ancak tum is parcaciklarinin basarili oldugunda Transaction’in basarili olmasini ya da bir is parcaciginin basarisiz olmasi sonucu tum Transaction’in basarisiz olmasini ifade etmektedir. Bir adimda/is parcaciginin basarisiz olmasi sonucunda onceki adimlarda yapilan is parcaciklari iptal edilir ve hic olmamis gibi eski haline getirilir.  (roll – back)

Atomicity ozelligi ; ya hep ya hic kuralidir (all or nothing)

Consistent
Consistent , turkce karsilik olarak tutarli/istikrarli gibi anlamlara gelmektedir.

Ornek olarak bir veritabani sistemi dusunelim. Veritabanini etkileyen Transaction gerceklestirildiginde (kayit ekleme, guncelleme , silme vb) , veritabanindaki tutarliligi saglamak “Consistent” ozelligine bir ornektir.

Bir baska ornek olarak bir EFT ya da havale transaction’ini dusunelim.
EFT ya da havale islemi sonrasinda hesabinizdan gonderdiginiz ucret ile karsi taraftaki hesaba yatan ucret tutarli/consistent olmalidir.

Isolated
Isolate ayirmak/yalitmak gibi anlamlara gelmektedir.

Ayni “data” uzerinde birden fazla islem olabilir. Bu nedenle ayni anda ayni “data” uzerinde okuma ya da yazma islemine engel olunmalidir.

Ornegimizi dusunecek olursak , yerimizi secip onayladiktan sonra bizim transaction’inimiz devam ederken (henuz ucreti verip bileti almadik) ,baska biri gelip bizim sectigimiz yeri secememelidir.

Transaction icerisinde is parcalari , diger transaction’lardan etkilenmemelidir ve izole bir sekilde calismalidir. Bu izolasyon yapisi veritabanlarinda ise locking yapisi ile saglanmaktadir. row veya tablo kilitleme islemi gibi.

Durability
Durable dayanikli/saglam/kalici gibi anlamlara gelmektedir.
Bir transaction sonlandiginda , bu transaction’in sonucu kalici hale gelmelidir.
Bir is parcaciginin basarisiz olmasi sonucunda onceki adimlarda yapilan is parcaciklari iptal edilir ve hic olmamis gibi eski haline getirilebilmelidir.  (roll back)

Transaction Type

Transaction‘lar ; Local Transaction ve Global Transaction olmak uzere 2’ye ayrilir.
Local Transaction’lar tek bir transactional resource’u ifade eder. Resource/kaynak ornegi ; JDBC.

Global Transaction‘lar ise birden fazla transactional resource’a yayilabilir. Global Transaction’lar Containerlar tarafindan yonetilir (manage)

Local Transaction‘larin yonetimi daha kolay olmaktadir , eger uygulamamiz (application) tek bir transactional resource ile etkilesim kuracaksa bu durumda Local Transaction yeterli olacaktir.

Java dunyasinda , Global Transaction’lar JTA (Java Transaction API) implemantasyonu ile yapilmaktadir.

global transaction

Sekli inceledigimizde , global transaction bunyesinde olan birden fazla resource gorebiliriz ;
RDBMS , Message Middleware ve Enterprise Resource Plannning (ERP) sistemi

resource’larin yonetminden sorumlu olarak resource manager’lar yer almaktadir Ornegin MySQL icin MysqlXADataSource sinifi resource manager gorevinden sorumludur.
Resoruce managerlar XA protocol’u ile iletisim kurmaktadir ve 2 Phase Commit (2PC) mekanizmasi kullanilmaktadir.  Boylelikle tum back-end data source’lar guncel olmaktadir.

JTA transaction manager , transaction’larin yonetiminden ve koordinasyonundan sorumludur.
JTA , JBoss , WebSphere , WebLogic , Glassfish ya da Apache TomEE gibi Java EE uyumlu Application Server’lar tarafindan desteklenmektedir. Apache Tomcat gibi sadece Servlet Container ozelligi gosteren yazilimlarda JTA desteklenmez.

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *