GWT无缝部署

GWT无缝部署,gwt,gwt-rpc,Gwt,Gwt Rpc,我想让GWT应用程序的部署看起来毫无意义。也就是说,当上传新版本的gwt应用程序时,应该通知浏览器中有旧版本客户端代码的用户。之后,用户可以刷新浏览器以获取最新版本 我找到了描述如何实现这一目标的文章: 我面临的问题是,当发出rpc请求时,它会失败,这是正确的行为。但是,我没有在onFailure方法中获取不兼容的RemoteServiceException,而是在服务器上获取StatusCodeException 500调用失败;有关详细信息,请参阅服务器日志。CompatibileMote

我想让GWT应用程序的部署看起来毫无意义。也就是说,当上传新版本的gwt应用程序时,应该通知浏览器中有旧版本客户端代码的用户。之后,用户可以刷新浏览器以获取最新版本

我找到了描述如何实现这一目标的文章:

我面临的问题是,当发出rpc请求时,它会失败,这是正确的行为。但是,我没有在onFailure方法中获取不兼容的RemoteServiceException,而是在服务器上获取StatusCodeException 500调用失败;有关详细信息,请参阅服务器日志。CompatibileMoteServiceException在服务器端引发,但客户端没有相关信息


如何解决这个问题?

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

但是请注意,使用RequestFactory进行此类升级要比使用GWT-RPC容易得多,因为RF会在构建之间生成稳定的模糊名称,这些名称只取决于接口或方法名称,而不是GWT-RPC中的签名或类中字段的类型和数量。 即使重命名接口或方法,也应该能够通过抛出ServiceLayerCorator来提供转换路径,以便将旧名称转换为新名称

帮助诊断您的问题:服务器端抛出的不兼容RemoteServiceException在哪里?在哪里处理?服务器日志中显示了什么


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

您最终是如何修复的?我有完全相同的问题。