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.