2011-10-05 1 views
7

In che modo è possibile incapsulare azioni non di database in transazioni?Transazioni applicazione non database

Ad esempio, supponiamo di avere un certo numero di metodi/funzioni chiamati in sequenza, alcuni aggiornano il database, alcuni file di aggiornamento sul filesystem, alcuni parametri di aggiornamento nella HttpSession, alcuni aggiornano la cache, ecc. Se uno dei questi ultimi falliscono, come aggiornare la sessione, come posso ripristinare tutte le altre modifiche sul file system, nel DB, ecc.?

L'ambiente è un container Java Servlet come Tomcat con qualcosa di simile Struts2, ogni RDBMS, uno strato di persistenza come Hibernate o Ibatis, ecc

risposta

2

Tutti questi dovrebbero essere le risorse transazionali, in grado di partecipare a un 2 -phase protocollo di commit, al fine di fare ciò che vuoi.

A meno che non si sia verificato un errore nel codice, l'aggiornamento della sessione non dovrebbe mai fallire. Si potrebbe quindi farlo dopo che gli altri aggiornamenti hanno avuto successo. Il file system dovrebbe essere evitato se hai bisogno di qualcosa di transazionale. L'alternativa potrebbe essere quella di avviare il salvataggio nel file system, quindi eseguire gli aggiornamenti del database e accettare di avere file inutili nel file system se l'aggiornamento del DB non riesce.