【问题标题】:GWT Seamless DeploymentGWT 无缝部署
【发布时间】:2011-09-07 10:48:21
【问题描述】:

我想让 GWT 应用程序的部署变得顺畅。即当上传新版本的 gwt 应用程序时,应通知在其浏览器中具有旧版本客户端代码的用户。之后,用户可以刷新浏览器以获取最新版本。

我找到了描述如何实现这一点的文章: http://www.draconianoverlord.com/2010/07/07/gwt-seamless-upgrades.html

我面临的问题是发出 rpc 请求时,它失败了,这是正确的行为。但我没有在onFailure 方法中得到IncompatibleRemoteServiceException,而是得到StatusCodeException(500 服务器上的调用失败;有关详细信息,请参阅服务器日志)。 IncompatibleRemoteServiceException 服务器端抛出异常,但客户端没有相关信息。

如何解决这个问题?

【问题讨论】:

  • 你是怎么解决这个问题的?我有完全相同的问题。

标签: gwt gwt-rpc


【解决方案1】:

首先,我认为这个“食谱”不好。 RemoteServiceServlet 为您提供了为请求加载适当的序列化策略的钩子,这意味着允许“旧客户端”与“新服务器”通信,默认情况下它实际上应该做正确的事情:只需将新代码部署在一边旧的(您可以在删除之前保留旧的 *.cache.html 和 *.cache.js 一段时间,以帮助无缝迁移客户端,而不会出现GWT.runAsync 问题;这里重要的是您保留旧 * .gwt.rpc 文件)。

但是请注意,使用 RequestFactory 进行此类升级比使用 GWT-RPC 更容易,因为 RF 在构建之间生成稳定的混淆名称,这仅取决于接口或方法名称,而不取决于其签名或类型和数量类中的字段(如在 GWT-RPC 中)。
即使您重命名接口或方法,您也应该能够通过输入 ServiceLayerDecorator 来提供转换路径,以便将旧名称​​翻译到新名称。

不过,为了帮助诊断您的问题:IncompatibleRemoteServiceException 在服务器端抛出的位置在哪里?它在哪里处理?您的服务器日志中显示了什么?

免责声明:除了不需要无缝升级的原型,我实际上从未使用 GWT-RPC 部署过任何东西,因此以上内容更像是阅读 GWT-RPC 内部代码后的猜测。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 2013-03-23
    相关资源
    最近更新 更多