2011-09-15 12 views
5

Ho un'applicazione GWT in cui gli utenti mantengono aperto il lato basato su browser dell'applicazione a tempo indeterminato. Ogni tanto aggiorniamo l'applicazione - se gli utenti tornano a ricaricarsi nei loro browser dopo che questo è stato fatto, allora va tutto bene. Tuttavia, ciò che accade di solito è che continuano a utilizzare la versione dell'applicazione già aperta, vale a dire una versione servita prima dell'aggiornamento e quindi riportano oscuri errori relativi a RPC poiché il lato client Javascript non è più sincronizzato con ciò che si trova sul server.GWT: in che modo il client può rilevare che il javascript non è sincronizzato se il server viene aggiornato

Il GWT dispone di un meccanismo che è possibile abilitare o incorporare nel codice per far fronte a questo. Non ho bisogno di alcun trattamento intelligente della situazione, ad es. cercando di ricaricare l'applicazione e ristabilire lo stato corrente dell'utente, una semplice finestra di dialogo che spiega che client e server non sono più sincronizzati e che l'applicazione web deve essere ricaricata sarebbe sufficiente.

risposta

4

La documentazione dell'interfaccia com.google.gwt.user.client.rpc.AsyncCallback<T> fornisce un suggerimento su come eseguire questa operazione.

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 
    } 
    } 

Molto probabilmente desidera gestire (pop-up nella finestra di utente) il IncompatibleRemoteServiceException.

1

Si chiama IncompatibleRemoteServiceException e come gestire le eccezioni incluso questo è menzionato nella documentazione di Google Communicating with a Server.

+0

Ora mi sento in imbarazzo a guardare la traccia dello stack. Di solito salto alla causa più bassa e generalmente ignoro le eccezioni di avvolgimento. Se avessi esaminato l'eccezione di primo livello avrei visto IncompatibleRemoteServiceException e potrebbe essere preso un suggerimento dal nome - invece mi sono concentrato sulla SerializationException contenuta. –

Problemi correlati