2012-01-20 20 views
10

Aktualizacja obiektu za pomocą GWT RPC można łatwo cofnąć. Musimy sklonować poprzedni stan obiektu w pamięci i zastosować go po cofnięciu.Jak cofnąć aktualizację RequestFactory

Ale kiedy używamy RequestFactory, nie ma konkretnej operacji aktualizacji. RequestFactory wysyła modyfikacje encji na serwer i aktualizuje same jednostki repozytorium. Nie możemy przechwycić procesu aktualizacji.

W jaki sposób należy zaimplementować cofanie aktualizacji dokonanych za pomocą usługi RequestFactory?

+0

Czy używasz InstanceRequest lub po prostu Request w RF, aby wywołać trwałość? – Andrejs

Odpowiedz

0

Żądanie fabryki nie aktualizuje encji serwera, dopóki nie uruchomisz żądania. Możesz więc po prostu uniknąć wywołania ognia(), aby zapobiec modyfikacjom na serwerze. Mam nadzieję, że to właśnie masz na myśli. Czy możesz opublikować kod, który demonstruje sposób aktualizowania encji i gdzie chcesz wykonać cofanie?

+0

"Cofnij" oznacza, że ​​modyfikacje na serwerze zostały już wykonane. Muszę przechwycić operację aktualizacji serwera, aby zapisać stan obiektu do przyszłego cofnięcia. –

0

Nie wiem, czy chciałbyś to zrobić. W tym celu, powiedzmy, że chcesz cofnąć zmiany w klasie, np. Kontakt, dodaj pole tego samego typu, coś w rodzaju poprzedniego stanu (po prostu uczyń go przejściowym, jeśli nie chcesz, aby to zepsuło twoją trwałość), aby Klasa wygląda następująco:

class Contact { 

    Integer id; 
    Integer version; 

    String name; 
    String phoneNumber; 

    //Transient 
    Contact previousState; 

} 

teraz w swojej utrzymywać połączenia, kopia zapasowa bieżących danych do previousState a następnie utrzymywać bieżący podmiot kontaktowy. Podczas cofania połączenia skopiuj dane z poprzedniego stanu do "tego".

Cofanie nie ma sensu na serwerze, takie rzeczy muszą być zarządzane przez klienta. Nie natknąłem się na żaden scenariusz, w którym funkcja cofania jest wymagana na serwerze. Więc proszę zacytuj scenariusz i kod, przez który chcesz to osiągnąć.

+0

Aby wykonać cofanie tylko na kliencie, należy zachować cały stan aplikacji na kliencie. Czy myślisz, że jest to możliwe w aplikacji GWT? –

+0

Zdecydowanie tak, ale nie potrzebujesz całego stanu aplikacji, jakaś jednostka, taka jak encja Kontakt w aplikacji AddressBook, jest tym, czym chciałbyś się "cofnąć", prawda? –

+0

Nie. Mylisz się. Rozważ na przykład uporządkowaną listę kontaktów. –

1

Powinieneś zajrzeć do modyfikacji struktur danych i tabel po stronie serwera. Uwzględnij tam model czasowy lub bitemporalny. Nie zawracaj sobie głowy utrzymywaniem w pamięci "starych" stanów bytów lub przechwytywaniem ich. Zachowaj poprzednie stany obiektów w nienaruszonym stanie z polami czasu. Cofnięcie oznacza zlokalizowanie wcześniejszej wersji według znacznika czasu i uczynienie jej aktualną. Możesz to zrobić jednocześnie dla wielu typów jednostek.

  • 01:00 pizzy Zapisany
  • 01:01 składniki pizzy zmienionym
  • 01:02 składniki pizzy zmienionym
  • 01:03 cofnąć do 01:01

Jeśli chcesz, możesz okresowo zamiatać bazę danych i czyścić stare wersje. Styl zapisu czasowego "tylko do dodania" może również przynieść korzyści w zakresie wydajności.