2014-10-25 3 views
1

Учитывая, что у меня есть простая задача: обработать часть данных и добавить ее в файл. Это нормально, если у меня нет исключений, но это может произойти. Если что-то пойдет не так, я хотел бы удалить все изменения из файла.Что такое простейшая структура транзакций в Java?

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

Кроме того, возможно, я работаю с базой данных, которая не поддерживает транзакции (насколько мне известно, MongoDB этого не делает), поэтому я бы как-то откатился от нее.

Да, я могу исправить проблему с моим файлом вручную, просто создав резервную копию файла, а затем заменив его. Но в целом выглядит так, как будто мне нужна структура транзакций.

Я не хочу использовать Весенний монстр для этого. Это слишком много. И у меня нет контейнера ELB для управления EJB. У меня есть простое автономное приложение Java, но для этого требуется поддержка транзакций.

Есть ли у меня какие-то другие опции вместо подключения пружины или EJB?

+0

Вам не нужны транзакции на случай, если вы одиночные. В противном случае вы можете просто заблокировать файл, используя [java.nio.channels.FileLock] (http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileLock.html). –

+0

Вам нужны транзакции с базами данных, которые их не поддерживают? И как весна «слишком много»? –

+0

Маркус, почему? Я просто хочу иметь простой способ отменить мои изменения. Это не зависит от количества потоков. – MiamiBeach

ответ

0

Если вы не хотите использовать пружину, попробуйте реализует простой двухфазной фиксации механизма: Two-Phase Commit Protocol

0

Я не эксперт Java, но это звучит просто.

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

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

+0

Слияние на самом деле не так просто сделать своевременно. Подготовка данных в буфере, блокировка исходного файла, очистка буфера до этого файла и освобождение блокировки делает то же самое и является потокобезопасным. –

Смежные вопросы