[ 
https://issues.apache.org/jira/browse/THRIFT-137?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Roger Meier resolved THRIFT-137.
--------------------------------

    Resolution: Won't Fix

issue is too old, please reopen or create a new issue and patch if you need 
this.
see http://thrift.apache.org/docs/HowToContribute/
                
> GWT support for Thrift
> ----------------------
>
>                 Key: THRIFT-137
>                 URL: https://issues.apache.org/jira/browse/THRIFT-137
>             Project: Thrift
>          Issue Type: New Feature
>          Components: Java - Compiler, Java - Library
>            Reporter: Fredrik Hedberg
>            Priority: Minor
>         Attachments: GWTHelper.java, thrift-compiler-gwt-path, 
> thrift-gwt-2.diff, thrift-gwt-3.diff, thrift-gwt-4.diff, thrift-gwt.diff
>
>
> As previously discussed on the mailinglist, using Thrift from Google Web 
> Toolkit (GWT) applications (AJAX) would be nice, as it does not only allow 
> you to consume existing Thrift services from GWT applications, but also means 
> that you now can write GWT-consumable RPC services in any language (and say 
> host them on Google Appengine) that are practically source-code compatible 
> with the official GWT RPC framework.
> Doing this presents two challanges:
> 1) The GWT compiler only supports a subset of the JRE libraries (luckily, 
> this is rather easy to work around).
> 2) As the A in AJAX hints, the only way of doing RPC is asynchronously, 
> something not supported by Thrift, by using the XMLHttpRequest object in the 
> browser.
> Here's what I've done (an excerpt from the mailing-list):
> --snip--
> 1) Created a stripped down jar of Thrift, axed most protocol, transport and 
> server implementations, in order to get a JavaScript-translatable version of 
> Thrift. I did not need to change any of the base Thrift classes, nor modify 
> the compiler for GWT to translate the structs, but I might have missed 
> something here (Mathias?).
> 2) Added an option for the Thrift Java compiler to generate asynchronous 
> service interfaces and client proxies. This is manifested as:
> public class Repository {
>  public interface Iface {
>    public Document get_document(String uri) throws TException;
>    public int get_count() throws TException;
>  }
>  public interface AsyncIface {
>    public void get_document(String uri, TAsyncCallback<Document>
> callback) throws TException;
>    public void get_count(TAsyncCallback<Integer> callback) throws TException;
>  }
> ...
> This is done in line with GWT's RPC framework and gives the developer the 
> standard synchronous interface to implement on the server side (I use it with 
> embedded Jetty in a daemon) and an asynchonous interface to use in the GWT 
> client.  AsyncCallback<T> just has a plain onSuccess(T result) method.
> 3) Implemented a client transport using GWT's RequestBuilder (the 
> XmlHttpRequest abstraction) that executes the TAsyncCallback asynchronously 
> when the response has been received. 
> 4) Modified the JSONProtocol slightly to be fully JavaScript-translatable. 
> This could probably be more efficiently done by using GWT's JSNI framework, 
> but I really haven't had the time to optimize anything yet.
> --snip--
> This solution works really well for my problem, but it's half-assed in two 
> ways. 
> 1) It only allows for asynchronous client transports (as in the case of the 
> XMLHttpRequest object) and not on the server side (with messages coming back 
> in a non-sequential order).
> 2) I'm not sure how to solve the client library issues. Right now, I've moved 
> the core classes (those required on the client (GWT) side of things) into 
> com.facebook.thrift.gwt,  while keeping everything else where they are. This 
> allows the GWT compiler to translate com.facebook.thrift.gwt.* while using 
> the same jar both on the client and server. This is not very elegant for 
> people not using GWT (which I suppose is 99.99% of the audience) but short of 
> maintaining two separate Java client libraries, I'm not sure how to solve 
> this issue.
> The attached patch is only for the compiler, and does not produce compilable 
> client code without the modified client library. Just wanted to get some 
> input before producing a somewhat committable patch. Comments? Ideas?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to