On Fri, 2013-11-22 at 15:49 +0200, Petteri Hentilä wrote:
> Yes, creating an separate request object for each request fixed the
> problem. Now it seems to work OK. I have yet to test timeouts. I suppose
> either the failed() or cancelled() method is called in a case of connection
> timeout.
> 

#failed()

Oleg

> 
> On Fri, Nov 22, 2013 at 3:37 PM, Oleg Kalnichevski <[email protected]> wrote:
> 
> > On Fri, 2013-11-22 at 15:10 +0200, Petteri Hentilä wrote:
> > > 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?
> > >
> >
> > Oh, where could only that be? Let me look at the stack trace. Hmm. No
> > stack trace. Let me try mind reading.
> >
> > What do you think should happen when you attempt to execute the _same_
> > request object 50 times using multiple CPU cores?
> >
> > Oleg
> >
> > >
> > >
> > > 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]
> > > >
> > > >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> >
> >



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to