Ik ben niet bekend met hoe Seam werkt, dus bij voorbaat mijn excuses als dit antwoord niet van toepassing is.
Ik heb gemerkt dat de methode @Transactional
is protected
. Dit houdt voor mij in dat het wordt aangeroepen door een andere interne methode.
Met Spring's AOP markeert u de openbare methoden met @Transactional
die zijn verpakt en vervangen door een transactieproxy. Wanneer een externe klas de public
. aanroept methode, roept het de proxy aan die de transactie vormt. Als de externe klas een andere public
. aanroept methode die niet . is gemarkeerd met @Transactional
die vervolgens een interne methode aanroept, dat wil zeggen dat er geen transactie wordt gemaakt omdat de proxy helemaal niet wordt aangeroepen.
In het voorjaar, zelfs als u uw doWork()
. wijzigt methode om openbaar te zijn, zou hetzelfde probleem optreden. Geen transactie omdat het proxy-object niet wordt aangeroepen. Method-aanroepen die binnen de klasse worden gedaan, doen geen aanroepen naar het proxy-object.
Een snelle lezing van wat documentatie lijkt erop te wijzen dat Seam, net als Spring AOP, CGLib-proxy gebruikt . De vraag is of het in staat is om alle methoden te proxyen -- zelfs als ze worden aangeroepen vanuit het proxy-object. Sorry voor het verspillen van uw tijd als dit antwoord niet van toepassing is.