Repository: cxf Updated Branches: refs/heads/3.1.x-fixes 1f61dfba7 -> 6ec0e90dc
[CXF-7112]use Timer/TimerTask to check timeout for every async request to avoid create lots of thread Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/6ec0e90d Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/6ec0e90d Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/6ec0e90d Branch: refs/heads/3.1.x-fixes Commit: 6ec0e90dc12c2384612f201f54d1e6e7e7f45724 Parents: 1f61dfb Author: Freeman Fang <[email protected]> Authored: Sat Oct 29 07:09:39 2016 +0800 Committer: Freeman Fang <[email protected]> Committed: Sat Oct 29 07:09:39 2016 +0800 ---------------------------------------------------------------------- .../http/asyncclient/AsyncHTTPConduit.java | 19 ++++++++----------- .../http/asyncclient/AsyncHTTPConduitTest.java | 1 - 2 files changed, 8 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/6ec0e90d/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java ---------------------------------------------------------------------- diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java index dba9673..bc1212f 100644 --- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java +++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java @@ -38,6 +38,8 @@ import java.security.cert.Certificate; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; import java.util.concurrent.Future; import java.util.logging.Level; @@ -106,6 +108,8 @@ public class AsyncHTTPConduit extends URLConnectionHTTPConduit { volatile SSLContext sslContext; volatile SSLSession session; volatile CloseableHttpAsyncClient client; + volatile Timer timer; + public AsyncHTTPConduit(Bus b, EndpointInfo ei, @@ -113,6 +117,7 @@ public class AsyncHTTPConduit extends URLConnectionHTTPConduit { AsyncHTTPConduitFactory factory) throws IOException { super(b, ei, t); this.factory = factory; + this.timer = new Timer(); } public synchronized CloseableHttpAsyncClient getHttpAsyncClient() throws IOException { @@ -642,7 +647,7 @@ public class AsyncHTTPConduit extends URLConnectionHTTPConduit { protected void handleResponseAsync() throws IOException { isAsync = true; - new CheckReceiveTimeoutForAsync().start(); + timer.schedule(new CheckReceiveTimeoutForAsync(), csPolicy.getReceiveTimeout()); } protected void closeInputStream() throws IOException { @@ -859,17 +864,9 @@ public class AsyncHTTPConduit extends URLConnectionHTTPConduit { } } - class CheckReceiveTimeoutForAsync extends Thread { + class CheckReceiveTimeoutForAsync extends TimerTask { public void run() { - long startTime = System.currentTimeMillis(); - while (httpResponse == null && exception == null - && (System.currentTimeMillis() - startTime) < csPolicy.getReceiveTimeout()) { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } + if (httpResponse == null) { outbuf.shutdown(); inbuf.shutdown(); http://git-wip-us.apache.org/repos/asf/cxf/blob/6ec0e90d/rt/transports/http-hc/src/test/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitTest.java ---------------------------------------------------------------------- diff --git a/rt/transports/http-hc/src/test/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitTest.java b/rt/transports/http-hc/src/test/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitTest.java index fb0f78c..0c350e5 100644 --- a/rt/transports/http-hc/src/test/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitTest.java +++ b/rt/transports/http-hc/src/test/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitTest.java @@ -139,7 +139,6 @@ public class AsyncHTTPConduitTest extends AbstractBusClientServerTestBase { HTTPConduit c = (HTTPConduit)ClientProxy.getClient(g).getConduit(); c.getClient().setReceiveTimeout(3000); try { - assertEquals("Hello " + request, g.greetMeLater(-5000)); Response<GreetMeLaterResponse> future = g.greetMeLaterAsync(-5000L); future.get(); fail();
