Skip to content

Instantly share code, notes, and snippets.

@brikis98
Created July 6, 2011 01:43
Show Gist options
  • Save brikis98/1066358 to your computer and use it in GitHub Desktop.
Save brikis98/1066358 to your computer and use it in GitHub Desktop.
Play framework async I/O gotchas
public class AsyncTest extends Controller
{
public static void gotchas()
{
params.put("foo", "bar"); // Check if changes to params survive the request being suspended
renderArgs.put("foo", "bar"); // Check if changes to renderArgs survive the request being suspended
final String foo = "bar"; // Must be declared final to use in the callback
F.Promise<WS.HttpResponse> remoteCall1 = WS.url("http://www.remote-service.com/data/1").getAsync();
F.Promise<WS.HttpResponse> remoteCall2 = WS.url("http://www.remote-service.com/data/2").getAsync();
F.Promise<WS.HttpResponse> remoteCall3 = WS.url("http://www.remote-service.com/data/3").getAsync();
F.Promise<List<WS.HttpResponse>> promises = F.Promise.waitAll(remoteCall1, remoteCall2, remoteCall3);
await(promises, new F.Action<List<WS.HttpResponse>>() // request gets suspended here
{
public void invoke(List<WS.HttpResponse> httpResponses)
{
System.out.println(params.get("foo")); // prints "bar"
System.out.println(renderArgs.get("foo")); // prints null
System.out.println(foo); // prints "bar"
render(httpResponses);
}
});
System.out.println("End"); // never called
}
}
@brikis98
Copy link
Author

brikis98 commented Aug 9, 2011

See Play framework and async I/O for more information.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment