true transacciones transaccional framework example ejemplo con java spring spring-mvc

java - transaccional - transacciones con spring framework



Los métodos @Transactional en la clase @Controller no se consideran transaccionales (2)

No hagas transacciones en tu controlador. Póngalos en sus clases de capa de servicio.

Separe su código en model-view-controller.

Sí, es una conspiración. Le permite compartir código entre controladores / vistas sin repetir el código. Y también detiene las reversiones de transacciones innecesariamente (para excepciones no relacionadas con la transacción real).

Puede parecer más código para empezar, pero a la larga es mucho más manejable y más simple de desarrollar.

Noté que lo siguiente no funciona en una clase marcada como @Controller :

@Autowired SessionFactory sessionFactory; @ResponseBody @Transactional @RequestMapping(method = RequestMethod.GET , value = "/map") public ArrayList<PhotoDTO> getPhotos(...someParams) { Entity result sessionFactory.getCurrentSession()... //do some manipulation return result; }

cuando llamo a la URL, aparece un error que dice que el método no es transaccional (aunque, como puede ver, está marcado como uno)

Si copio este método en otra clase llamada MyService y lo llamo desde el controlador, funciona perfectamente

¿Es esto una especie de consejo de primavera (una conspiración para hacerme usar más clases más o menos)?


Probablemente tiene dos contextos de aplicación aquí: contexto principal de Spring cargado por ContextLoaderListener y un contexto secundario cargado por DispatcherServlet . Debe colocar <tx:annotation-driven /> en la configuración cargada también por el contexto secundario. Si nos muestra su archivo web.xml , quizás pueda ayudarlo más.

De todos modos, como dice @NimChimpsky, generalmente no es una buena práctica administrar las transacciones en la capa de su controlador.