This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new 48596d6f CAMEL-15047: camel-saleforce - Fix services to do correctly start|stop logic in their doStart/doStop methods and defer creating the http clients to this phase so they are created at correct moment. Also for buuld time optimizations via camel-quarkus/graalvm would benefit from this. 48596d6f is described below commit 48596d6fcac90ce01067b0d27174d1757621790c Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon May 11 16:07:17 2020 +0200 CAMEL-15047: camel-saleforce - Fix services to do correctly start|stop logic in their doStart/doStop methods and defer creating the http clients to this phase so they are created at correct moment. Also for buuld time optimizations via camel-quarkus/graalvm would benefit from this. --- .../component/salesforce/SalesforceComponent.java | 2 +- .../salesforce/internal/SalesforceSession.java | 21 ++++-------- .../internal/client/AbstractClientBase.java | 12 ++++--- .../internal/client/DefaultAnalyticsApiClient.java | 2 -- .../internal/processor/AbstractRestProcessor.java | 37 ++++++++++++---------- .../processor/AbstractSalesforceProcessor.java | 30 ++++++++++++------ .../internal/processor/AnalyticsApiProcessor.java | 29 ++++++++--------- .../internal/processor/BulkApiProcessor.java | 25 ++++++++------- .../internal/processor/CompositeApiProcessor.java | 28 ++++++++-------- .../internal/processor/XmlRestProcessor.java | 2 -- 10 files changed, 94 insertions(+), 94 deletions(-) diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java index 9309ab1..d476fb0 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java @@ -302,7 +302,7 @@ public class SalesforceComponent extends DefaultComponent implements SSLContextP return result; } - protected SalesforceHttpClient getHttpClient() { + public SalesforceHttpClient getHttpClient() { return httpClient; } diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java index cf21315..94011e6 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java @@ -37,8 +37,6 @@ import java.util.concurrent.TimeoutException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.camel.CamelContext; -import org.apache.camel.RuntimeCamelException; -import org.apache.camel.Service; import org.apache.camel.component.salesforce.AuthenticationType; import org.apache.camel.component.salesforce.SalesforceHttpClient; import org.apache.camel.component.salesforce.SalesforceLoginConfig; @@ -48,6 +46,7 @@ import org.apache.camel.component.salesforce.api.utils.JsonUtils; import org.apache.camel.component.salesforce.internal.dto.LoginError; import org.apache.camel.component.salesforce.internal.dto.LoginToken; import org.apache.camel.support.jsse.KeyStoreParameters; +import org.apache.camel.support.service.ServiceSupport; import org.apache.camel.util.ObjectHelper; import org.eclipse.jetty.client.HttpConversation; import org.eclipse.jetty.client.api.ContentResponse; @@ -59,7 +58,7 @@ import org.eclipse.jetty.util.Fields; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class SalesforceSession implements Service { +public class SalesforceSession extends ServiceSupport { private static final String JWT_SIGNATURE_ALGORITHM = "SHA256withRSA"; @@ -345,23 +344,15 @@ public class SalesforceSession implements Service { } @Override - public void start() { + public void doStart() throws Exception { // auto-login at start if needed - try { - login(accessToken); - } catch (SalesforceException e) { - throw RuntimeCamelException.wrapRuntimeCamelException(e); - } + login(accessToken); } @Override - public void stop() { + public void doStop() throws Exception { // logout - try { - logout(); - } catch (SalesforceException e) { - throw RuntimeCamelException.wrapRuntimeCamelException(e); - } + logout(); } public long getTimeout() { diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java index c3bb17a..70dba1d 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java @@ -40,7 +40,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.thoughtworks.xstream.XStream; import org.apache.camel.Exchange; import org.apache.camel.Message; -import org.apache.camel.Service; import org.apache.camel.component.salesforce.SalesforceHttpClient; import org.apache.camel.component.salesforce.SalesforceLoginConfig; import org.apache.camel.component.salesforce.api.SalesforceException; @@ -49,6 +48,7 @@ import org.apache.camel.component.salesforce.api.dto.RestError; import org.apache.camel.component.salesforce.internal.PayloadFormat; import org.apache.camel.component.salesforce.internal.SalesforceSession; import org.apache.camel.component.salesforce.internal.dto.RestErrors; +import org.apache.camel.support.service.ServiceSupport; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.HttpContentResponse; import org.eclipse.jetty.client.api.ContentProvider; @@ -66,7 +66,7 @@ import org.eclipse.jetty.http.HttpStatus; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class AbstractClientBase implements SalesforceSession.SalesforceSessionListener, Service, HttpClientHolder { +public abstract class AbstractClientBase extends ServiceSupport implements SalesforceSession.SalesforceSessionListener, HttpClientHolder { protected static final String APPLICATION_JSON_UTF8 = "application/json;charset=utf-8"; protected static final String APPLICATION_XML_UTF8 = "application/xml;charset=utf-8"; @@ -92,7 +92,6 @@ public abstract class AbstractClientBase implements SalesforceSession.Salesforce } AbstractClientBase(String version, SalesforceSession session, SalesforceHttpClient httpClient, SalesforceLoginConfig loginConfig, int terminationTimeout) throws SalesforceException { - this.version = version; this.session = session; this.httpClient = httpClient; @@ -101,7 +100,9 @@ public abstract class AbstractClientBase implements SalesforceSession.Salesforce } @Override - public void start() { + protected void doStart() throws Exception { + super.doStart(); + // local cache accessToken = session.getAccessToken(); if (accessToken == null && !loginConfig.isLazyLogin()) { @@ -120,7 +121,8 @@ public abstract class AbstractClientBase implements SalesforceSession.Salesforce } @Override - public void stop() { + public void doStop() throws Exception { + super.doStop(); if (inflightRequests != null) { inflightRequests.arrive(); if (!inflightRequests.isTerminated()) { diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java index ad45e01..9bfe64f 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java @@ -61,13 +61,11 @@ public class DefaultAnalyticsApiClient extends AbstractClientBase implements Ana public DefaultAnalyticsApiClient(String version, SalesforceSession session, SalesforceHttpClient httpClient, SalesforceLoginConfig loginConfig) throws SalesforceException { super(version, session, httpClient, loginConfig); - objectMapper = JsonUtils.createObjectMapper(); } @Override public void getRecentReports(final Map<String, List<String>> headers, final RecentReportsResponseCallback callback) { - final Request request = getRequest(HttpMethod.GET, reportsUrl(), headers); doHttpRequest(request, new ClientResponseCallback() { diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractRestProcessor.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractRestProcessor.java index 95e5aae..5a2c8ed 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractRestProcessor.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractRestProcessor.java @@ -67,20 +67,33 @@ public abstract class AbstractRestProcessor extends AbstractSalesforceProcessor private RestClient restClient; private Map<String, Class<?>> classMap; + private NotFoundBehaviour notFoundBehaviour; - private final NotFoundBehaviour notFoundBehaviour; - - public AbstractRestProcessor(SalesforceEndpoint endpoint) throws SalesforceException { + public AbstractRestProcessor(SalesforceEndpoint endpoint) { super(endpoint); + } - final SalesforceEndpointConfig configuration = endpoint.getConfiguration(); - notFoundBehaviour = configuration.getNotFoundBehaviour(); + @Override + protected void doStart() throws Exception { + super.doStart(); + final SalesforceEndpointConfig configuration = endpoint.getConfiguration(); + this.notFoundBehaviour = configuration.getNotFoundBehaviour(); final SalesforceComponent salesforceComponent = endpoint.getComponent(); + if (restClient == null) { + this.restClient = salesforceComponent.createRestClientFor(endpoint); + } + if (classMap == null) { + this.classMap = endpoint.getComponent().getClassMap(); + } - this.restClient = salesforceComponent.createRestClientFor(endpoint); + ServiceHelper.startService(restClient); + } - this.classMap = endpoint.getComponent().getClassMap(); + @Override + protected void doStop() throws Exception { + super.doStop(); + ServiceHelper.stopService(restClient); } // used in unit tests @@ -93,16 +106,6 @@ public abstract class AbstractRestProcessor extends AbstractSalesforceProcessor } @Override - public void start() { - ServiceHelper.startService(restClient); - } - - @Override - public void stop() { - ServiceHelper.stopService(restClient); - } - - @Override public final boolean process(final Exchange exchange, final AsyncCallback callback) { // pre-process request message try { diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractSalesforceProcessor.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractSalesforceProcessor.java index 9cafd84..7afef35 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractSalesforceProcessor.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractSalesforceProcessor.java @@ -29,10 +29,11 @@ import org.apache.camel.component.salesforce.SalesforceLoginConfig; import org.apache.camel.component.salesforce.api.SalesforceException; import org.apache.camel.component.salesforce.internal.OperationName; import org.apache.camel.component.salesforce.internal.SalesforceSession; +import org.apache.camel.support.service.ServiceSupport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class AbstractSalesforceProcessor implements SalesforceProcessor { +public abstract class AbstractSalesforceProcessor extends ServiceSupport implements SalesforceProcessor { protected static final boolean NOT_OPTIONAL = false; protected static final boolean IS_OPTIONAL = true; @@ -43,23 +44,32 @@ public abstract class AbstractSalesforceProcessor implements SalesforceProcessor protected final SalesforceEndpoint endpoint; protected final Map<String, Object> endpointConfigMap; - protected final OperationName operationName; - protected final SalesforceSession session; - protected final SalesforceHttpClient httpClient; - protected final SalesforceLoginConfig loginConfig; - protected final boolean rawPayload; + + protected SalesforceSession session; + protected SalesforceHttpClient httpClient; + protected SalesforceLoginConfig loginConfig; + protected boolean rawPayload; public AbstractSalesforceProcessor(final SalesforceEndpoint endpoint) { this.endpoint = endpoint; - operationName = endpoint.getOperationName(); - endpointConfigMap = endpoint.getConfiguration().toValueMap(); + this.operationName = endpoint.getOperationName(); + this.endpointConfigMap = endpoint.getConfiguration().toValueMap(); + } + + @Override + protected void doStart() throws Exception { + super.doStart(); - final SalesforceComponent component = endpoint.getComponent(); + SalesforceComponent component = endpoint.getComponent(); session = component.getSession(); loginConfig = component.getLoginConfig(); - httpClient = endpoint.getConfiguration().getHttpClient(); rawPayload = endpoint.getConfiguration().isRawPayload(); + + httpClient = endpoint.getConfiguration().getHttpClient(); + if (httpClient == null) { + httpClient = component.getHttpClient(); + } } @Override diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AnalyticsApiProcessor.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AnalyticsApiProcessor.java index 3ecfde1..b03cba4 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AnalyticsApiProcessor.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AnalyticsApiProcessor.java @@ -34,10 +34,8 @@ import org.apache.camel.component.salesforce.internal.client.AnalyticsApiClient; import org.apache.camel.component.salesforce.internal.client.DefaultAnalyticsApiClient; import org.apache.camel.support.service.ServiceHelper; -import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.INCLUDE_DETAILS; -import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.INSTANCE_ID; -import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.REPORT_ID; -import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.REPORT_METADATA; + +import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.*; /** * Exchange processor for Analytics API. @@ -46,10 +44,21 @@ public class AnalyticsApiProcessor extends AbstractSalesforceProcessor { private AnalyticsApiClient analyticsClient; - public AnalyticsApiProcessor(SalesforceEndpoint endpoint) throws SalesforceException { + public AnalyticsApiProcessor(SalesforceEndpoint endpoint) { super(endpoint); + } + @Override + protected void doStart() throws Exception { + super.doStart(); this.analyticsClient = new DefaultAnalyticsApiClient((String)endpointConfigMap.get(SalesforceEndpointConfig.API_VERSION), session, httpClient, loginConfig); + ServiceHelper.startService(analyticsClient); + } + + @Override + protected void doStop() throws Exception { + super.doStop(); + ServiceHelper.stopService(analyticsClient); } @Override @@ -208,14 +217,4 @@ public class AnalyticsApiProcessor extends AbstractSalesforceProcessor { callback.done(false); } - @Override - public void start() { - ServiceHelper.startService(analyticsClient); - } - - @Override - public void stop() { - // stop the client - ServiceHelper.stopService(analyticsClient); - } } diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/BulkApiProcessor.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/BulkApiProcessor.java index ff7b1f9..bd88b4a 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/BulkApiProcessor.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/BulkApiProcessor.java @@ -48,10 +48,22 @@ public class BulkApiProcessor extends AbstractSalesforceProcessor { private BulkApiClient bulkClient; - public BulkApiProcessor(SalesforceEndpoint endpoint) throws SalesforceException { + public BulkApiProcessor(SalesforceEndpoint endpoint) { super(endpoint); + } + @Override + protected void doStart() throws Exception { + super.doStart(); this.bulkClient = new DefaultBulkApiClient((String)endpointConfigMap.get(SalesforceEndpointConfig.API_VERSION), session, httpClient, loginConfig); + ServiceHelper.startService(bulkClient); + } + + + @Override + public void doStop() { + // stop the client + ServiceHelper.stopService(bulkClient); } @Override @@ -414,15 +426,4 @@ public class BulkApiProcessor extends AbstractSalesforceProcessor { // signal exchange completion callback.done(false); } - - @Override - public void start() { - ServiceHelper.startService(bulkClient); - } - - @Override - public void stop() { - // stop the client - ServiceHelper.stopService(bulkClient); - } } diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/CompositeApiProcessor.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/CompositeApiProcessor.java index 64c291e..6dee3ac 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/CompositeApiProcessor.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/CompositeApiProcessor.java @@ -48,13 +48,16 @@ public final class CompositeApiProcessor extends AbstractSalesforceProcessor { } - private final CompositeApiClient compositeClient; + private CompositeApiClient compositeClient; + private PayloadFormat format; - private final PayloadFormat format; - - public CompositeApiProcessor(final SalesforceEndpoint endpoint) throws SalesforceException { + public CompositeApiProcessor(final SalesforceEndpoint endpoint) { super(endpoint); + } + @Override + protected void doStart() throws Exception { + super.doStart(); final SalesforceEndpointConfig configuration = endpoint.getConfiguration(); final String apiVersion = configuration.getApiVersion(); @@ -63,9 +66,14 @@ public final class CompositeApiProcessor extends AbstractSalesforceProcessor { if (!EnumSet.of(PayloadFormat.JSON, PayloadFormat.XML).contains(format)) { throw new SalesforceException("Unsupported format: " + format, 0); } - compositeClient = new DefaultCompositeApiClient(configuration, format, apiVersion, session, httpClient, loginConfig); + ServiceHelper.startService(compositeClient); + } + @Override + protected void doStop() throws Exception { + super.doStop(); + ServiceHelper.stopService(compositeClient); } @Override @@ -89,16 +97,6 @@ public final class CompositeApiProcessor extends AbstractSalesforceProcessor { } } - @Override - public void start() { - ServiceHelper.startService(compositeClient); - } - - @Override - public void stop() { - ServiceHelper.stopService(compositeClient); - } - void processCompositeBatchResponse(final Exchange exchange, final Optional<SObjectBatchResponse> responseBody, final Map<String, String> headers, final SalesforceException exception, final AsyncCallback callback) { try { diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java index 7861491..455b084 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java @@ -66,12 +66,10 @@ public class XmlRestProcessor extends AbstractRestProcessor { public XmlRestProcessor(SalesforceEndpoint endpoint) throws SalesforceException { super(endpoint); - } @Override protected void processRequest(Exchange exchange) throws SalesforceException { - switch (operationName) { case GET_VERSIONS: exchange.setProperty(RESPONSE_CLASS, Versions.class);