Oracle
 sql >> Base de données >  >> RDS >> Oracle

L'annotation Seam @Transactional ne fonctionne pas ?

Je ne connais pas le fonctionnement de Seam, donc mes excuses à l'avance si cette réponse ne s'applique pas.

J'ai remarqué que la méthode qui est @Transactional est protected . Cela implique pour moi qu'il est appelé par une autre méthode interne.

Avec l'AOP de Spring, vous marquez le public méthodes avec @Transactional qui sont enveloppés et remplacés par un proxy de transaction. Lorsqu'une classe externe appelle le public méthode, il appelle le proxy qui forme la transaction. Si la classe externe appelle un autre public méthode qui n'est pas marqué avec @Transactional qui appelle ensuite une méthode interne, c'est-à-dire qu'aucune transaction ne sera créée car le proxy n'est pas appelé du tout.

Au printemps, même si vous modifiez votre doWork() méthode d'être public, le même problème se produirait. Aucune transaction car l'objet proxy n'est pas appelé. Les appels de méthode effectués à l'intérieur de la classe n'appellent pas l'objet proxy.

Une lecture rapide de certaines documentations semble indiquer que, comme Spring AOP, Seam utilise proxy CGLib . La question est de savoir s'il est capable de proxy toutes les méthodes - même si elles sont appelées depuis l'objet proxy. Désolé d'avoir perdu votre temps si cette réponse ne s'applique pas.