sql >> Databasteknik >  >> RDS >> Oracle

Seam @Transactional annotation fungerar inte?

Jag är inte bekant med hur Seam fungerar så jag ber om ursäkt på förhand om detta svar inte gäller.

Jag märkte att metoden som är @Transactional är protected . Detta antyder för mig att det anropas med en annan intern metod.

Med Springs AOP markerar du allmänheten metoder med @Transactional som lindas in och ersätts med en transaktionsproxy. När en extern klass anropar public metoden anropar den proxyn som bildar transaktionen. Om den externa klassen anropar en annan public metod som inte är markerad med @Transactional som sedan anropar en intern metod vilket innebär att det inte skapas någon transaktion eftersom proxyn inte anropas alls.

På våren, även om du ändrar din doWork() metod för att vara offentlig, skulle samma problem inträffa. Ingen transaktion eftersom proxyobjektet inte anropas. Metodanrop som görs inuti klassen gör inte anrop till proxyobjektet.

En snabb läsning av en del dokumentation verkar tyda på att Seam, precis som Spring AOP, använder CGLib-proxy . Frågan är om den kan proxysätta alla metoder -- även om de anropas inifrån det proxyade objektet. Ursäkta att jag slösar bort din tid om det här svaret inte stämmer.




  1. Postgresql Trunkeringshastighet

  2. Hur man markerar ett visst antal rader i tabellen vid samtidig åtkomst

  3. PDO positionella och namngivna parametrar som en del av samma förberedda fråga?

  4. SQLplus-avkodning för att exekvera skript