Thanks again.
I made my own implementation of the FutureCallback interface:
private static class FutureCallbackImpl implements
FutureCallback<HttpResponse> {
private HttpCoreContext coreContext;
public FutureCallbackImpl(HttpCoreContext coreContext) {
this.coreContext = coreContext;
}
@Override
public void cancelled() {
}
@Override
public void completed(HttpResponse response) {
System.out.println("completed" + "->" +
response.getStatusLine();
}
@Override
public void failed(Exception cause) {
System.out.println("failed" + "->" + cause);
}
}
And here is how I use it.
HttpAsyncRequester requester = new HttpAsyncRequester(httpproc);
final HttpHost target = new HttpHost("www.google.fi", 80, "http");
BasicHttpRequest request = new BasicHttpRequest("GET", "/");
for(int i=0; i<50; i++) {
HttpCoreContext coreContext = HttpCoreContext.create();
coreContext.setAttribute("index", i);
FutureCallbackImpl callBack = new
FutureCallbackImpl(coreContext);
requester.execute(
new BasicAsyncRequestProducer(target, request),
new BasicAsyncResponseConsumer(),
pool,
coreContext,
// Handle HTTP response from a callback
callBack
);
}
What I do here is to send 50 requests inside one loop.
However, each time I run the program the failed() callback method is called
a several times with the exception being
java.util.ConcurrentModificationException.
There seems to be a concurrency problem somewhere?
On Fri, Nov 22, 2013 at 2:37 PM, Oleg Kalnichevski <[email protected]> wrote:
> On Fri, 2013-11-22 at 14:27 +0200, Petteri Hentilä wrote:
> > A couple of comments.
> >
> > 1. I cannot pass the HttpContext to FutureCallback as a construction
> > parameter, because that class has only one parameterless constructor. I
> > also cannot put the HttpContext as the generic type for FutureCallback
> > because it gives me a compile error.
> >
>
> FutureCallback is an _interface_. One can have any constructor
> parameters for a class that implements this interface.
>
> > 2. I derived my own class from BasicAsyncResponseConsumer to have more
> > control over the response processing, but that class does not have the
> > correct methods that I would need. It has a method
> > responseReceived(HttpResponse) but it does not get HttpContext as a
> > parameter. It also has a method failed(Exception) but it does not get
> > HttpContext as a parameter either.
> >
>
> Same deal as with FutureCallback. You can pass any additional contextual
> parameters at the construction time.
>
> Oleg
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>