Транзакции приложений без базы данных - PullRequest
10 голосов
/ 06 октября 2011

Как можно инкапсулировать действия, не связанные с базой данных, в транзакции?

Например, скажем, у меня есть несколько методов / функций, вызываемых последовательно, некоторые обновляют базу данных, некоторые обновляют файлы в файловой системе, некоторые обновляют параметры в HttpSession, некоторые обновляют кэш и т. Д. Если одиниз последних происходит сбой, например, обновление сеанса, как я могу откатить все остальные изменения в файловой системе, в БД и т. д.?

Среда представляет собой контейнер сервлетов Java, такой как Tomcat, с чем-то вроде Struts2, любой RDBMS, постоянным слоем, таким как Hibernate или Ibatis и т. Д.

1 Ответ

4 голосов
/ 06 октября 2011

Все это должны быть транзакционные ресурсы, способные участвовать в протоколе двухфазной фиксации, чтобы делать то, что вы хотите.

Если в вашем коде нет ошибки, обновление сеанса никогда не должно завершаться ошибкой. Таким образом, вы можете сделать это после того, как другие обновления будут успешными. Следует избегать файловой системы, если вам нужно что-то транзакционное. В качестве альтернативы можно было бы начать с сохранения в файловой системе, затем выполнить обновления базы данных и разрешить иметь бесполезные файлы в файловой системе в случае сбоя обновления БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...