Как отменить обновление 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".
Отмена не имеет никакого смысла на сервере, такие вещи должны управляться на клиенте. Я не сталкивался с каким-либо сценарием, когда на сервере требуется отменить функциональность. Поэтому, пожалуйста, укажите сценарий и код, через который вы хотите выполнить это.