Kali ini saya baca millist dan menemukan sesuatu yang baru, tentang transaction ddi JAVA, berikut ulasan dan ringkasannya dari ifnu :
transaction berdasarkan cara handle di sisi developernya ada 2 macam :
1. programatic transaction
kita sebagai developer secara eksplisit menulis kode untuk menghandle transaction seperti begin transaction, commit dan rollback. Cara ini sudah dilaksanakan programmer dari jaman batu
, banyak kelemahanya dan capek jadinya di sisi programmernya.
di dalam JDBC proses update database dengan transaksi sih sangat
straightforward :
public void transferBalance(String from, String to, Double value) {
try {
connection.setAutoCommit(false);
increaseBalance(to, value);
if (currentBalance(from)
throw new IllegalStateException(“Saldo kurang”);
}
decreaseBalance(from, value);
connection.commit();
connection.setAutoCommit(true);
} catch (IllegalStateException err) {
System.out.println(“Error : ” + err.getMessage());
try { // terjadi kegagalan, harus rollback
connection.rollback();
} catch (SQLException ex) {
Logger.getLogger(AccountDao.class.getName()).log(Level.SEVERE, null,ex);
}
} catch (SQLException ex) {
Logger.getLogger(AccountDao.class.getName()).log(Level.SEVERE,null, ex);
}
}
dipanggil agar perubahan dipersistencekan, kalau ada exception maka dipanggil rollback agar transaksi dibatalkan dan perubahan tidak ada lagi.
setelah selesai setAutocommit(true) lagi agar proses transaksinya jadi otomatis kembali.
2. declarative transaction
capek juga ya harus handle commit dan rollback sendiri, suatu saat pasti deh ada yang kelupaan, nah si spring dengan konsep Aspect oriented dan EJB dengan EJB container dapat menjalankan proses commit dan rollback dibelakang layar tanpa harus dihandle secara manual oleh si programmer, tinggal deklarasikan saja bahwa suatu method berada dalam satu sesi transaksi, contoh dari spring 2.5 annotation
@Transactional(readOnly=false)
public void transferBalance(String from, String to, Double value) {
System.out.println(“Isolation Level :”+connection.getTransactionIsolation());
increaseBalance(to, value);
if (currentBalance(from)
throw new IllegalStateException(“Saldo kurang”);
}
decreaseBalance(from, value);
connection.commit();
}
sip kan jadi bersih kodenya? selamat belajar






nice share bro…
tukeran link yuk bro… hehe…