Как отменить обновление RequestFactory

Обновление объекта через GWT RPC можно легко отменить. Нам нужно клонировать предыдущее состояние объекта в памяти и применять его при отмене.

Но когда мы используем RequestFactory, нет конкретной операции обновления. RequestFactory отправляет изменения сущности на сервер и сам обновляет объекты репозитория. Мы не можем перехватить процесс обновления.

Как мне выполнить отмену обновлений, сделанных с помощью RequestFactory?

Ответ 1

Вы должны изучить модификацию своих структур и таблиц на стороне сервера. Включите там временную или бимпоральную модель. Не беспокойтесь, пытаясь удерживать "старые" состояния объектов в памяти или перехватывать их. Сохраняйте прежние состояния объектов без изменений во времени. Отмена означает поиск предыдущей версии по метке времени и ее текущее. Вы можете сделать это и для нескольких типов объектов одновременно.

  • 01:00 pizza Сохраненный
  • 01:01 pizza Изменены ингредиенты
  • 01:02 pizza Изменены ингредиенты
  • 01:03 отменить до 01:01

Если вы хотите, вы можете периодически подметать свою базу данных и очищать старые версии. Стиль "добавления только" временных записей также может принести пользу производительности.

Ответ 2

Запрос factory не обновляет объект сервера, пока вы не запустили запрос. Таким образом, вы можете просто избежать вызова пожара(), чтобы предотвратить изменения на сервере. Надеюсь, это то, что вы имели в виду. Можете ли вы опубликовать код, который демонстрирует то, как вы обновляете объект, и где вы хотите выполнить отмену?

Ответ 3

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

class Contact {

    Integer id;
    Integer version;

    String name;
    String phoneNumber;

    //Transient
    Contact previousState;

}

Теперь в вашем персистентном вызове создайте резервные копии текущих данных в предыдущем состоянии и затем сохраняйте текущий объект Contact. В обратном вызове копируйте данные с предыдущего состояния на "this".

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