2011-09-15 10 views
5

Tengo una aplicación GWT donde los usuarios mantienen el lado de la aplicación abierto por tiempo indefinido. De vez en cuando actualizamos la aplicación: si los usuarios presionan volver a cargar en sus navegadores una vez hecho esto, todo va bien. Sin embargo, lo que suele ocurrir es que continúan utilizando la versión ya abierta de la aplicación, es decir, una versión publicada antes de la actualización, y luego experimentan errores relacionados con RPC, ya que el lado del cliente Javascript ya no está sincronizado con lo que hay en el servidor.GWT: cómo puede el cliente detectar que su javascript no está sincronizado si el servidor se actualiza

GWT tiene algún mecanismo, que puede habilitar o incorporar en su código, para hacer frente a esto. No necesito ningún manejo inteligente de la situación, p. tratando de volver a cargar la aplicación y restablecer el estado actual del usuario, un diálogo simple que explique que el cliente y el servidor ya no están sincronizados y que la aplicación web necesita ser recargada sería suficiente.

Respuesta

4

La documentación de la interfaz com.google.gwt.user.client.rpc.AsyncCallback<T> da una pista sobre cómo hacer esto.

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

Lo más probable quieren manejar (pop-up del diálogo de usuario) del IncompatibleRemoteServiceException.

1

Se llama IncompatibleRemoteServiceException, y la forma de manejar excepciones, incluida esta, se menciona en la Documentación de Communicating with a Server de Google.

+0

Me siento avergonzado ahora que veo mi rastro de pila. Usualmente salto a la causa más baja y generalmente ignoro las excepciones de envoltura. Si hubiera mirado la excepción de nivel superior, habría visto IncompatibleRemoteServiceException y podría tomarse como una pista del nombre; en su lugar, me centré en la SerializationException contenida. –

Cuestiones relacionadas