2011-09-15 14 views
5

Mam aplikację GWT, w której użytkownicy utrzymują stronę przeglądarki oparta na przeglądarce przez czas nieokreślony. Co jakiś czas aktualizujemy aplikację - jeśli użytkownicy przeładują przeglądarkę po wykonaniu tej czynności, wszystko idzie dobrze. Jednak zwykle dzieje się tak, że używają już otwartej wersji aplikacji, tj. Wersji obsługiwanej przed aktualizacją, a następnie doświadczają niejasnych błędów związanych z RPC, ponieważ JavaScript po stronie klienta nie jest już zsynchronizowany z tym, co znajduje się na serwerze.GWT - w jaki sposób klient może wykryć, że jego javascript nie jest zsynchronizowany, jeśli serwer jest aktualizowany

Czy GWT ma jakiś mechanizm, który można włączyć lub włączyć do kodu, aby poradzić sobie z tym. Nie potrzebuję żadnego sprytnego obchodzenia się z sytuacją, np. próbując ponownie załadować aplikację i przywrócić bieżący stan użytkownika, wystarczy prosty dialog wyjaśniający, że klient i serwer nie są już zsynchronizowane, a aplikacja internetowa musi zostać przeładowana.

Odpowiedz

4

Dokumentacja interfejsu com.google.gwt.user.client.rpc.AsyncCallback<T> zawiera wskazówkę, jak to zrobić.

public void onFailure(Throwable caught) { 
    // Convenient way to find out which exception was thrown. 
    try { 
     throw caught; 
    } catch (IncompatibleRemoteServiceException e) { 
     // this client is not compatible with the server; cleanup and refresh the 
     // browser 
    } catch (InvocationException e) { 
     // the call didn't complete cleanly 
    } catch (ShapeException e) { 
     // one of the 'throws' from the original method 
    } catch (DbException e) { 
     // one of the 'throws' from the original method 
    } catch (Throwable e) { 
     // last resort -- a very unexpected exception 
    } 
    } 

Najprawdopodobniej chcą obsługiwać (pop-up okno Użytkownika) IncompatibleRemoteServiceException.

1

Nazywa się IncompatibleRemoteServiceException. Obsługa wyjątków, w tym tej, jest wymieniona w Dokumentacji Google Communicating with a Server.

+0

Czuję się zawstydzony, gdy patrzę na ślad stosu. Zwykle przeskakuję do najniższej przyczyny i ogólnie ignoruję wyjątki od pakowania. Gdybym spojrzał na wyjątek najwyższego poziomu, zobaczyłabym IncompatibleRemoteServiceException i może zostać pobrana podpowiedź od tej nazwy - zamiast tego skupiłem się na zawartym wyjątku SerializationException. –