Java Transaction - 1 Eclipse Plugin’i Yazma
Sep 07

Local Transaction

Önceki bölümde anlattığımız gibi Local Transaction’larda kullanıcı connection’ları yönetir, transaction’ları değil. Örnek vermek gerekirse;

// herhangi bir datasource'dan connection
// aldığımızı düşünelim
Connection conn = ds.getConnection();
// autoCommit'i devre dışı bırakarak transaction
// yönetimini bizim elimize geçiyor
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
String sql = "update user set username = 'javaci' where id = 1";
try {
  stmt.executeUpdate(sql);
  conn.commit();
} catch(Exception exc) {
  conn.rollback();
} finally {
  stmt.close();
  conn.close();
}

Yukarıda gördüğünüz kodda setAutoCommit(false) komutu ile her sql cümleciği için ayrı bir commit yapmadan, sadece conn.commit() satırını görünce toplu bir commit yapılacaktır. Böyle yapmamız hem hız açısından hem de data güvenirliliği açısından önemlidir.

// herhangi bir datasource'dan connection
// aldığımızı düşünelim
Connection conn = ds.getConnection();
// autoCommit default değeri true
conn.setAutoCommit(true);
Statement stmt = conn.createStatement();
String sql1 = "update user set username = 'javaci' where id = 1";
String sql2 = "update user set password = 'gizli' where id = 1";
try {
  stmt.executeUpdate(sql1);
  stmt.executeUpdate(sql2);
} catch(Exception exc) {
 
} finally {
  stmt.close();
  conn.close();
}

Yukarıdaki kod ACID kuralına uymayacaktır. sql1 calışıp commit edilebilir ve sql2 commit edilmeyebilir. Çünkü setAutoCommit(true) (default değeri true) yapılmıştır ve her sql satırı ayrı ayrı commit edildiğinden geri almak (rollback) mümkün olmayacaktır.

Local Transaction Modeli küçük uygulamalar için kullanılabilir bir transaction modelidir. Fakat daha karmaşık yapılara geçildiğinde bize dezavantajlarını gösterecektir. Mesela farkettiyseniz geliştirici aynı zamanda commit ve rollback gibi transaction işlemlerini de düşünmeli ve kodlamalıdır. Bu ayrıca geliştiriciye bir yük olmaktadır. Diğer bir problem ise Local Transaction Model aynı anda birden fazla olamazlar, Distributed Transaction yapamazsınız.

yazan Erol KOCAMAN \\ tags: ,

1 Yorum yapıldı “Java Transaction - 2”

  1. Java Transaction - 1 » javaci.net diyor ki:

    […] Konsoldan Input Alma Java Transaction - 2 Aug […]

Cevapla