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

时间:2014-04-03 12:06:00

标签: gwt gwt-rpc

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

每隔一段时间 - 也许每15个电话一次?一次通话中的返回对象被分配了#39;到另一个。我通过在客户端使用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.

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

1 个答案:

答案 0 :(得分:0)

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

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

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

所以通过以上所述我(几乎)从未遇到过这个问题。频率很低,没人注意到了。

我猜测原因如下:

我相信GWT框架有一些使用依赖于调用时间戳的密钥的映射,如果两个调用同时发生,映射可以切换调用,将结果搞乱到调用映射。 / p>