This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch CAMEL-13870 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 0cd102598e0d605f045c0c56960df1e6452bf78e Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Tue Aug 20 20:55:16 2019 +0200 CAMEL-13870: Fast property configuration of Camel endpoints. Work in progress. --- .../component/disruptor/DisruptorComponent.java | 27 ++++--- .../component/disruptor/DisruptorEndpoint.java | 28 ++++--- .../component/docker/DockerConfiguration.java | 4 +- .../camel/component/dropbox/DropboxEndpoint.java | 4 + .../src/main/docs/ehcache-component.adoc | 4 +- .../component/ehcache/EhcacheConfiguration.java | 16 ++-- .../camel/component/ehcache/EhcacheConsumer.java | 11 ++- .../camel/component/ehcache/EhcacheProducer.java | 35 ++++++-- .../ehcache/EhcacheComponentConfigurationTest.java | 4 +- .../dsl/EhcacheEndpointBuilderFactory.java | 94 ++-------------------- .../springboot/EhcacheComponentConfiguration.java | 12 +-- 11 files changed, 100 insertions(+), 139 deletions(-) diff --git a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorComponent.java b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorComponent.java index f596dd0..5717fd7 100644 --- a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorComponent.java +++ b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorComponent.java @@ -93,18 +93,21 @@ public class DisruptorComponent extends DefaultComponent { throw new IllegalArgumentException("The 'pollTimeout' argument is not supported by the Disruptor component"); } - final DisruptorWaitStrategy waitStrategy = getAndRemoveParameter(parameters, "waitStrategy", DisruptorWaitStrategy.class, defaultWaitStrategy); - final DisruptorProducerType producerType = getAndRemoveParameter(parameters, "producerType", DisruptorProducerType.class, defaultProducerType); - final boolean multipleConsumers = getAndRemoveParameter(parameters, "multipleConsumers", boolean.class, defaultMultipleConsumers); - final boolean blockWhenFull = getAndRemoveParameter(parameters, "blockWhenFull", boolean.class, defaultBlockWhenFull); - - final DisruptorReference disruptorReference = getOrCreateDisruptor(uri, remaining, size, producerType, waitStrategy); - final DisruptorEndpoint disruptorEndpoint = new DisruptorEndpoint(uri, this, disruptorReference, concurrentConsumers, multipleConsumers, blockWhenFull); - disruptorEndpoint.setWaitStrategy(waitStrategy); - disruptorEndpoint.setProducerType(producerType); - disruptorEndpoint.configureProperties(parameters); - - return disruptorEndpoint; + DisruptorWaitStrategy waitStrategy = getAndRemoveParameter(parameters, "waitStrategy", DisruptorWaitStrategy.class, defaultWaitStrategy); + DisruptorProducerType producerType = getAndRemoveParameter(parameters, "producerType", DisruptorProducerType.class, defaultProducerType); + boolean multipleConsumers = getAndRemoveParameter(parameters, "multipleConsumers", boolean.class, defaultMultipleConsumers); + boolean blockWhenFull = getAndRemoveParameter(parameters, "blockWhenFull", boolean.class, defaultBlockWhenFull); + + DisruptorReference disruptorReference = getOrCreateDisruptor(uri, remaining, size, producerType, waitStrategy); + DisruptorEndpoint answer = new DisruptorEndpoint(uri, this, disruptorReference); + answer.setConcurrentConsumers(concurrentConsumers); + answer.setMultipleConsumers(multipleConsumers); + answer.setBlockWhenFull(blockWhenFull); + answer.setWaitStrategy(waitStrategy); + answer.setProducerType(producerType); + answer.configureProperties(parameters); + + return answer; } private DisruptorReference getOrCreateDisruptor(final String uri, final String name, final int size, diff --git a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorEndpoint.java b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorEndpoint.java index 9b81e7f..d5dcdcd 100644 --- a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorEndpoint.java +++ b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorEndpoint.java @@ -61,9 +61,9 @@ public class DisruptorEndpoint extends DefaultEndpoint implements AsyncEndpoint, @UriPath(description = "Name of queue") @Metadata(required = true) private String name; @UriParam(label = "consumer", defaultValue = "1") - private final int concurrentConsumers; + private int concurrentConsumers; @UriParam(label = "consumer") - private final boolean multipleConsumers; + private boolean multipleConsumers; @UriParam(label = "producer", defaultValue = "IfReplyExpected") private WaitForTaskToComplete waitForTaskToComplete = WaitForTaskToComplete.IfReplyExpected; @UriParam(label = "producer", defaultValue = "30000") @@ -78,14 +78,10 @@ public class DisruptorEndpoint extends DefaultEndpoint implements AsyncEndpoint, private DisruptorProducerType producerType; public DisruptorEndpoint(final String endpointUri, final Component component, - final DisruptorReference disruptorReference, final int concurrentConsumers, - final boolean multipleConsumers, boolean blockWhenFull) throws Exception { + final DisruptorReference disruptorReference) { super(endpointUri, component); this.disruptorReference = disruptorReference; this.name = disruptorReference.getName(); - this.concurrentConsumers = concurrentConsumers; - this.multipleConsumers = multipleConsumers; - this.blockWhenFull = blockWhenFull; } @ManagedAttribute(description = "Queue name") @@ -108,14 +104,18 @@ public class DisruptorEndpoint extends DefaultEndpoint implements AsyncEndpoint, return getDisruptor().getPendingExchangeCount(); } - /** - * Number of concurrent threads processing exchanges. - */ @ManagedAttribute(description = "Number of concurrent consumers") public int getConcurrentConsumers() { return concurrentConsumers; } + /** + * Number of concurrent threads processing exchanges. + */ + public void setConcurrentConsumers(int concurrentConsumers) { + this.concurrentConsumers = concurrentConsumers; + } + @ManagedAttribute(description = "Option to specify whether the caller should wait for the async task to complete or not before continuing") public WaitForTaskToComplete getWaitForTaskToComplete() { return waitForTaskToComplete; @@ -165,14 +165,18 @@ public class DisruptorEndpoint extends DefaultEndpoint implements AsyncEndpoint, return isMultipleConsumers(); } + public boolean isMultipleConsumers() { + return multipleConsumers; + } + /** * Specifies whether multiple consumers are allowed. * If enabled, you can use Disruptor for Publish-Subscribe messaging. * That is, you can send a message to the queue and have each consumer receive a copy of the message. * When enabled, this option should be specified on every consumer endpoint. */ - public boolean isMultipleConsumers() { - return multipleConsumers; + public void setMultipleConsumers(boolean multipleConsumers) { + this.multipleConsumers = multipleConsumers; } /** diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConfiguration.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConfiguration.java index dab3b54..b5ebf30 100644 --- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConfiguration.java +++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerConfiguration.java @@ -189,7 +189,7 @@ public class DockerConfiguration implements Cloneable { this.maxPerRouteConnections = maxPerRouteConnections; } - public boolean isLoggingFilterEnabled() { + public boolean isLoggingFilter() { return loggingFilter; } @@ -200,7 +200,7 @@ public class DockerConfiguration implements Cloneable { this.loggingFilter = loggingFilterEnabled; } - public boolean isFollowRedirectFilterEnabled() { + public boolean isFollowRedirectFilter() { return followRedirectFilter; } diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxEndpoint.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxEndpoint.java index 07cfca3..379723b 100644 --- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxEndpoint.java +++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxEndpoint.java @@ -55,6 +55,10 @@ public class DropboxEndpoint extends DefaultEndpoint { this.configuration = configuration; } + public DropboxConfiguration getConfiguration() { + return configuration; + } + /** * Create one of the camel producer available based on the configuration * @return the camel producer diff --git a/components/camel-ehcache/src/main/docs/ehcache-component.adoc b/components/camel-ehcache/src/main/docs/ehcache-component.adoc index 7554c48..950b0af 100644 --- a/components/camel-ehcache/src/main/docs/ehcache-component.adoc +++ b/components/camel-ehcache/src/main/docs/ehcache-component.adoc @@ -98,9 +98,9 @@ with the following path and query parameters: | *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean | *configuration* (advanced) | The default cache configuration to be used to create caches. | | CacheConfiguration | *configurations* (advanced) | A map of cache configuration to be used to create caches. | | Map -| *keyType* (advanced) | The cache key type, default java.lang.Object | java.lang.Object | String +| *keyType* (advanced) | The cache key type, default java.lang.Object | | String | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean -| *valueType* (advanced) | The cache value type, default java.lang.Object | java.lang.Object | String +| *valueType* (advanced) | The cache value type, default java.lang.Object | | String |=== // endpoint options: END // spring-boot-auto-configure options: START diff --git a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheConfiguration.java b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheConfiguration.java index d3922ce..df368a8 100644 --- a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheConfiguration.java +++ b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheConfiguration.java @@ -53,10 +53,10 @@ public class EhcacheConfiguration implements Cloneable { private CacheConfiguration configuration; @UriParam(label = "advanced") private Map<String, CacheConfiguration> configurations; - @UriParam(label = "advanced", javaType = "java.lang.String", defaultValue = "java.lang.Object") - private Class<?> keyType; - @UriParam(label = "advanced", javaType = "java.lang.String", defaultValue = "java.lang.Object") - private Class<?> valueType; + @UriParam(label = "advanced") + private String keyType; + @UriParam(label = "advanced") + private String valueType; @UriParam(label = "consumer", defaultValue = "ORDERED") private EventOrdering eventOrdering = EventOrdering.ORDERED; @UriParam(label = "consumer", defaultValue = "ASYNCHRONOUS") @@ -260,25 +260,25 @@ public class EhcacheConfiguration implements Cloneable { this.configurations.putAll(configurations); } - public Class<?> getKeyType() { + public String getKeyType() { return keyType; } /** * The cache key type, default "java.lang.Object" */ - public void setKeyType(Class<?> keyType) { + public void setKeyType(String keyType) { this.keyType = keyType; } - public Class<?> getValueType() { + public String getValueType() { return valueType; } /** * The cache value type, default "java.lang.Object" */ - public void setValueType(Class<?> valueType) { + public void setValueType(String valueType) { this.valueType = valueType; } diff --git a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheConsumer.java b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheConsumer.java index df73f86..a6263c4 100644 --- a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheConsumer.java +++ b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheConsumer.java @@ -34,7 +34,16 @@ public class EhcacheConsumer extends DefaultConsumer implements CacheEventListen this.configuration = configuration; this.manager = endpoint.getManager(); - this.cache = manager.getCache(cacheName, configuration.getKeyType(), configuration.getValueType()); + + Class<?> kt = null; + if (configuration.getKeyType() != null) { + kt = getEndpoint().getCamelContext().getClassResolver().resolveClass(configuration.getKeyType()); + } + Class<?> vt = null; + if (configuration.getValueType() != null) { + vt = getEndpoint().getCamelContext().getClassResolver().resolveClass(configuration.getValueType()); + } + this.cache = manager.getCache(cacheName, kt, vt); } @Override diff --git a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheProducer.java b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheProducer.java index 0f8cea4..e5a4f94 100644 --- a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheProducer.java +++ b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheProducer.java @@ -32,11 +32,20 @@ public class EhcacheProducer extends HeaderSelectorProducer { private final Cache cache; public EhcacheProducer(EhcacheEndpoint endpoint, String cacheName, EhcacheConfiguration configuration) throws Exception { - super(endpoint, EhcacheConstants.ACTION, () -> configuration.getAction()); + super(endpoint, EhcacheConstants.ACTION, configuration::getAction); this.configuration = configuration; this.manager = endpoint.getManager(); - this.cache = manager.getCache(cacheName, configuration.getKeyType(), configuration.getValueType()); + + Class<?> kt = null; + if (configuration.getKeyType() != null) { + kt = getEndpoint().getCamelContext().getClassResolver().resolveClass(configuration.getKeyType()); + } + Class<?> vt = null; + if (configuration.getValueType() != null) { + vt = getEndpoint().getCamelContext().getClassResolver().resolveClass(configuration.getValueType()); + } + this.cache = manager.getCache(cacheName, kt, vt); } // **************************** @@ -130,7 +139,13 @@ public class EhcacheProducer extends HeaderSelectorProducer { // **************************** private Object getKey(final Message message) throws Exception { - Object value = message.getHeader(EhcacheConstants.KEY, cache.getRuntimeConfiguration().getKeyType()); + Object value; + if (configuration.getKeyType() != null) { + Class<?> clazz = getEndpoint().getCamelContext().getClassResolver().resolveClass(configuration.getKeyType()); + value = message.getHeader(EhcacheConstants.KEY, clazz); + } else { + value = message.getHeader(EhcacheConstants.KEY); + } if (value == null) { value = configuration.getKey(); } @@ -145,10 +160,18 @@ public class EhcacheProducer extends HeaderSelectorProducer { return value; } - private Object getValue(final Message message, final Class<?> type) throws Exception { - Object value = message.getHeader(EhcacheConstants.VALUE, type); + @SuppressWarnings("unchecked") + private Object getValue(final Message message, final Object type) throws Exception { + Object value = message.getHeader(EhcacheConstants.VALUE); if (value == null) { - value = message.getBody(type); + if (type instanceof String) { + Class<?> clazz = getEndpoint().getCamelContext().getClassResolver().resolveClass((String) type); + value = message.getBody(clazz); + } else if (type instanceof Class) { + value = message.getBody((Class) type); + } else { + value = message.getBody(); + } } if (value == null) { diff --git a/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheComponentConfigurationTest.java b/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheComponentConfigurationTest.java index bd450b4..01db7f5 100644 --- a/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheComponentConfigurationTest.java +++ b/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheComponentConfigurationTest.java @@ -39,8 +39,8 @@ public class EhcacheComponentConfigurationTest extends CamelTestSupport { @BindToRegistry("ehcache") public Component createEhcacheComponent() throws Exception { EhcacheComponent component = new EhcacheComponent(); - component.getConfiguration().setKeyType(String.class); - component.getConfiguration().setValueType(String.class); + component.getConfiguration().setKeyType("java.lang.String"); + component.getConfiguration().setValueType("java.lang.String"); component.getConfiguration().setCacheManager( CacheManagerBuilder.newCacheManagerBuilder() .withCache( diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/EhcacheEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/EhcacheEndpointBuilderFactory.java index f800339..9c29554 100644 --- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/EhcacheEndpointBuilderFactory.java +++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/EhcacheEndpointBuilderFactory.java @@ -393,21 +393,7 @@ public interface EhcacheEndpointBuilderFactory { /** * The cache key type, default java.lang.Object. * - * The option is a: <code>java.lang.Class<java.lang.Object></code> - * type. - * - * Group: advanced - */ - default AdvancedEhcacheEndpointConsumerBuilder keyType( - Class<Object> keyType) { - setProperty("keyType", keyType); - return this; - } - /** - * The cache key type, default java.lang.Object. - * - * The option will be converted to a - * <code>java.lang.Class<java.lang.Object></code> type. + * The option is a: <code>java.lang.String</code> type. * * Group: advanced */ @@ -444,21 +430,7 @@ public interface EhcacheEndpointBuilderFactory { /** * The cache value type, default java.lang.Object. * - * The option is a: <code>java.lang.Class<java.lang.Object></code> - * type. - * - * Group: advanced - */ - default AdvancedEhcacheEndpointConsumerBuilder valueType( - Class<Object> valueType) { - setProperty("valueType", valueType); - return this; - } - /** - * The cache value type, default java.lang.Object. - * - * The option will be converted to a - * <code>java.lang.Class<java.lang.Object></code> type. + * The option is a: <code>java.lang.String</code> type. * * Group: advanced */ @@ -736,21 +708,7 @@ public interface EhcacheEndpointBuilderFactory { /** * The cache key type, default java.lang.Object. * - * The option is a: <code>java.lang.Class<java.lang.Object></code> - * type. - * - * Group: advanced - */ - default AdvancedEhcacheEndpointProducerBuilder keyType( - Class<Object> keyType) { - setProperty("keyType", keyType); - return this; - } - /** - * The cache key type, default java.lang.Object. - * - * The option will be converted to a - * <code>java.lang.Class<java.lang.Object></code> type. + * The option is a: <code>java.lang.String</code> type. * * Group: advanced */ @@ -787,21 +745,7 @@ public interface EhcacheEndpointBuilderFactory { /** * The cache value type, default java.lang.Object. * - * The option is a: <code>java.lang.Class<java.lang.Object></code> - * type. - * - * Group: advanced - */ - default AdvancedEhcacheEndpointProducerBuilder valueType( - Class<Object> valueType) { - setProperty("valueType", valueType); - return this; - } - /** - * The cache value type, default java.lang.Object. - * - * The option will be converted to a - * <code>java.lang.Class<java.lang.Object></code> type. + * The option is a: <code>java.lang.String</code> type. * * Group: advanced */ @@ -1002,20 +946,7 @@ public interface EhcacheEndpointBuilderFactory { /** * The cache key type, default java.lang.Object. * - * The option is a: <code>java.lang.Class<java.lang.Object></code> - * type. - * - * Group: advanced - */ - default AdvancedEhcacheEndpointBuilder keyType(Class<Object> keyType) { - setProperty("keyType", keyType); - return this; - } - /** - * The cache key type, default java.lang.Object. - * - * The option will be converted to a - * <code>java.lang.Class<java.lang.Object></code> type. + * The option is a: <code>java.lang.String</code> type. * * Group: advanced */ @@ -1050,20 +981,7 @@ public interface EhcacheEndpointBuilderFactory { /** * The cache value type, default java.lang.Object. * - * The option is a: <code>java.lang.Class<java.lang.Object></code> - * type. - * - * Group: advanced - */ - default AdvancedEhcacheEndpointBuilder valueType(Class<Object> valueType) { - setProperty("valueType", valueType); - return this; - } - /** - * The cache value type, default java.lang.Object. - * - * The option will be converted to a - * <code>java.lang.Class<java.lang.Object></code> type. + * The option is a: <code>java.lang.String</code> type. * * Group: advanced */ diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/java/org/apache/camel/component/ehcache/springboot/EhcacheComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/java/org/apache/camel/component/ehcache/springboot/EhcacheComponentConfiguration.java index 230c4bc..11432b9 100644 --- a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/java/org/apache/camel/component/ehcache/springboot/EhcacheComponentConfiguration.java +++ b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/java/org/apache/camel/component/ehcache/springboot/EhcacheComponentConfiguration.java @@ -192,11 +192,11 @@ public class EhcacheComponentConfiguration /** * The cache key type, default "java.lang.Object" */ - private Class keyType = java.lang.Object.class; + private String keyType; /** * The cache value type, default "java.lang.Object" */ - private Class valueType = java.lang.Object.class; + private String valueType; public String getConfigurationUri() { return configurationUri; @@ -298,19 +298,19 @@ public class EhcacheComponentConfiguration this.configurations = configurations; } - public Class getKeyType() { + public String getKeyType() { return keyType; } - public void setKeyType(Class keyType) { + public void setKeyType(String keyType) { this.keyType = keyType; } - public Class getValueType() { + public String getValueType() { return valueType; } - public void setValueType(Class valueType) { + public void setValueType(String valueType) { this.valueType = valueType; } }