Non ho familiarità con il funzionamento di Seam, quindi mi scuso in anticipo se questa risposta non si applica.
Ho notato che il metodo è @Transactional
è protected
. Questo implica per me che viene chiamato da un altro metodo interno.
Con l'AOP di Spring, segni il pubblico metodi con @Transactional
che vengono avvolti e sostituiti con un proxy di transazione. Quando una classe esterna chiama il public
metodo, sta chiamando il proxy che forma la transazione. Se la classe esterna chiama un altro public
metodo che non è contrassegnato con @Transactional
che quindi chiama un metodo interno che è che non verrà creata alcuna transazione perché il proxy non viene chiamato affatto.
In primavera, anche se cambi il tuo doWork()
metodo per essere pubblico, accadrebbe lo stesso problema. Nessuna transazione perché l'oggetto proxy non viene chiamato. Le chiamate al metodo effettuate all'interno della classe non effettuano chiamate all'oggetto proxy.
Una rapida lettura di alcuni documenti sembra indicare che, come Spring AOP, Seam sta usando CGLib proxy . La domanda è se è in grado di inviare tramite proxy tutti i metodi, anche se vengono chiamati dall'interno dell'oggetto proxy. Ci scusiamo per aver perso tempo se questa risposta non si applica.