Saya tidak terbiasa dengan cara kerja Seam jadi mohon maaf sebelumnya jika jawaban ini tidak berlaku.
Saya perhatikan bahwa metodenya adalah @Transactional
protected
. Ini menyiratkan kepada saya bahwa itu dipanggil dengan metode internal lain.
Dengan AOP Spring, Anda menandai publik metode dengan @Transactional
yang dibungkus dan diganti dengan proxy transaksi. Saat kelas eksternal memanggil public
metode, itu memanggil proxy yang membentuk transaksi. Jika kelas eksternal memanggil public
lain metode yang bukan ditandai dengan @Transactional
yang kemudian memanggil metode internal yaitu, tidak akan ada transaksi yang dibuat karena proxy tidak dipanggil sama sekali.
Di Musim Semi, bahkan jika Anda mengubah doWork()
metode untuk menjadi publik, masalah yang sama akan terjadi. Tidak ada transaksi karena objek proxy tidak dipanggil. Panggilan metode yang dilakukan di dalam kelas tidak melakukan panggilan ke objek proxy.
Pembacaan cepat beberapa dokumentasi tampaknya menunjukkan bahwa, seperti Spring AOP, Seam menggunakan proksi CGLib . Pertanyaannya adalah apakah ia dapat mem-proxy semua metode - bahkan jika mereka dipanggil dari dalam objek yang diproksi. Maaf membuang waktu Anda jika jawaban ini tidak berlaku.