2011-09-15 35 views
5

Kullanıcıların tarayıcı tabanlı süreyi süresiz olarak açık tuttuğu bir GWT uygulamasına sahibim. Her sık ​​sık uygulamayı yükseltiriz - kullanıcılar bittikten sonra tarayıcılarına tekrar basarsa her şey yolunda gider. Bununla birlikte, genellikle, uygulamanın zaten açık olan sürümünü, yani yükseltmeden önce sunulan bir sürümü kullanmaya devam etmeleri ve daha sonra istemci tarafında Javascript'in sunucuda olanlarla eşleşmediği için belirsiz RPC ile ilgili hatalar yaşadıklarıdır.GWT - sunucu güncellendiğinde javascript'in senkronizasyon dışı olduğunu nasıl algılayabilir

GWT'nin, bununla başa çıkabilmeniz için kodunuza girebileceğiniz veya dahil edebileceğiniz herhangi bir mekanizması vardır. Durumun akıllıca ele alınmasına ihtiyacım yok, ör. uygulamayı yeniden yüklemeye ve kullanıcının mevcut durumunu yeniden oluşturmaya çalışırken, istemci ve sunucunun artık senkronize edilmediğini ve web uygulamasının yeniden yüklenmesi gerektiğini açıklayan basit bir iletişim kutusu yeterli olacaktır.

cevap

4

com.google.gwt.user.client.rpc.AsyncCallback<T> arabiriminin belgelendirmesi, bunun nasıl yapılacağına dair bir ipucu verir.

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

Büyük olasılıkla IncompatibleRemoteServiceException kolu (pop-up kullanıcı iletişim) istiyorum.

1

IncompatibleRemoteServiceException olarak adlandırılır ve bununla ilgili istisnaların nasıl ele alınacağı, Google'ın Communicating with a Server Belgelerinde belirtilir.

+0

Şimdi utandığımı hissediyorum çünkü yığın izime bakıyorum. Genellikle en düşük nedenden ötürü atlar ve genellikle ambalajlama istisnalarını görmezden gelirim. En üst düzey istisnaya baksaydım, IncompatibleRemoteServiceException'ı görseydim ve adından bir ipucu alabilirdim - bunun yerine sadece SerializationException ürününe odaklandım. –