Hey all,

We've been struggling with the issue of RPC forward/backward  
incompatibility for a little while and I thought I'd bring it to the  
list for discussion.

As some of you know, one of our use-cases for GWT is embedding the  
compiled JS in a Firefox extension.  Unfortunately, the lifetime of  
the code in the extension cannot be easily tied to the lifetime of the  
code on the server.  The consequence of this is that when our server- 
side code is updated, the client-side code starts throwing  
IncompatibleRemoteService exceptions until the user updates.  We also  
see this issue briefly during our website code updates - our load- 
balanced servers are incrementally updated with background code which  
means that for a brief period, some active users get RPC exceptions.

There's a number of ways we can work around it for the extension  
(forcing the user to update is the easiest), but this is somewhat  
inconvenient for our users.

The ideal solution would be offering a forward/backward compatible RPC  
protocol that would allow some flexibility in versioning between  
client and server. I'd like to be able to push out a server that is  
backward-compatible aware and have it able to serve downlevel requests  
for some period of time. For our website, the period of time would be  
a few minutes while all the backends update and the static code is  
pushed out.  For our extension, this period could be on the order of  
days or even a week.

One of the skunkworks projects I've been working for a while is a GWT  
port of Thrift (a versioned protocol similar to Protobuf), basically a  
direct eval RPC library that would let us use the versioned protocol  
to replace our RPC code. One of the big downsides is that we'd lose a  
lot of the niceties of GWT RPC, mostly smart objects and  
polymorphism.  It's getting close to completion, but it's been a while  
since I've last had a chance to work on it and the new deRPC branch  
has shown up.

Is the concept of versioning something that belongs in the core GWT  
RPC code, or is this something better suited for an external library?

Thanks,
Matt.



--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to