Author: davsclaus Date: Mon Jan 31 09:19:40 2011 New Revision: 1065534 URL: http://svn.apache.org/viewvc?rev=1065534&view=rev Log: CAMEL-3577: ProducerTemplate lazy creates thread pool on demand (only when asyncXXX is being used).
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java?rev=1065534&r1=1065533&r2=1065534&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java Mon Jan 31 09:19:40 2011 @@ -519,11 +519,7 @@ public class DefaultProducerTemplate ext return requestBody(endpoint, body); } }; - - if (executor == null) { - throw new IllegalStateException("ProducerTemplate has not been started"); - } - return executor.submit(task); + return getExecutorService().submit(task); } public <T> Future<T> asyncRequestBody(final Endpoint endpoint, final Object body, final Class<T> type) { @@ -532,11 +528,7 @@ public class DefaultProducerTemplate ext return requestBody(endpoint, body, type); } }; - - if (executor == null) { - throw new IllegalStateException("ProducerTemplate has not been started"); - } - return executor.submit(task); + return getExecutorService().submit(task); } public Future<Object> asyncRequestBodyAndHeader(final Endpoint endpoint, final Object body, final String header, @@ -546,11 +538,7 @@ public class DefaultProducerTemplate ext return requestBodyAndHeader(endpoint, body, header, headerValue); } }; - - if (executor == null) { - throw new IllegalStateException("ProducerTemplate has not been started"); - } - return executor.submit(task); + return getExecutorService().submit(task); } public <T> Future<T> asyncRequestBodyAndHeader(final Endpoint endpoint, final Object body, final String header, @@ -560,11 +548,7 @@ public class DefaultProducerTemplate ext return requestBodyAndHeader(endpoint, body, header, headerValue, type); } }; - - if (executor == null) { - throw new IllegalStateException("ProducerTemplate has not been started"); - } - return executor.submit(task); + return getExecutorService().submit(task); } public Future<Object> asyncRequestBodyAndHeaders(final Endpoint endpoint, final Object body, @@ -574,11 +558,7 @@ public class DefaultProducerTemplate ext return requestBodyAndHeaders(endpoint, body, headers); } }; - - if (executor == null) { - throw new IllegalStateException("ProducerTemplate has not been started"); - } - return executor.submit(task); + return getExecutorService().submit(task); } public <T> Future<T> asyncRequestBodyAndHeaders(final Endpoint endpoint, final Object body, @@ -588,11 +568,7 @@ public class DefaultProducerTemplate ext return requestBodyAndHeaders(endpoint, body, headers, type); } }; - - if (executor == null) { - throw new IllegalStateException("ProducerTemplate has not been started"); - } - return executor.submit(task); + return getExecutorService().submit(task); } public Future<Exchange> asyncSend(final Endpoint endpoint, final Exchange exchange) { @@ -601,11 +577,7 @@ public class DefaultProducerTemplate ext return send(endpoint, exchange); } }; - - if (executor == null) { - throw new IllegalStateException("ProducerTemplate has not been started"); - } - return executor.submit(task); + return getExecutorService().submit(task); } public Future<Exchange> asyncSend(final Endpoint endpoint, final Processor processor) { @@ -614,11 +586,7 @@ public class DefaultProducerTemplate ext return send(endpoint, processor); } }; - - if (executor == null) { - throw new IllegalStateException("ProducerTemplate has not been started"); - } - return executor.submit(task); + return getExecutorService().submit(task); } public Future<Object> asyncSendBody(final Endpoint endpoint, final Object body) { @@ -629,11 +597,7 @@ public class DefaultProducerTemplate ext return null; } }; - - if (executor == null) { - throw new IllegalStateException("ProducerTemplate has not been started"); - } - return executor.submit(task); + return getExecutorService().submit(task); } private Future<Object> asyncCallback(final Endpoint endpoint, final ExchangePattern pattern, final Object body, final Synchronization onCompletion) { @@ -660,11 +624,7 @@ public class DefaultProducerTemplate ext } } }; - - if (executor == null) { - throw new IllegalStateException("ProducerTemplate has not been started"); - } - return executor.submit(task); + return getExecutorService().submit(task); } public Future<Exchange> asyncCallback(final Endpoint endpoint, final Exchange exchange, final Synchronization onCompletion) { @@ -685,11 +645,7 @@ public class DefaultProducerTemplate ext return exchange; } }; - - if (executor == null) { - throw new IllegalStateException("ProducerTemplate has not been started"); - } - return executor.submit(task); + return getExecutorService().submit(task); } public Future<Exchange> asyncCallback(final Endpoint endpoint, final Processor processor, final Synchronization onCompletion) { @@ -710,18 +666,35 @@ public class DefaultProducerTemplate ext return answer; } }; + return getExecutorService().submit(task); + } - if (executor == null) { + private ProducerCache getProducerCache() { + if (!isStarted()) { throw new IllegalStateException("ProducerTemplate has not been started"); } - return executor.submit(task); + return producerCache; } - private ProducerCache getProducerCache() { + private ExecutorService getExecutorService() { if (!isStarted()) { throw new IllegalStateException("ProducerTemplate has not been started"); } - return producerCache; + + if (executor != null) { + return executor; + } + + // create a default executor which must be synchronized + synchronized (this) { + if (executor != null) { + return executor; + } + executor = context.getExecutorServiceStrategy().newDefaultThreadPool(this, "ProducerTemplate"); + } + + ObjectHelper.notNull(executor, "ExecutorService"); + return executor; } protected void doStart() throws Exception { @@ -733,9 +706,6 @@ public class DefaultProducerTemplate ext } } ServiceHelper.startService(producerCache); - if (executor == null) { - executor = context.getExecutorServiceStrategy().newDefaultThreadPool(this, "ProducerTemplate"); - } } protected void doStop() throws Exception {