【问题标题】:GWT RPC Call gets return object from another GWT RPC callGWT RPC 调用从另一个 GWT RPC 调用获取返回对象
【发布时间】:2014-05-15 06:09:34
【问题描述】:

我有一个奇怪的问题(希望您能提供帮助):我正在开发一个 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]
"

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

版本: 总重量: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.

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

【问题讨论】:

  • 能否包含两个方法签名以及记录响应对象的代码?
  • 您不能进行一次调用(或更少调用)来返回您需要的对象吗?
  • 我想这可能是永久解决方案的一部分......但是我不再从事这个项目了。我确实找到了另一种(不太明显)的方法来解决它 99% 的时间。我会写一个关于我是如何做到的答案。

标签: gwt gwt-rpc


【解决方案1】:

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

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

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

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

我对原因的猜测如下:

我相信 GWT 框架有一些映射使用取决于调用时间戳的键,如果两个调用同时发生,映射可能会切换调用,从而将结果弄乱到调用映射。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    相关资源
    最近更新 更多