Как отменить обновление RequestFactory - PullRequest
10 голосов
/ 20 января 2012

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

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

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

Ответы [ 3 ]

1 голос
/ 09 августа 2012

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

  • 01: 00 пицца A сохранено
  • 01: 01 пицца A ингредиенты изменены
  • 01: 02 пиццаИнгредиенты изменили
  • 01: 03 отменить на 01: 01

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

0 голосов
/ 03 февраля 2012

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

class Contact {

    Integer id;
    Integer version;

    String name;
    String phoneNumber;

    //Transient
    Contact previousState;

}

Теперь в вашем постоянном вызове сделайте резервную копию текущих данных в previousState, а затем сохраните текущую сущность Contact.В вызове отмены скопируйте данные из previousState в «this».

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

0 голосов
/ 02 февраля 2012

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

...