Thinking in Java. Помогите понять задание: part14.project

284
21 сентября 2017, 14:38

Проект. Напишите систему, использующую динамические заместители для реализации транзакций: заместитель закрепляет транзакцию, если опосредованный вызов выполнен успешно (т. е. не возбудил исключений) или выполняет отмену в случае неудачи. Закрепление и отмена должны работать для внешних текстовых файлов, что выходит за границы исключений Java. Уделите особое внимание атомарности операций.

Раз 20 перечитал задание, не понимаю, чего хочет автор... В решебнике для книги нет решения этого задания (скорее потому, что оно идёт не как упражнение).
Вопрос: Какой код будет являться эталонной реализацией данного проекта?

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

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface Payer {
    void pay(Object target);
}
class Human implements Payer {
    public void pay(Object target) {
        if (Math.random() < 0.5d)
            System.out.println(target);
        else
            throw new RuntimeException();
    }
}
public class TransactionMain {
    public static class TransactHandler implements InvocationHandler {
        private Object proxied;
        TransactHandler(Object realObject) {
            proxied = realObject;
        }
        public Object invoke(Object proxy, Method method, Object[] args) {
            Object result = null;
            try {
                result = method.invoke(proxied, args);
            } catch (Exception e) {
                System.err.println("Shutdown...");
                return null;
            }
            System.out.println("Transaction is committed");
            return result;
        }
    }
    public static void castAll(Payer p) {
        p.pay(new String("HelloWorld!"));
    }
    public static void main(String[] args) {
        Payer p = new Human();
        Payer pp = (Payer) Proxy.newProxyInstance(Payer.class.getClassLoader(), new Class<?>[] { Payer.class },
                new TransactionMain.TransactHandler(p));
        castAll(pp);
    }
}
READ ALSO
Как узнать индекс кнопки при клике

Как узнать индекс кнопки при клике

Есть массив из кнопок

195
Проблема путей пакетов в RMI

Проблема путей пакетов в RMI

Представим, что у нас есть два приложенияОни имеют разные пакеты

207
Авторизация в OAuth + Google + scribejava

Авторизация в OAuth + Google + scribejava

Все прикрутил и пример вставил, даже реализовал веб-проектНо все время возвращает body=null

217
Как реализовать Fragment.onAttach() в адаптере (RecyclerView.Adapter)

Как реализовать Fragment.onAttach() в адаптере (RecyclerView.Adapter)

Разрабатывается приложение, в котором используются фрагментыПытаюсь реализовать смену фрагмента по нажатию на любой item в recyclerView

207