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.

September 7th, 2008 at 5:58 am
[…] Konsoldan Input Alma Java Transaction - 2 Aug […]