On Thu, 2012-11-15 at 16:42 -0500, Sachin Nikumbh wrote: > Hi, > > I have successfully used the HTTP Async client. It's working great for the > most part. In my application I am creating multiple instances > of DefaultHttpAsyncClient. However, I > get java.nio.channels.AsynchronousCloseException once in a while with > following stack: > > **************************************************************************************** > ..............Nov 15, 2012 4:23:41 PM > org.apache.http.impl.nio.client.LoggingAsyncRequestExecutor exception > SEVERE: http-outgoing-3 [CLOSED] HTTP protocol exception: null > java.nio.channels.AsynchronousCloseException > at > java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:185) > at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:270) > at > org.apache.http.impl.nio.reactor.SessionInputBufferImpl.fill(SessionInputBufferImpl.java:97) > at > org.apache.http.impl.nio.codecs.AbstractMessageParser.fillBuffer(AbstractMessageParser.java:115) > at > org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:167) > at > org.apache.http.impl.nio.DefaultHttpClientIODispatch.onInputReady(DefaultHttpClientIODispatch.java:125) > at > org.apache.http.impl.nio.DefaultHttpClientIODispatch.onInputReady(DefaultHttpClientIODispatch.java:49) > at > org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:112) > at > org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:160) > at > org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:342) > at > org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:320) > at > org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:280) > at > org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:106) > at > org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:604) > at java.lang.Thread.run(Thread.java:662) > **************************************************************************************** > > Following is the snippet of how I am using an instance of > DefaultHttpAsyncClient in my code: > > **************************************************************************************** > HttpAsyncClient httpClientAsync = new DefaultHttpAsyncClient(); > httpClientAsync.start(); > final HttpPost postReq = new HttpPost(mpsUrl); > postReq.setEntity(new ByteArrayEntity(mlParams.toByteArray())); > final Future<HttpResponse> future = httpClientAsync.execute(postReq, null); > final HttpResponse response = future.get(); > // DO SOMETHING WITH REPOSNSE > httpClientAsync.shutdown(); > **************************************************************************************** > > Can the shutdown() call on one instance affect other instances > of DefaultHttpAsyncClient? Is there any global state that multiple > instances of DefaultHttpAsyncClient share that may be causing this problem? >
No, it cannot, as long those instances do not share a common pool of connections. I would recommend using only one instance of DefaultHttpAsyncClient per distinct HTTP service. Creating a new DefaultHttpAsyncClient instance for each and every request is enormously wasteful and inefficient. Oleg --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
