2011-10-05 11 views
7

W jaki sposób można hermetyzować akcje inne niż bazy danych w transakcje?Transakcje aplikacji niebędących bazami danych

Na przykład, mam kilka metod/funkcji wywoływanych w sekwencji, niektóre aktualizują bazę danych, niektóre pliki aktualizacji w systemie plików, niektóre parametry aktualizacji w HttpSession, niektóre aktualizują pamięć podręczną, itp. Jeśli jeden z te ostatnie zawierują się, np. aktualizując sesję, jak mogę wycofać wszystkie inne zmiany w systemie plików, w bazie danych itp.?

Środowisko jest kontenerem Java Servlet jak Tomcat z czymś Struts2, wszelkich RDBMS, warstwy trwałości jak Hibernate lub iBatis itp

Odpowiedz

2

Wszystkie te mogłyby być środki transakcyjne, zdolnymi do udziału w 2 protokół zatwierdzania fazy, aby zrobić to, co chcesz.

Jeśli nie masz błędu w kodzie, aktualizacja sesji nigdy nie powinna zawieść. W ten sposób można to zrobić po pomyślnym zakończeniu innych aktualizacji. Systemu plików należy po prostu unikać, jeśli potrzebujesz czegoś transakcyjnego. Alternatywą może być rozpoczęcie zapisywania w systemie plików, a następnie aktualizowanie bazy danych i akceptowanie niepotrzebnych plików w systemie plików, jeśli aktualizacja bazy danych zawiedzie.