Доступ к внешним ресурсам, таким как файловая система, в идеале должен осуществляться через JCA-соединитель . Хотя есть несколько постов, посвященных обсуждению этого, я так и не нашел готовый к использованию JCA-коннектор для транзакционного доступа к файловой системе, поэтому я начал писать один:
По другим проектам:
Обратите внимание, что, как только у вас будет более одного участника транзакции, приложение. Сервер действительно должен использовать распределенные транзакции, и все становится сложнее. Вы не должны недооценивать эту сложность (например, в базе данных есть другой механизм тайм-аута для распределенной транзакции).
Другой легкий подход, который следует рассмотреть, - это использование SFSB , который записывает данные в файловой системе. Если вы реализуете интерфейс SessionSynchronization
, вы получите обратные вызовы beforeCompletion
и afterCompletion
. Последнее указывает, была ли транзакция зафиксирована или откатана, и вы выполняете очистку, если это необходимо. Затем вы можете реализовать транзакционное поведение.