Estoy tratando de encontrar la mejor manera de manejar transacciones a nivel de objeto (no a nivel de base de datos). Ejemplo corto: 4 objetos A, B, C y D. A inicia una transacción y llama a los métodos en B y C. Dentro de esta transacción, C también llama a D. Los métodos a los que se llama no deben participar siempre en esta transacción, pero también se pueden llamar por su cuenta. ¿Hay algún patrón para administrar las transacciones a nivel de objeto?Patrón de gestión de transacciones a nivel de objeto
Realmente no encontré algo, así que se me ocurrió esto: use un TransactionContext donde pueda registrar TransactionListeners. Si se inicia una transacción utilizando TransactionContext, inyectará la transacción en ejecución en cada uno de los oyentes registrados, que a su vez utilizará una transacción en ejecución o, si no, la iniciará por sí misma si es necesario. De esta manera soy bastante libre de decidir si quiero que un objeto participe en mi transacción o no.
El problema se produce cuando se tienen cadenas de llamadas de objetos como las de arriba. Al iniciar la transacción, sé que B y C deben participar en la transacción, así que los agrego al TransactionContext. ¿Pero qué hay de D? Realmente no quiero pasar el TransactionContext alrededor de B y C.
Agradecería algunas sugerencias sobre mi enfoque, así como algunos consejos sobre patrones comprobados (incluso mejores).
Sé que Spring y también el servidor de aplicaciones proporcionan esto, pero no quiero utilizar ninguno de ellos. Pero gracias por el puntero a Spring transactionmanagemenr. Voy a leer eso. – MicSim
En Java es un patrón bastante estándar y muchas bibliotecas lo implementan. – Loki
¿Por qué no quieres usar JTA o Spring? – Loki