Ответ 1
Доступ к внешним ресурсам, таким как файловая система, должен идеально проходить через JCA-коннектор. Хотя есть несколько сообщений, обсуждающих это, я никогда не нашел готового к использованию JCA-коннектора для транзакционного доступа к файловой системе, поэтому начал писать один:
- Посмотрите на: Разъем JCA: адаптер файловой системы. Он довольно простой, но управляет фиксацией/откатом файлов.
Относительно других проектов:
- Я не знаю точного статуса commons-transaction, кажется мне мертвым.
- Посмотрите JBoss Transactional File I/O, выглядит многообещающим.
- Посмотрите Filera: адаптер файлового ресурса, но я не думаю, что это транзакционный
Обратите внимание, что как только у вас будет более одного участника транзакции, приложение. серверу действительно нужно использовать распределенную транзакцию, и все усложняется. Вы не должны недооценивать эту сложность (например, в базе данных есть другой механизм тайм-аута для распределенной транзакции).
Другим легким подходом к рассмотрению является использование SFSB, который записывает в файловую систему. Если вы реализуете интерфейс SessionSynchronization
, вы получаете обратные вызовы beforeCompletion
и afterCompletion
. Позже указывается, была ли транзакция выполнена или откат, и при необходимости очистка. Затем вы можете реализовать транзакционное поведение.