8181import org .glassfish .grizzly .ssl .SSLEngineConfigurator ;
8282import org .glassfish .grizzly .ssl .SSLFilter ;
8383import org .glassfish .grizzly .strategies .SameThreadIOStrategy ;
84+ import org .glassfish .grizzly .strategies .WorkerThreadIOStrategy ;
8485import org .glassfish .grizzly .utils .BufferOutputStream ;
8586import org .glassfish .grizzly .utils .DelayedExecutor ;
8687import org .glassfish .grizzly .utils .IdleTimeoutFilter ;
104105import java .util .Map ;
105106import java .util .concurrent .Callable ;
106107import java .util .concurrent .ExecutionException ;
108+ import java .util .concurrent .ExecutorService ;
107109import java .util .concurrent .Semaphore ;
108110import java .util .concurrent .TimeUnit ;
109111import java .util .concurrent .TimeoutException ;
@@ -225,6 +227,10 @@ public void close() {
225227 try {
226228 connectionManager .destroy ();
227229 clientTransport .stop ();
230+ final ExecutorService service = clientConfig .executorService ();
231+ if (service != null ) {
232+ service .shutdown ();
233+ }
228234 if (timeoutExecutor != null ) {
229235 timeoutExecutor .stop ();
230236 }
@@ -277,8 +283,6 @@ protected <T> ListenableFuture<T> execute(final Connection c,
277283
278284
279285 protected void initializeTransport (AsyncHttpClientConfig clientConfig ) {
280-
281-
282286
283287 final FilterChainBuilder fcb = FilterChainBuilder .stateless ();
284288 fcb .add (new AsyncHttpClientTransportFilter ());
@@ -354,7 +358,7 @@ public void onTimeout(Connection connection) {
354358 }
355359 fcb .add (eventFilter );
356360 fcb .add (clientFilter );
357-
361+
358362 GrizzlyAsyncHttpProviderConfig providerConfig =
359363 (GrizzlyAsyncHttpProviderConfig ) clientConfig .getAsyncHttpProviderConfig ();
360364 if (providerConfig != null ) {
@@ -363,10 +367,10 @@ public void onTimeout(Connection connection) {
363367 if (customizer != null ) {
364368 customizer .customize (clientTransport , fcb );
365369 } else {
366- clientTransport . setIOStrategy ( SameThreadIOStrategy . getInstance () );
370+ doDefaultTransportConfig ( );
367371 }
368372 } else {
369- clientTransport . setIOStrategy ( SameThreadIOStrategy . getInstance () );
373+ doDefaultTransportConfig ( );
370374 }
371375
372376 clientTransport .setProcessor (fcb .build ());
@@ -401,6 +405,16 @@ void touchConnection(final Connection c, final Request request) {
401405
402406
403407 // --------------------------------------------------------- Private Methods
408+
409+ private void doDefaultTransportConfig () {
410+ final ExecutorService service = clientConfig .executorService ();
411+ if (service != null ) {
412+ clientTransport .setIOStrategy (WorkerThreadIOStrategy .getInstance ());
413+ clientTransport .setWorkerThreadPool (service );
414+ } else {
415+ clientTransport .setIOStrategy (SameThreadIOStrategy .getInstance ());
416+ }
417+ }
404418
405419
406420 private <T > CompletionHandler <WriteResult > createWriteCompletionHandler (final GrizzlyResponseFuture <T > future ) {
0 commit comments