From b92b3e991671274029f8f79e0313730764a2e638 Mon Sep 17 00:00:00 2001 From: mzemmour Date: Sun, 5 Jun 2016 16:29:23 +0300 Subject: [PATCH] use flow context for asynchronic http client --- .../http/apache/ApacheHttpClient.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/http-client-apache/src/main/java/com/cisco/oss/foundation/http/apache/ApacheHttpClient.java b/http-client-apache/src/main/java/com/cisco/oss/foundation/http/apache/ApacheHttpClient.java index b2887f3..52f2023 100644 --- a/http-client-apache/src/main/java/com/cisco/oss/foundation/http/apache/ApacheHttpClient.java +++ b/http-client-apache/src/main/java/com/cisco/oss/foundation/http/apache/ApacheHttpClient.java @@ -16,6 +16,8 @@ package com.cisco.oss.foundation.http.apache; +import com.cisco.oss.foundation.flowcontext.FlowContext; +import com.cisco.oss.foundation.flowcontext.FlowContextFactory; import com.cisco.oss.foundation.http.AbstractHttpClient; import com.cisco.oss.foundation.http.ClientException; import com.cisco.oss.foundation.http.HttpRequest; @@ -390,7 +392,9 @@ public void execute(HttpRequest request, ResponseCallback responseCallback, Load HttpHost httpHost = new HttpHost(requestUri.getHost(),requestUri.getPort(),requestUri.getScheme()); - httpAsyncClient.execute(httpHost, httpRequest, new FoundationFutureCallBack(this,request, responseCallback, serverProxy, loadBalancerStrategy, apiName)); + FlowContext flowContext = FlowContextFactory.getFlowContext(); + + httpAsyncClient.execute(httpHost, httpRequest, new FoundationFutureCallBack(this,request, responseCallback, serverProxy, loadBalancerStrategy, apiName, flowContext.getUniqueId())); } @@ -416,20 +420,23 @@ private static class FoundationFutureCallBack implements FutureCallback responseCallback, InternalServerProxy serverProxy, LoadBalancerStrategy loadBalancerStrategy, String apiName) { + private FoundationFutureCallBack(ApacheHttpClient apacheHttpClient, HttpRequest request, ResponseCallback responseCallback, InternalServerProxy serverProxy, LoadBalancerStrategy loadBalancerStrategy, String apiName, String flowContext) { this.responseCallback = responseCallback; this.apacheHttpClient = apacheHttpClient; this.serverProxy = serverProxy; this.loadBalancerStrategy = loadBalancerStrategy; this.apiName = apiName; this.request = request; + this.flowContext = flowContext; } @Override public void completed(org.apache.http.HttpResponse response) { - + FlowContextFactory.deserializeNativeFlowContext(flowContext); + serverProxy.setCurrentNumberOfAttempts(0); serverProxy.setFailedAttemptTimeStamp(0); @@ -444,7 +451,8 @@ public void completed(org.apache.http.HttpResponse response) { @Override public void failed(Exception ex) { - + FlowContextFactory.deserializeNativeFlowContext(flowContext); + try { loadBalancerStrategy.handleException(apiName, serverProxy, ex); } catch (Exception e) { @@ -462,6 +470,7 @@ public void failed(Exception ex) { @Override public void cancelled() { + FlowContextFactory.deserializeNativeFlowContext(flowContext); responseCallback.cancelled(); } }