[Java] AOP, Spring y el alcance de las transacciones


Answers

La expresión de Spring recomendaría tener una interfaz de servicio que conozca las unidades de trabajo y una interfaz de persistencia que trate con bases de datos relacionales. Los métodos en la interfaz del servicio deben corresponderse estrechamente con sus casos de uso. La implementación del servicio conoce todos los paquetes y clases de modelos y persistencia que necesita para lograr los objetivos del caso de uso.

"Las instancias pueden llamarse entre sí y, como ya se mencionó, no hay un punto de entrada común que llame a todas las instancias desde un único punto de entrada (como una capa de servicio) que sería un objetivo fácil para la etiqueta transaccional de primavera".

Esta oración me dice que estás haciendo las cosas de una manera que no se presta tan fácilmente al lenguaje de Spring. Es difícil decir exactamente lo que quiere, pero parece que está dejando de lado dos de las capas más importantes que Spring recomienda. Si parece difícil ir contra la corriente, tal vez sea su diseño el que necesite una nueva versión.

"... diferentes personas que llaman con otras clases en el medio ..." - tal vez necesites declarar transacciones individualmente con estas personas.

Puede declarar transacciones en configuración XML usando aspectos, ya sea con Spring AOP o AspectJ. Spring 2.5 y versiones superiores ahora le dan la opción de usar anotaciones si las prefiere a la configuración XML.

Tu descripción es terriblemente confusa para mí. Quizás esa sea en parte la razón por la que también estás teniendo dificultades. Lo reconsideraría o aclararía.

Question

imagine una aplicación java transaccional y multiproceso que utiliza spring, jdbc y aop con n clases en m paquetes que participan en las transacciones de la base de datos. Ahora digamos que es necesario delimitar un conjunto arbitrario de clases dentro de una transacción. Además, siempre hay una clase T dentro del alcance que compromete la transacción cuando se llama.

Permítanme dar un ejemplo de claridad: dados los paquetes A, B, Z y las clases A.Foo, B.Bar y ZT. Las siguientes instancias de las clases respectivas son llamadas (posiblemente por diferentes personas que llaman con otras clases intermedias): A. Foo, B.Bar, A.Foo, ZT Las transacciones se realizarán solo después de que se llame a ZT. Si la aplicación se cierra por algún motivo, la transacción nunca se comprometerá a menos que se involucre ZT.

Las instancias pueden llamarse entre sí y, como ya se mencionó, no hay un punto de entrada común que llame a todas las instancias desde un solo punto de entrada (como una capa de servicio) que haría un objetivo fácil para la etiqueta transaccional de primavera.

Ahora la pregunta: ¿se puede resolver este problema usando aspectos? Si es así, ¿cuál podría ser el enfoque básico? Gracias.