Pertama-tama, manajemen transaksi harus dilakukan pada lapisan layanan, bukan pada lapisan DAO karena hal itu akan menciptakan banyak overhead kinerja (untuk menangani tingkat isolasi transaksi yang sesuai dan penyebaran pada setiap metode yang berbeda). Juga, ruang lingkup unit kerja berasal dari lapisan layanan alih-alih lapisan akses data: bayangkan melakukan proses bisnis yang perlu berurusan dengan 2 atau lebih DAO.
Ada banyak diskusi di internet yang menunjuk ke arah itu seperti di sini , di sini dan di sini .
Bagaimanapun, karena ini adalah wawancara, mari kita terima pertanyaan apa adanya. Dari sudut pandang saya, Anda akan menggunakan @Transactional
anotasi (atau konfigurasi XML) di kedua metode dan dengan propagasi transaksi dengan REQUIRED
nilai. Dengan begitu, ketika salah satu dari metode tersebut dipanggil dan jika tidak ada transaksi sebelumnya, transaksi baru akan dibuat:
@Transactional
class MyDAO {
@Transactional(propagation = REQUIRED)
public void foo() {
}
@Transactional(propagation = REQUIRED)
public void bar() {
}
}
foo()
danbar()
berbagi transaksi yang sama dan jika 1 gagal 1 lainnya juga akan kembalikan? Bisakah Anda memberikan klarifikasi?@Transactional(propagation = REQUIRED)
metode lapisan DAO untuk propagasi dan@Transactional
pada lapisan layanan, tetapi jika saya memakai@Transactional
lapisan layanan saja alih-alih menempatkan pada lapisan DAO, apa bedanya?propagation = REQUIRED
adalah nilai default untuk propagasi anotasi transaksional, jadi tidak perlu untuk menuliskannya.Mengabaikan pegas dan kerangka kerja dalam jawaban saya ..... hanya ide dasar menggunakan parameter fungsi. Saya yakin konsep ini bisa diterapkan dalam [masukkan kerangka kerja di sini].
Anda perlu menangani komit / kembalikan di luar 2 metode DAO. 2 metode perlu mengambil transaksi / koneksi sebagai input.
kode psuedo:
sumber
Tran t
sebagai parameter dengan kedua metode. Bisakah Anda memberikan penjelasan?Ada kemungkinan bahwa dua metode harus bekerja secara independen juga pada saat yang sama mungkin berjalan dalam transaksi yang sama. Jadi kita perlu menggunakan Propagasi-Diperlukan. Jika transaksi harus berjalan dalam transaksi yang sama maka akan menggunakan transaksi pertama yang lain transaksi baru dibuat jika dipanggil secara independen. Perbaiki saya jika saya salah.
sumber