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

Seam @Transactional annotation virker ikke?

Jeg er ikke bekendt med, hvordan Seam fungerer, så jeg undskylder på forhånd, hvis dette svar ikke gælder.

Jeg har bemærket, at metoden, der er @Transactional er protected . Dette antyder for mig, at det kaldes af en anden intern metode.

Med Springs AOP markerer du offentligheden metoder med @Transactional som er pakket ind og erstattet med en transaktionsfuldmagt. Når en ekstern klasse kalder public metode, kalder den proxyen, som danner transaktionen. Hvis den eksterne klasse kalder en anden public metode, der ikke er markeret med @Transactional som derefter kalder en intern metode, hvilket vil sige, at der ikke bliver oprettet nogen transaktion, fordi proxyen slet ikke bliver kaldt.

Om foråret, selvom du ændrer din doWork() metode til at være offentlig, ville det samme problem ske. Ingen transaktion, fordi proxy-objektet ikke kaldes. Metodekald foretaget inde i klassen foretager ikke kald til proxy-objektet.

En hurtig læsning af noget dokumentation synes at indikere, at Seam ligesom Spring AOP bruger CGLib-proxy . Spørgsmålet er, om det er i stand til at proxye alle metoder -- også selvom de kaldes inde fra det proxyede objekt. Beklager, at du spilder din tid, hvis dette svar ikke gælder.




  1. Heroku med Amazon RDS-sikkerhed

  2. Forespørgsel om at genindeksere den primære nøgle til MySQL-databasen

  3. SQL WHERE-erklæring

  4. Returner Unix-tidsstemplet i PostgreSQL