Message-ID: <1639309861.5011.1369496916130.JavaMail.firstname.lastname@example.org> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_5010_1212920455.1369496916130" ------=_Part_5010_1212920455.1369496916130 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html
1. Add the jetty-gwt.jar to your lib/dependencies (if using jetty7, its = available in 7.0.0pre3 and up)
2. Edit your class to extend AsyncRemoteServiceServlet
3. Clear your gwt-cache(only the first time)
4. Recompile your gwt-project
The Google Web Toolkit allows Ajax applications to be developed in java = code using the traditional UI widget paradigm. The toolkit includes support= for RPC, but not for comet style Ajax push.
Unfortunately GWT has not made it easy to use continuations within their= RPC mechanism. Firstly they catch Throwable, so the Jetty RetryException = is caught. Secondly they have made most of the methods on the GWT servlet f= inal, so you cannot fix this by extension.
GWT 1.5.x and below
Luckily GWT is open sourced under the apache 2.0 license, so it was poss= ible to do a cut/paste/edit job to fix this. The OpenRemoteServiceServlet recently added to Jetty is a= version of GWTs RemoteServiceServlet without the final methods and a prote= cted method for extending exception handling.
Once the GWT remote service servlet has been opened up, it is trivial to= extend it to support Continuations, which has been done in AsyncRemoteServiceServlet.
Because GWT RPC uses POSTS, the body of the request is consumed when the= request is first handled and is not available when the request is retried.= To handle this, the parsed contents of the POST are stored as a request a= ttribute so they are available to retried requests without reparsing:
The OpenRemoteServiceServlet= is no longer needed.=C2=A0 The RemoteServiceServlet has been updated a= nd the limitations mentioned above are no more.=C2=A0 You can either patch = a copy of AsyncRemoteServiceServlet in yo= ur project, until a new jetty-gwt.jar release, or override the readContent(= HttpServletRequest request) and doUnexpectedFailure(Throwable caught) in yo= ur subclass.=C2=A0 Here is the override for the replaced/renamed readPayloa= dAsUtf8 (GWT 1.6.x), which is mentioned above.
The exception handling is also extended to allow the continuation RetryE= xception to propagate to the container. This has been done without any hard= dependencies on Jetty code. With these extensions, the AsyncRemoteServiceS= ervlet allows any GWT RCP method to use continuations to suspend/resume pro= cessing. All you need to do is to have your servlet implementation extend t= he org.mortbay.gwt.AsyncRemoteServiceServlet:
For example below is a Table class from http://www.gpokr.com where a = continuation is used by the service implementation to wait for an event to = be available for a player:
GWT 1.5.x and below
You will need to build and then include the jetty-gwt-<version>.ja= r in your webapp. The source is included with every download = of jetty. To build:
Note that OpenRemoteServiceServlet was creat=
ed due to the fact that it was not possible to subclass google's RemoteServ=
iceServlet (unless we use reflections)
Just extend RemoteServiceServlet and override readContent(HttpServletReq= uest request), shown above, and doUnexpectedFailure(Throwable caught).------=_Part_5010_1212920455.1369496916130--