sql >> Base de Datos >  >> RDS >> Oracle

¿La anotación Seam @Transactional no funciona?

No estoy familiarizado con el funcionamiento de Seam, así que pido disculpas de antemano si esta respuesta no se aplica.

Noté que el método que es @Transactional está protected . Esto implica para mí que está siendo llamado por otro método interno.

Con el AOP de Spring, marca el público métodos con @Transactional que se envuelven y reemplazan con un proxy de transacción. Cuando una clase externa llama al public método, está llamando al proxy que forma la transacción. Si la clase externa llama a otro public método que no marcado con @Transactional que luego llama a un método interno, es decir, no se creará ninguna transacción porque no se está llamando al proxy en absoluto.

En Spring, incluso si cambia su doWork() método para ser público, ocurriría el mismo problema. No hay transacción porque no se llama al objeto proxy. Las llamadas a métodos realizadas dentro de la clase no están realizando llamadas al objeto proxy.

Una lectura rápida de alguna documentación parece indicar que, como Spring AOP, Seam está usando proxying CGLib . La pregunta es si es capaz de representar todos los métodos, incluso si se llaman desde dentro del objeto proxy. Perdón por hacerle perder el tiempo si esta respuesta no se aplica.