2012-01-20 3 views
10

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

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

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

+0

Вы используете InstanceRequest или просто запрашиваете в RF, чтобы вызывать упорство? – Andrejs

ответ

0

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

+0

«Отменить» означает, что изменения на сервере уже выполнены. Мне нужно перехватить операцию обновления сервера, чтобы сохранить состояние объекта в будущем. –

0

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

class Contact { 

    Integer id; 
    Integer version; 

    String name; 
    String phoneNumber; 

    //Transient 
    Contact previousState; 

} 

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

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

+0

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

+0

Это определенно, но вам не нужно все состояние приложения, какой-то объект, как объект Contact в приложении AddressBook, является тем, что вам было бы интересно «отменить» правильно? –

+0

Нет. Вы ошибаетесь. Рассмотрим упорядоченный список контактов, например. –

1

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

  • 01:00 пиццы Сохраненный
  • 01:01 пицца А ингредиенты изменили
  • 01:02 пицца А ингредиенты изменили
  • 01:03 отменить до 01:01

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

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