GWT RPC 调用从另一个 GWT RPC 调用获取返回对象

标签 gwt gwt-rpc

我有一个奇怪的问题(希望您能提供帮助):我正在开发一个 GWT Web 应用程序,该应用程序有时会同时进行超过 4 - 5 个 GWT RPC 调用 - 就时间而言。

每隔一段时间 - 每 15 个电话可能一次?一个调用的返回对象被“分配”给另一个调用。我通过在客户端使用 gwt-log 库来证明这一点。

这里 HistoryChangesCount 调用的返回对象也被分配给了 ModelingGetTemplates 调用。

因此在进行调用的客户端文件中产生 ClassCastException,与 onSuccess 方法位于同一行。

你对我如何避免这种情况有什么建议吗?

PS - 我在错误级别记录每个响应 object.toString()。我知道这不是最佳实践。这只是为了排除故障。

[14:38:01.026] "(-:-) 2014-04-03 14:38:01,025 [ERROR] getHistoryChangesCount - HistoryPreviewFacet - SUCCESS RETURNED: HistoryChangesCount{dateToNumberOfChangesMap={Mon Mar 31 03:00:00 GMT+300 2014=3}, lastUpdatedOn=Mon Mar 31 11:11:02 GMT+300 2014}
"
[14:38:01.163] "(-:-) 2014-04-03 14:38:01,162 [ERROR] modelingGetTemplates - ModelingTemplatesDropdown - SUCCESS RETURNED: HistoryChangesCount{dateToNumberOfChangesMap={Mon Mar 31 03:00:00 GMT+300 2014=3}, lastUpdatedOn=Mon Mar 31 11:11:02 GMT+300 2014}
"
[14:38:01.175] "(-:-) 2014-04-03 14:38:01,174 [ERROR] Browser: null
java.lang.ClassCastException
    at Unknown.iCb(StackTraceCreator.java:174)
    at Unknown.sd(StackTraceCreator.java:508)
    at Unknown.Txn(Throwable.java:46)
    at Unknown.kIc(Cast.java:46)
    at Unknown.rff(ModelingTemplatesDropdown.java:79)
    at Unknown.bXi(AsyncWrapperForRPCManager.java:38)
    at Unknown.Loe(RequestCallbackAdapter.java:232)
    at Unknown.MWb(Request.java:258)
    at Unknown.qXb(RequestBuilder.java:412)
    at Unknown.anonymous(XMLHttpRequest.java:351)
    at Unknown.eBb(Impl.java:189)
    at Unknown.hBb(Impl.java:242)
    at Unknown.anonymous(Impl.java:70)
"

以下是对modelingGetTemplates 的成功调用的样子:
[14:37:24.933] "(-:-) 2014-04-03 14:37:24,932 [ERROR] modelingGetTemplates - ModelingTemplatesDropdown - SUCCESS RETURNED: [Advanced Business Application, Advanced Business Transaction, TestTemplate]
"

我正在使用 Vanilla GWT-RPC。我只有一个扩展 AsyncWrapper 用于日志记录的类。我还为自己创建了一个客户端队列,将并行调用的数量限制为 4,但即便如此,它仍然会发生。

版本:
GWT:2.5.1
我也使用 Sencha GXT,不确定是否相关。

Here is a video of the issue reproducing - at 0:30 - this time another call get's the object from modelingGetTemplates.

最终结果是我的小部件永远停留在加载等待数据上。当然还有愤怒的用户:)

最佳答案

记录我解决这个问题的方式,而不是修复它:)(因为我找不到修复方法)

我创建了一个客户端 GWT RPC 调用队列。
UI 进行的任何 RPC 调用都会将调用注册到队列中,队列将管理(在高负载、读取延迟期间)调用的实际执行。

它的作用类似于线程池。我有一个常数,即一次可以进行多少并行调用,以及两次调用之间的最小时间间隔。我相信它最终被设置为 200 毫秒。

因此,通过执行上述操作,我(几乎)从未遇到过这个问题。频率太低了,没有人注意到了。

我猜测的原因如下:

我相信 GWT 框架有一些映射使用依赖于调用时间戳的键,如果两个调用同时发生,映射可能会切换调用,将结果困惑到调用映射。

关于GWT RPC 调用从另一个 GWT RPC 调用获取返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22837209/

相关文章:

html - GWT CSS 问题

java - 选择多种方式来设置 GWT 元素 ID

html - 面板漂浮在 GWT DialogBox 上

java - onResize 未调用

gwt - 在 GWT-RPC 中发送 ArrayList 作为参数

spring - 我应该为 GWT 应用程序构建 REST 后端吗

java - 如何突出显示 GWT 文本框

GWT - 如果服务器更新,客户端如何检测到它的 javascript 不同步

java - GWT RPC 数组访问