2011-09-15 16 views
5

Tôi có một ứng dụng GWT nơi người dùng giữ bên trình duyệt dựa trên ứng dụng mở vô thời hạn. Mỗi khi chúng tôi thường xuyên nâng cấp ứng dụng - nếu người dùng nhấn tải lại trong trình duyệt của họ sau khi điều này được thực hiện thì mọi thứ đều ổn. Tuy nhiên, điều thường xảy ra là họ tiếp tục sử dụng phiên bản ứng dụng đã mở, tức là phiên bản được phân phối trước khi nâng cấp và sau đó gặp phải các lỗi liên quan đến RPC vì Javascript phía máy khách không còn đồng bộ với những gì trên máy chủ.GWT - làm thế nào khách hàng có thể phát hiện rằng đó là javascript không đồng bộ nếu máy chủ được cập nhật

GWT có bất kỳ cơ chế nào không, bạn có thể bật hoặc kết hợp mã của bạn để đối phó với điều này. Tôi không cần xử lý thông minh tình huống, ví dụ: cố gắng tải lại ứng dụng và thiết lập lại trạng thái hiện tại của người dùng, một hộp thoại đơn giản giải thích rằng máy khách và máy chủ không còn đồng bộ nữa và ứng dụng web cần được tải lại sẽ là đủ.

Trả lời

4

Tài liệu về giao diện com.google.gwt.user.client.rpc.AsyncCallback<T> đưa ra gợi ý về cách thực hiện việc này.

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ạn có nhiều khả năng muốn xử lý (bật lên hộp thoại người dùng) IncompatibleRemoteServiceException.

1

Nó được gọi là IncompatibleRemoteServiceException và cách xử lý ngoại lệ bao gồm trường hợp ngoại lệ này được đề cập trong Tài liệu Communicating with a Server của Google.

+0

Tôi cảm thấy xấu hổ vì bây giờ tôi nhìn vào dấu vết ngăn xếp của mình. Tôi thường nhảy đến nguyên nhân thấp nhất và thường bỏ qua các ngoại lệ bao gói. Nếu tôi nhìn vào ngoại lệ cấp cao nhất tôi đã thấy IncompatibleRemoteServiceException và có thể được lấy một gợi ý từ tên - thay vào đó tôi chỉ tập trung vào SerializationException chứa. –

Các vấn đề liên quan