Oracle
 sql >> Database >  >> RDS >> Oracle

Seam @L'annotazione transazionale non funziona?

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.