CAMEL-11318: camel-ehcache: allow to configure named caches programmatically
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f3004024 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f3004024 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f3004024 Branch: refs/heads/master Commit: f30040249de5381d53d6b5f5e6ee74b7b373e32f Parents: e3139a0 Author: lburgazzoli <lburgazz...@gmail.com> Authored: Wed May 24 16:54:26 2017 +0200 Committer: lburgazzoli <lburgazz...@gmail.com> Committed: Wed May 24 16:54:48 2017 +0200 ---------------------------------------------------------------------- .../src/main/docs/ehcache-component.adoc | 6 +- .../component/ehcache/EhcacheComponent.java | 15 ++ .../component/ehcache/EhcacheConfiguration.java | 37 +++- .../camel/component/ehcache/EhcacheManager.java | 16 +- .../ehcache/EhcacheCacheConfigurationTest.java | 167 +++++++++++++++++++ .../ehcache/EhcacheConfigurationTest.java | 141 +++++----------- .../EhcacheComponentConfiguration.java | 25 ++- .../CacheConfigurationCustomizer.java | 100 +++++++++++ ...cheConfigurationCustomizerConfiguration.java | 54 ++++++ .../main/resources/META-INF/spring.factories | 1 + ...ManagerCustomizerEnabledOnComponentTest.java | 38 ----- .../CacheManagerCustomizerEnabledTest.java | 39 ----- .../CacheManagerCustomizerEnabledTestBase.java | 48 ------ .../CacheManagerCustomizerNoOverrideTest.java | 87 ---------- ...heManagerCustomizerNotEnabledGlobalTest.java | 37 ---- ...agerCustomizerNotEnabledOnComponentTest.java | 38 ----- .../CacheManagerCustomizerNotEnabledTest.java | 37 ---- ...acheManagerCustomizerNotEnabledTestBase.java | 48 ------ .../CacheManagerCustomizerOverrideTest.java | 87 ---------- .../springboot/CacheManagerCustomizerTest.java | 63 ------- ...anagerCustomizerWithoutCacheManagerTest.java | 53 ------ ...onfigurationCustomizerEnabledAppendTest.java | 121 ++++++++++++++ ...nfigurationCustomizerEnabledReplaceTest.java | 121 ++++++++++++++ ...igurationCustomizerNotEnabledGlobalTest.java | 37 ++++ ...tionCustomizerNotEnabledOnComponentTest.java | 38 +++++ ...heConfigurationCustomizerNotEnabledTest.java | 37 ++++ ...nfigurationCustomizerNotEnabledTestBase.java | 70 ++++++++ ...ManagerCustomizerEnabledOnComponentTest.java | 38 +++++ .../CacheManagerCustomizerEnabledTest.java | 39 +++++ .../CacheManagerCustomizerEnabledTestBase.java | 48 ++++++ .../CacheManagerCustomizerNoOverrideTest.java | 88 ++++++++++ ...heManagerCustomizerNotEnabledGlobalTest.java | 37 ++++ ...agerCustomizerNotEnabledOnComponentTest.java | 38 +++++ .../CacheManagerCustomizerNotEnabledTest.java | 37 ++++ ...acheManagerCustomizerNotEnabledTestBase.java | 48 ++++++ .../CacheManagerCustomizerOverrideTest.java | 88 ++++++++++ .../customizer/CacheManagerCustomizerTest.java | 63 +++++++ ...anagerCustomizerWithoutCacheManagerTest.java | 53 ++++++ 38 files changed, 1456 insertions(+), 682 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/components/camel-ehcache/src/main/docs/ehcache-component.adoc ---------------------------------------------------------------------- diff --git a/components/camel-ehcache/src/main/docs/ehcache-component.adoc b/components/camel-ehcache/src/main/docs/ehcache-component.adoc index 468aa15..99d970a 100644 --- a/components/camel-ehcache/src/main/docs/ehcache-component.adoc +++ b/components/camel-ehcache/src/main/docs/ehcache-component.adoc @@ -37,7 +37,7 @@ format, `?option=value&option=#beanRef&...` // component options: START -The Ehcache component supports 6 options which are listed below. +The Ehcache component supports 7 options which are listed below. @@ -48,6 +48,7 @@ The Ehcache component supports 6 options which are listed below. | **cacheManager** (common) | The cache manager | | CacheManager | **cacheManager Configuration** (common) | The cache manager configuration | | Configuration | **cacheConfiguration** (common) | The default cache configuration to be used to create caches. | | CacheConfiguration<?,?> +| **cachesConfigurations** (common) | A map of caches configurations to be used to create caches. | | Map | **cacheConfigurationUri** (common) | URI pointing to the Ehcache XML configuration file's location | | String | **resolveProperty Placeholders** (advanced) | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | boolean |======================================================================= @@ -70,7 +71,7 @@ with the following path and query parameters: | **cacheName** | *Required* the cache name | | String |======================================================================= -#### Query Parameters (16 parameters): +#### Query Parameters (17 parameters): [width="100%",cols="2,5,^1,2",options="header"] |======================================================================= @@ -88,6 +89,7 @@ with the following path and query parameters: | **action** (producer) | To configure the default cache action. If an action is set in the message header then the operation from the header takes precedence. | | String | **key** (producer) | To configure the default action key. If a key is set in the message header then the key from the header takes precedence. | | Object | **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 | **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 http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheComponent.java b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheComponent.java index cb00afc..2061fa4 100644 --- a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheComponent.java +++ b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheComponent.java @@ -171,6 +171,21 @@ public class EhcacheComponent extends DefaultComponent { return this.configuration.getConfiguration(); } + public Map<String, CacheConfiguration<?, ?>> getCachesConfigurations() { + return configuration.getConfigurations(); + } + + /** + * A map of caches configurations to be used to create caches. + */ + public void setCachesConfigurations(Map<String, CacheConfiguration<?, ?>> configurations) { + configuration.setConfigurations(configurations); + } + + public void addCachesConfigurations(Map<String, CacheConfiguration<?, ?>> configurations) { + configuration.addConfigurations(configurations); + } + public String getCacheConfigurationUri() { return this.configuration.getConfigurationUri(); } http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheConfiguration.java ---------------------------------------------------------------------- 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 4e63c0e..aca84bc 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 @@ -17,7 +17,9 @@ package org.apache.camel.component.ehcache; import java.util.EnumSet; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; import org.apache.camel.RuntimeCamelException; @@ -47,6 +49,8 @@ public class EhcacheConfiguration implements Cloneable { private String configurationUri; @UriParam(label = "advanced") 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 = Object.class; @UriParam(label = "advanced", javaType = "java.lang.String", defaultValue = "java.lang.Object") @@ -218,16 +222,39 @@ public class EhcacheConfiguration implements Cloneable { /** * The default cache configuration to be used to create caches. */ - public <K, V> void setConfiguration(CacheConfiguration<K, V> configuration) { + public void setConfiguration(CacheConfiguration<?, ?> configuration) { this.configuration = configuration; } - public <K, V> CacheConfiguration<K, V> getConfiguration() { - return (CacheConfiguration<K, V>)configuration; + public CacheConfiguration<?, ?> getConfiguration() { + return configuration; + } + + public boolean hasConfiguration() { + return ObjectHelper.isNotEmpty(configuration); } - public <K, V> CacheConfiguration<K, V> getMandatoryConfiguration() { - return ObjectHelper.notNull(getConfiguration(), "CacheConfiguration"); + public boolean hasConfiguration(String name) { + return ObjectHelper.applyIfNotEmpty(configurations, c -> c.containsKey(name), () -> false); + } + + /** + * A map of cache configuration to be used to create caches. + */ + public Map<String, CacheConfiguration<?, ?>> getConfigurations() { + return configurations; + } + + public void setConfigurations(Map<String, CacheConfiguration<?, ?>> configurations) { + this.configurations = Map.class.cast(configurations); + } + + public void addConfigurations(Map<String, CacheConfiguration<?, ?>> configurations) { + if (this.configurations == null) { + this.configurations = new HashMap<>(); + } + + this.configurations.putAll(configurations); } public Class<?> getKeyType() { http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheManager.java ---------------------------------------------------------------------- diff --git a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheManager.java b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheManager.java index bc7b8c3..af9a51d 100644 --- a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheManager.java +++ b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheManager.java @@ -28,8 +28,12 @@ import org.ehcache.CacheManager; import org.ehcache.UserManagedCache; import org.ehcache.config.CacheConfiguration; import org.ehcache.config.builders.UserManagedCacheBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class EhcacheManager implements Service { + private static final Logger LOGGER = LoggerFactory.getLogger(EhcacheManager.class); + private final EhcacheConfiguration configuration; private final CacheManager cacheManager; private final ConcurrentMap<String, UserManagedCache<?, ?>> userCaches; @@ -59,13 +63,23 @@ public class EhcacheManager implements Service { public <K, V> Cache<K, V> getCache(String name, Class<K> keyType, Class<V> valueType) throws Exception { Cache<K, V> cache = cacheManager.getCache(name, keyType, valueType); if (cache == null && configuration != null && configuration.isCreateCacheIfNotExist()) { - CacheConfiguration<K, V> cacheConfiguration = configuration.getConfiguration(); + CacheConfiguration<K, V> cacheConfiguration = null; + + if (configuration.hasConfiguration(name)) { + LOGGER.debug("Using custom cache configuration for cache {}", name); + cacheConfiguration = CacheConfiguration.class.cast(configuration.getConfigurations().get(name)); + } else if (configuration.hasConfiguration()) { + LOGGER.debug("Using global cache configuration for cache {}", name); + cacheConfiguration = CacheConfiguration.class.cast(configuration.getConfiguration()); + } if (cacheConfiguration != null) { cache = cacheManager.createCache(name, cacheConfiguration); } else { // If a cache configuration is not provided, create a User Managed // Cache + LOGGER.debug("Using a UserManagedCache for cache {} as no configuration has been found", name); + cache = Cache.class.cast(userCaches.computeIfAbsent( name, key -> UserManagedCacheBuilder.newUserManagedCacheBuilder(keyType, valueType).build(true) http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheCacheConfigurationTest.java ---------------------------------------------------------------------- diff --git a/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheCacheConfigurationTest.java b/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheCacheConfigurationTest.java new file mode 100644 index 0000000..5e5608b --- /dev/null +++ b/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheCacheConfigurationTest.java @@ -0,0 +1,167 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.camel.component.ehcache; + +import org.apache.camel.EndpointInject; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.JndiRegistry; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.ehcache.Cache; +import org.ehcache.CacheManager; +import org.ehcache.UserManagedCache; +import org.ehcache.config.ResourcePools; +import org.ehcache.config.ResourceType; +import org.ehcache.config.SizedResourcePool; +import org.ehcache.config.builders.CacheConfigurationBuilder; +import org.ehcache.config.builders.CacheManagerBuilder; +import org.ehcache.config.builders.ResourcePoolsBuilder; +import org.ehcache.config.units.EntryUnit; +import org.ehcache.config.units.MemoryUnit; +import org.junit.Test; + +public class EhcacheCacheConfigurationTest extends CamelTestSupport { + @EndpointInject(uri = "ehcache:myProgrammaticCacheConf?configuration=#myProgrammaticConfiguration") + private EhcacheEndpoint ehcacheProgrammaticConf; + @EndpointInject(uri = "ehcache:myFileCacheConf?keyType=java.lang.String&valueType=java.lang.String&configurationUri=classpath:ehcache/ehcache-file-config.xml") + private EhcacheEndpoint ehcacheFileConf; + @EndpointInject(uri = "ehcache:myUserCacheConf") + private EhcacheEndpoint ehcacheUserConf; + @EndpointInject(uri = "ehcache:myCache?cacheManager=#myCacheManager&keyType=java.lang.String&valueType=java.lang.String") + private EhcacheEndpoint ehcacheCacheManager; + + @Override + protected JndiRegistry createRegistry() throws Exception { + JndiRegistry registry = super.createRegistry(); + registry.bind( + "myProgrammaticConfiguration", + CacheConfigurationBuilder.newCacheConfigurationBuilder( + String.class, + String.class, + ResourcePoolsBuilder.newResourcePoolsBuilder() + .heap(100, EntryUnit.ENTRIES) + .offheap(1, MemoryUnit.MB)) + .build() + ); + registry.bind( + "myCacheManager", + CacheManagerBuilder.newCacheManagerBuilder() + .withCache( + "myCache", + CacheConfigurationBuilder.newCacheConfigurationBuilder( + String.class, + String.class, + ResourcePoolsBuilder.newResourcePoolsBuilder() + .heap(100, EntryUnit.ENTRIES) + .offheap(1, MemoryUnit.MB)) + ).build(true) + ); + + return registry; + } + + // ***************************** + // Test + // ***************************** + + @Test + public void testProgrammaticConfiguration() throws Exception { + Cache<String, String> cache = getCache(ehcacheProgrammaticConf, "myProgrammaticCacheConf"); + ResourcePools pools = cache.getRuntimeConfiguration().getResourcePools(); + + SizedResourcePool h = pools.getPoolForResource(ResourceType.Core.HEAP); + assertNotNull(h); + assertEquals(100, h.getSize()); + assertEquals(EntryUnit.ENTRIES, h.getUnit()); + + SizedResourcePool o = pools.getPoolForResource(ResourceType.Core.OFFHEAP); + assertNotNull(o); + assertEquals(1, o.getSize()); + assertEquals(MemoryUnit.MB, o.getUnit()); + } + + @Test + public void testFileConfiguration() throws Exception { + Cache<String, String> cache = getCache(ehcacheFileConf, "myFileCacheConf"); + ResourcePools pools = cache.getRuntimeConfiguration().getResourcePools(); + + SizedResourcePool h = pools.getPoolForResource(ResourceType.Core.HEAP); + assertNotNull(h); + assertEquals(150, h.getSize()); + assertEquals(EntryUnit.ENTRIES, h.getUnit()); + } + + @Test + public void testUserConfiguration() throws Exception { + fluentTemplate() + .withHeader(EhcacheConstants.ACTION, EhcacheConstants.ACTION_PUT) + .withHeader(EhcacheConstants.KEY, "user-key") + .withBody("user-val") + .to("direct:ehcacheUserConf") + .send(); + + Cache<Object, Object> cache = ehcacheUserConf.getManager().getCache("myUserCacheConf", Object.class, Object.class); + + assertTrue(cache instanceof UserManagedCache); + assertEquals("user-val", cache.get("user-key")); + } + + @Test + public void testCacheManager() throws Exception { + assertEquals( + context().getRegistry().lookupByNameAndType("myCacheManager", CacheManager.class), + ehcacheCacheManager.getManager().getCacheManager() + ); + + Cache<String, String> cache = getCache(ehcacheCacheManager, "myCache"); + ResourcePools pools = cache.getRuntimeConfiguration().getResourcePools(); + + SizedResourcePool h = pools.getPoolForResource(ResourceType.Core.HEAP); + assertNotNull(h); + assertEquals(100, h.getSize()); + assertEquals(EntryUnit.ENTRIES, h.getUnit()); + + SizedResourcePool o = pools.getPoolForResource(ResourceType.Core.OFFHEAP); + assertNotNull(o); + assertEquals(1, o.getSize()); + assertEquals(MemoryUnit.MB, o.getUnit()); + } + + protected Cache<String, String> getCache(EhcacheEndpoint endpoint, String cacheName) throws Exception { + return endpoint.getManager().getCache(cacheName, String.class, String.class); + } + + // **************************** + // Route + // **************************** + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() { + from("direct:ehcacheProgrammaticConf") + .to(ehcacheProgrammaticConf); + from("direct:ehcacheFileConf") + .to(ehcacheFileConf); + from("direct:ehcacheUserConf") + .to(ehcacheUserConf); + from("direct:ehcacheCacheManager") + .to(ehcacheCacheManager); + } + }; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheConfigurationTest.java ---------------------------------------------------------------------- diff --git a/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheConfigurationTest.java b/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheConfigurationTest.java index 6eabab0..6f6e877 100644 --- a/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheConfigurationTest.java +++ b/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/EhcacheConfigurationTest.java @@ -17,60 +17,56 @@ package org.apache.camel.component.ehcache; +import java.util.Collections; + import org.apache.camel.EndpointInject; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.impl.JndiRegistry; import org.apache.camel.test.junit4.CamelTestSupport; import org.ehcache.Cache; -import org.ehcache.CacheManager; -import org.ehcache.UserManagedCache; -import org.ehcache.config.ResourcePools; +import org.ehcache.config.CacheRuntimeConfiguration; import org.ehcache.config.ResourceType; -import org.ehcache.config.SizedResourcePool; import org.ehcache.config.builders.CacheConfigurationBuilder; -import org.ehcache.config.builders.CacheManagerBuilder; import org.ehcache.config.builders.ResourcePoolsBuilder; import org.ehcache.config.units.EntryUnit; import org.ehcache.config.units.MemoryUnit; +import org.ehcache.core.Ehcache; import org.junit.Test; public class EhcacheConfigurationTest extends CamelTestSupport { - @EndpointInject(uri = "ehcache:myProgrammaticCacheConf?configuration=#myProgrammaticConfiguration") - private EhcacheEndpoint ehcacheProgrammaticConf; - @EndpointInject(uri = "ehcache:myFileCacheConf?keyType=java.lang.String&valueType=java.lang.String&configurationUri=classpath:ehcache/ehcache-file-config.xml") - private EhcacheEndpoint ehcacheFileConf; - @EndpointInject(uri = "ehcache:myUserCacheConf") - private EhcacheEndpoint ehcacheUserConf; - @EndpointInject(uri = "ehcache:myCache?cacheManager=#myCacheManager&keyType=java.lang.String&valueType=java.lang.String") - private EhcacheEndpoint ehcacheCacheManager; + @EndpointInject(uri = "ehcache:globalConfig") + EhcacheEndpoint globalConfig; + @EndpointInject(uri = "ehcache:customConfig") + EhcacheEndpoint customConfig; @Override protected JndiRegistry createRegistry() throws Exception { - JndiRegistry registry = super.createRegistry(); - registry.bind( - "myProgrammaticConfiguration", + EhcacheComponent component = new EhcacheComponent(); + component.setCacheConfiguration( CacheConfigurationBuilder.newCacheConfigurationBuilder( String.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .heap(100, EntryUnit.ENTRIES) .offheap(1, MemoryUnit.MB)) - .build() + .build() ); - registry.bind( - "myCacheManager", - CacheManagerBuilder.newCacheManagerBuilder() - .withCache( - "myCache", - CacheConfigurationBuilder.newCacheConfigurationBuilder( + component.setCachesConfigurations( + Collections.singletonMap( + "customConfig", + CacheConfigurationBuilder.newCacheConfigurationBuilder( String.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() - .heap(100, EntryUnit.ENTRIES) - .offheap(1, MemoryUnit.MB)) - ).build(true) + .heap(200, EntryUnit.ENTRIES) + .offheap(2, MemoryUnit.MB)) + .build() + ) ); + JndiRegistry registry = super.createRegistry(); + registry.bind("ehcache", component); + return registry; } @@ -79,70 +75,24 @@ public class EhcacheConfigurationTest extends CamelTestSupport { // ***************************** @Test - public void testProgrammaticConfiguration() throws Exception { - Cache<String, String> cache = getCache(ehcacheProgrammaticConf, "myProgrammaticCacheConf"); - ResourcePools pools = cache.getRuntimeConfiguration().getResourcePools(); - - SizedResourcePool h = pools.getPoolForResource(ResourceType.Core.HEAP); - assertNotNull(h); - assertEquals(100, h.getSize()); - assertEquals(EntryUnit.ENTRIES, h.getUnit()); - - SizedResourcePool o = pools.getPoolForResource(ResourceType.Core.OFFHEAP); - assertNotNull(o); - assertEquals(1, o.getSize()); - assertEquals(MemoryUnit.MB, o.getUnit()); - } - - @Test - public void testFileConfiguration() throws Exception { - Cache<String, String> cache = getCache(ehcacheFileConf, "myFileCacheConf"); - ResourcePools pools = cache.getRuntimeConfiguration().getResourcePools(); - - SizedResourcePool h = pools.getPoolForResource(ResourceType.Core.HEAP); - assertNotNull(h); - assertEquals(150, h.getSize()); - assertEquals(EntryUnit.ENTRIES, h.getUnit()); - } - - @Test - public void testUserConfiguration() throws Exception { - fluentTemplate() - .withHeader(EhcacheConstants.ACTION, EhcacheConstants.ACTION_PUT) - .withHeader(EhcacheConstants.KEY, "user-key") - .withBody("user-val") - .to("direct:ehcacheUserConf") - .send(); - - Cache<Object, Object> cache = ehcacheUserConf.getManager().getCache("myUserCacheConf", Object.class, Object.class); - - assertTrue(cache instanceof UserManagedCache); - assertEquals("user-val", cache.get("user-key")); - } - - @Test - public void testCacheManager() throws Exception { - assertEquals( - context().getRegistry().lookupByNameAndType("myCacheManager", CacheManager.class), - ehcacheCacheManager.getManager().getCacheManager() - ); - - Cache<String, String> cache = getCache(ehcacheCacheManager, "myCache"); - ResourcePools pools = cache.getRuntimeConfiguration().getResourcePools(); - - SizedResourcePool h = pools.getPoolForResource(ResourceType.Core.HEAP); - assertNotNull(h); - assertEquals(100, h.getSize()); - assertEquals(EntryUnit.ENTRIES, h.getUnit()); - - SizedResourcePool o = pools.getPoolForResource(ResourceType.Core.OFFHEAP); - assertNotNull(o); - assertEquals(1, o.getSize()); - assertEquals(MemoryUnit.MB, o.getUnit()); - } - - protected Cache<String, String> getCache(EhcacheEndpoint endpoint, String cacheName) throws Exception { - return endpoint.getManager().getCache(cacheName, String.class, String.class); + public void testConfiguration() throws Exception { + Cache<String, String> globalConfigCache = globalConfig.getManager().getCache("globalConfig", String.class, String.class); + Cache<String, String> customConfigCache = customConfig.getManager().getCache("customConfig", String.class, String.class); + + assertTrue(globalConfigCache instanceof Ehcache); + assertTrue(customConfigCache instanceof Ehcache); + + CacheRuntimeConfiguration<String, String> gc = globalConfigCache.getRuntimeConfiguration(); + assertEquals(100, gc.getResourcePools().getPoolForResource(ResourceType.Core.HEAP).getSize()); + assertEquals(EntryUnit.ENTRIES, gc.getResourcePools().getPoolForResource(ResourceType.Core.HEAP).getUnit()); + assertEquals(1, gc.getResourcePools().getPoolForResource(ResourceType.Core.OFFHEAP).getSize()); + assertEquals(MemoryUnit.MB, gc.getResourcePools().getPoolForResource(ResourceType.Core.OFFHEAP).getUnit()); + + CacheRuntimeConfiguration<String, String> cc = customConfigCache.getRuntimeConfiguration(); + assertEquals(200, cc.getResourcePools().getPoolForResource(ResourceType.Core.HEAP).getSize()); + assertEquals(EntryUnit.ENTRIES, cc.getResourcePools().getPoolForResource(ResourceType.Core.HEAP).getUnit()); + assertEquals(2, cc.getResourcePools().getPoolForResource(ResourceType.Core.OFFHEAP).getSize()); + assertEquals(MemoryUnit.MB, cc.getResourcePools().getPoolForResource(ResourceType.Core.OFFHEAP).getUnit()); } // **************************** @@ -153,14 +103,9 @@ public class EhcacheConfigurationTest extends CamelTestSupport { protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { public void configure() { - from("direct:ehcacheProgrammaticConf") - .to(ehcacheProgrammaticConf); - from("direct:ehcacheFileConf") - .to(ehcacheFileConf); - from("direct:ehcacheUserConf") - .to(ehcacheUserConf); - from("direct:ehcacheCacheManager") - .to(ehcacheCacheManager); + from("direct:ehcache") + .to(globalConfig) + .to(customConfig); } }; } http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/java/org/apache/camel/component/ehcache/springboot/EhcacheComponentConfiguration.java ---------------------------------------------------------------------- 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 b14da5f..4f7288d 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 @@ -16,9 +16,10 @@ */ package org.apache.camel.component.ehcache.springboot; +import java.util.Map; import java.util.Set; import javax.annotation.Generated; -import org.apache.camel.component.ehcache.EhcacheComponent; + import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon; import org.ehcache.CacheManager; import org.ehcache.config.CacheConfiguration; @@ -61,6 +62,10 @@ public class EhcacheComponentConfiguration @NestedConfigurationProperty private CacheConfiguration<?, ?> cacheConfiguration; /** + * A map of caches configurations to be used to create caches. + */ + private Map<String, CacheConfiguration<?, ?>> cachesConfigurations; + /** * URI pointing to the Ehcache XML configuration file's location */ private String cacheConfigurationUri; @@ -106,6 +111,15 @@ public class EhcacheComponentConfiguration this.cacheConfiguration = cacheConfiguration; } + public Map<String, CacheConfiguration<?, ?>> getCachesConfigurations() { + return cachesConfigurations; + } + + public void setCachesConfigurations( + Map<String, CacheConfiguration<?, ?>> cachesConfigurations) { + this.cachesConfigurations = cachesConfigurations; + } + public String getCacheConfigurationUri() { return cacheConfigurationUri; } @@ -166,6 +180,7 @@ public class EhcacheComponentConfiguration * The default cache configuration to be used to create caches. */ private CacheConfiguration configuration; + private Map configurations; /** * The cache key type, default "java.lang.Object" */ @@ -267,6 +282,14 @@ public class EhcacheComponentConfiguration this.configuration = configuration; } + public Map getConfigurations() { + return configurations; + } + + public void setConfigurations(Map configurations) { + this.configurations = configurations; + } + public String getKeyType() { return keyType; } http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizer.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizer.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizer.java new file mode 100644 index 0000000..f82d857 --- /dev/null +++ b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizer.java @@ -0,0 +1,100 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.ehcache.springboot.customizer; + +import java.util.Map; + +import org.apache.camel.component.ehcache.EhcacheComponent; +import org.apache.camel.component.ehcache.springboot.EhcacheComponentAutoConfiguration; +import org.apache.camel.spi.ComponentCustomizer; +import org.apache.camel.spi.HasId; +import org.apache.camel.spring.boot.CamelAutoConfiguration; +import org.ehcache.config.CacheConfiguration; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.AllNestedConditions; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Conditional; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; + +/** + * A simple implementation of {@link ComponentCustomizer} that auto discovers a + * {@link org.ehcache.config.CacheConfiguration} instance and bind it to the + * {@link EhcacheComponent} component. + * + * This customizer can be disabled/enabled with different strategies: + * + * 1. globally using: + * camel.component.customizer.enable = true/false + * 2. for component: + * camel.component.ehcache.customizer.enabled = true/false + * 3. individually: + * camel.component.ehcache.customizer.cache-configuration.enabled = true/false + */ +@Order(Ordered.LOWEST_PRECEDENCE) +@Configuration +@Conditional(CacheConfigurationCustomizer.NestedConditions.class) +@AutoConfigureAfter(CamelAutoConfiguration.class) +@AutoConfigureBefore(EhcacheComponentAutoConfiguration.class) +@EnableConfigurationProperties(CacheConfigurationCustomizerConfiguration.class) +public class CacheConfigurationCustomizer implements HasId, ComponentCustomizer<EhcacheComponent> { + @Autowired(required = false) + private Map<String, CacheConfiguration<?, ?>> configurations; + @Autowired + private CacheConfigurationCustomizerConfiguration configuration; + + @Override + public void customize(EhcacheComponent component) { + if (configurations != null && configuration.getMode() == CacheConfigurationCustomizerConfiguration.Mode.APPEND) { + component.addCachesConfigurations(configurations); + } + if (configurations != null && configuration.getMode() == CacheConfigurationCustomizerConfiguration.Mode.REPLACE) { + component.setCachesConfigurations(configurations); + } + } + + @Override + public String getId() { + return "camel.component.ehcache.customizer.cache-configuration"; + } + + // ************************************************************************* + // By default ConditionalOnBean works using an OR operation so if you list + // a number of classes, the condition succeeds if a single instance of any + // class is found. + // + // A workaround is to use AllNestedConditions and creates some dummy classes + // annotated with @ConditionalOnBean + // + // This should be fixed in spring-boot 2.0 where ConditionalOnBean uses and + // AND operation instead of the OR as it does today. + // ************************************************************************* + + static class NestedConditions extends AllNestedConditions { + public NestedConditions() { + super(ConfigurationPhase.REGISTER_BEAN); + } + + @ConditionalOnBean(CamelAutoConfiguration.class) + static class OnCamelAutoConfiguration { + } + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizerConfiguration.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizerConfiguration.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizerConfiguration.java new file mode 100644 index 0000000..df2f290 --- /dev/null +++ b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizerConfiguration.java @@ -0,0 +1,54 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.ehcache.springboot.customizer; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +@ConfigurationProperties(prefix = "camel.component.ehcache.customizer.cache-configuration") +public class CacheConfigurationCustomizerConfiguration { + /** + * Enable or disable the cache-configuration customizer. + */ + private boolean enabled = true; + + /** + * Configure if the cache configurations have be added or they have to replace those already configured on the component. + */ + private Mode mode = Mode.APPEND; + + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public Mode getMode() { + return mode; + } + + public void setMode(Mode mode) { + this.mode = mode; + } + + public enum Mode { + REPLACE, + APPEND + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/resources/META-INF/spring.factories ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/resources/META-INF/spring.factories index 3e2aa80..572e1b0 100644 --- a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/resources/META-INF/spring.factories +++ b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/main/resources/META-INF/spring.factories @@ -16,4 +16,5 @@ ## --------------------------------------------------------------------------- org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.apache.camel.component.ehcache.springboot.customizer.CacheManagerCustomizer,\ +org.apache.camel.component.ehcache.springboot.customizer.CacheConfigurationCustomizer,\ org.apache.camel.component.ehcache.springboot.EhcacheComponentAutoConfiguration http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerEnabledOnComponentTest.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerEnabledOnComponentTest.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerEnabledOnComponentTest.java deleted file mode 100644 index b1ac948..0000000 --- a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerEnabledOnComponentTest.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.component.ehcache.springboot; - -import org.junit.runner.RunWith; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@DirtiesContext -@SpringBootApplication -@SpringBootTest( - classes = { - CacheManagerCustomizerEnabledTestBase.TestConfiguration.class - }, - properties = { - "debug=false", - "camel.component.customizer.enabled=false", - "camel.component.ehcache.customizer.enabled=true" - }) -public class CacheManagerCustomizerEnabledOnComponentTest extends CacheManagerCustomizerEnabledTestBase { -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerEnabledTest.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerEnabledTest.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerEnabledTest.java deleted file mode 100644 index 860c6b7..0000000 --- a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerEnabledTest.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.component.ehcache.springboot; - -import org.junit.runner.RunWith; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@DirtiesContext -@SpringBootApplication -@SpringBootTest( - classes = { - CacheManagerCustomizerEnabledTestBase.TestConfiguration.class - }, - properties = { - "debug=false", - "camel.component.customizer.enabled=false", - "camel.component.ehcache.customizer.enabled=false", - "camel.component.ehcache.customizer.cache-manager.enabled=true" - }) -public class CacheManagerCustomizerEnabledTest extends CacheManagerCustomizerEnabledTestBase { -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerEnabledTestBase.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerEnabledTestBase.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerEnabledTestBase.java deleted file mode 100644 index 5851f3c..0000000 --- a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerEnabledTestBase.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.component.ehcache.springboot; - -import org.apache.camel.component.ehcache.EhcacheComponent; -import org.ehcache.CacheManager; -import org.ehcache.config.builders.CacheManagerBuilder; -import org.junit.Assert; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -class CacheManagerCustomizerEnabledTestBase { - @Autowired - CacheManager cacheManager; - @Autowired - EhcacheComponent component; - - @Test - public void testComponentConfiguration() throws Exception { - Assert.assertNotNull(cacheManager); - Assert.assertNotNull(component); - Assert.assertNotNull(component.getCacheManager()); - } - - @Configuration - public static class TestConfiguration { - @Bean(initMethod = "init", destroyMethod = "close") - public CacheManager cacheManager() { - return CacheManagerBuilder.newCacheManagerBuilder().build(); - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNoOverrideTest.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNoOverrideTest.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNoOverrideTest.java deleted file mode 100644 index 598e6cb..0000000 --- a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNoOverrideTest.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.component.ehcache.springboot; - -import org.apache.camel.component.ehcache.EhcacheComponent; -import org.apache.camel.spi.ComponentCustomizer; -import org.apache.camel.spring.boot.CamelAutoConfiguration; -import org.ehcache.CacheManager; -import org.ehcache.config.builders.CacheManagerBuilder; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.Order; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@DirtiesContext -@SpringBootApplication -@SpringBootTest( - classes = { - CacheManagerCustomizerNoOverrideTest.TestConfiguration.class - }, - properties = { - "debug=false", - "camel.component.ehcache.customizer.cache-manager.enabled=true", - "camel.component.ehcache.customizer.cache-manager.override=false" - }) -public class CacheManagerCustomizerNoOverrideTest { - private static final CacheManager CACHE_MANAGER = CacheManagerBuilder.newCacheManagerBuilder().build(); - @Autowired - CacheManager cacheManager; - @Autowired - EhcacheComponent component; - - @Test - public void testComponentConfiguration() throws Exception { - Assert.assertNotNull(cacheManager); - Assert.assertNotNull(component); - Assert.assertNotNull(component.getCacheManager()); - Assert.assertEquals(CACHE_MANAGER, component.getCacheManager()); - } - - @Configuration - @AutoConfigureAfter(CamelAutoConfiguration.class) - @AutoConfigureBefore(EhcacheComponentAutoConfiguration.class) - public static class TestConfiguration { - - @Order(Ordered.HIGHEST_PRECEDENCE) - @Bean - public ComponentCustomizer<EhcacheComponent> customizer() { - return new ComponentCustomizer<EhcacheComponent>() { - @Override - public void customize(EhcacheComponent component) { - component.setCacheManager(CACHE_MANAGER); - } - }; - } - - @Bean(initMethod = "init", destroyMethod = "close") - public CacheManager cacheManager() { - return CacheManagerBuilder.newCacheManagerBuilder().build(); - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledGlobalTest.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledGlobalTest.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledGlobalTest.java deleted file mode 100644 index c7bdd9f..0000000 --- a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledGlobalTest.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.component.ehcache.springboot; - -import org.junit.runner.RunWith; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@DirtiesContext -@SpringBootApplication -@SpringBootTest( - classes = { - CacheManagerCustomizerNotEnabledTestBase.TestConfiguration.class - }, - properties = { - "debug=false", - "camel.component.customizer.enabled=false" - }) -public class CacheManagerCustomizerNotEnabledGlobalTest extends CacheManagerCustomizerNotEnabledTestBase { -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledOnComponentTest.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledOnComponentTest.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledOnComponentTest.java deleted file mode 100644 index 330ba6e..0000000 --- a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledOnComponentTest.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.component.ehcache.springboot; - -import org.junit.runner.RunWith; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@DirtiesContext -@SpringBootApplication -@SpringBootTest( - classes = { - CacheManagerCustomizerNotEnabledTestBase.TestConfiguration.class - }, - properties = { - "debug=false", - "camel.component.customizer.enabled=true", - "camel.component.ehcache.customizer.enabled=false" - }) -public class CacheManagerCustomizerNotEnabledOnComponentTest extends CacheManagerCustomizerNotEnabledTestBase { -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledTest.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledTest.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledTest.java deleted file mode 100644 index 76d1791..0000000 --- a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledTest.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.component.ehcache.springboot; - -import org.junit.runner.RunWith; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@DirtiesContext -@SpringBootApplication -@SpringBootTest( - classes = { - CacheManagerCustomizerNotEnabledTestBase.TestConfiguration.class - }, - properties = { - "debug=false", - "camel.component.ehcache.customizer.cache-manager.enabled=false" - }) -public class CacheManagerCustomizerNotEnabledTest extends CacheManagerCustomizerNotEnabledTestBase { -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledTestBase.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledTestBase.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledTestBase.java deleted file mode 100644 index 0a4b6a1..0000000 --- a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerNotEnabledTestBase.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.component.ehcache.springboot; - -import org.apache.camel.component.ehcache.EhcacheComponent; -import org.ehcache.CacheManager; -import org.ehcache.config.builders.CacheManagerBuilder; -import org.junit.Assert; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -class CacheManagerCustomizerNotEnabledTestBase { - @Autowired - CacheManager cacheManager; - @Autowired - EhcacheComponent component; - - @Test - public void testComponentConfiguration() throws Exception { - Assert.assertNotNull(cacheManager); - Assert.assertNotNull(component); - Assert.assertNull(component.getCacheManager()); - } - - @Configuration - public static class TestConfiguration { - @Bean(initMethod = "init", destroyMethod = "close") - public CacheManager cacheManager() { - return CacheManagerBuilder.newCacheManagerBuilder().build(); - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerOverrideTest.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerOverrideTest.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerOverrideTest.java deleted file mode 100644 index 086bab5..0000000 --- a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerOverrideTest.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.component.ehcache.springboot; - -import org.apache.camel.component.ehcache.EhcacheComponent; -import org.apache.camel.spi.ComponentCustomizer; -import org.apache.camel.spring.boot.CamelAutoConfiguration; -import org.ehcache.CacheManager; -import org.ehcache.config.builders.CacheManagerBuilder; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.Order; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@DirtiesContext -@SpringBootApplication -@SpringBootTest( - classes = { - CacheManagerCustomizerOverrideTest.TestConfiguration.class - }, - properties = { - "debug=false", - "camel.component.ehcache.customizer.cache-manager.enabled=true", - "camel.component.ehcache.customizer.cache-manager.override=true" - }) -public class CacheManagerCustomizerOverrideTest { - private static final CacheManager CACHE_MANAGER = CacheManagerBuilder.newCacheManagerBuilder().build(); - @Autowired - CacheManager cacheManager; - @Autowired - EhcacheComponent component; - - @Test - public void testComponentConfiguration() throws Exception { - Assert.assertNotNull(cacheManager); - Assert.assertNotNull(component); - Assert.assertNotNull(component.getCacheManager()); - Assert.assertEquals(cacheManager, component.getCacheManager()); - } - - @Configuration - @AutoConfigureAfter(CamelAutoConfiguration.class) - @AutoConfigureBefore(EhcacheComponentAutoConfiguration.class) - public static class TestConfiguration { - - @Order(Ordered.HIGHEST_PRECEDENCE) - @Bean - public ComponentCustomizer<EhcacheComponent> customizer() { - return new ComponentCustomizer<EhcacheComponent>() { - @Override - public void customize(EhcacheComponent component) { - component.setCacheManager(CACHE_MANAGER); - } - }; - } - - @Bean(initMethod = "init", destroyMethod = "close") - public CacheManager cacheManager() { - return CacheManagerBuilder.newCacheManagerBuilder().build(); - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerTest.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerTest.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerTest.java deleted file mode 100644 index 6a74037..0000000 --- a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerTest.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.component.ehcache.springboot; - -import org.apache.camel.component.ehcache.EhcacheComponent; -import org.ehcache.CacheManager; -import org.ehcache.config.builders.CacheManagerBuilder; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@DirtiesContext -@SpringBootApplication -@SpringBootTest( - classes = { - CacheManagerCustomizerTest.TestConfiguration.class - }, - properties = { - "debug=false", - }) -public class CacheManagerCustomizerTest { - @Autowired - CacheManager cacheManager; - @Autowired - EhcacheComponent component; - - @Test - public void testComponentConfiguration() throws Exception { - Assert.assertNotNull(cacheManager); - Assert.assertNotNull(component); - Assert.assertEquals(cacheManager, component.getCacheManager()); - } - - @Configuration - public static class TestConfiguration { - @Bean(initMethod = "init", destroyMethod = "close") - public CacheManager cacheManager() { - return CacheManagerBuilder.newCacheManagerBuilder().build(); - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerWithoutCacheManagerTest.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerWithoutCacheManagerTest.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerWithoutCacheManagerTest.java deleted file mode 100644 index c7daab2..0000000 --- a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerWithoutCacheManagerTest.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.component.ehcache.springboot; - -import org.apache.camel.component.ehcache.EhcacheComponent; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Configuration; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@DirtiesContext -@SpringBootApplication -@SpringBootTest( - classes = { - CacheManagerCustomizerWithoutCacheManagerTest.TestConfiguration.class - }, - properties = { - "debug=false", - }) -public class CacheManagerCustomizerWithoutCacheManagerTest { - @Autowired - EhcacheComponent component; - - @Test - public void testComponentConfiguration() throws Exception { - Assert.assertNotNull(component); - Assert.assertNull(component.getCacheManager()); - } - - @Configuration - public static class TestConfiguration { - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizerEnabledAppendTest.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizerEnabledAppendTest.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizerEnabledAppendTest.java new file mode 100644 index 0000000..4ea7a15 --- /dev/null +++ b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizerEnabledAppendTest.java @@ -0,0 +1,121 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.ehcache.springboot.customizer; + +import java.util.Collections; +import java.util.Map; +import java.util.UUID; + +import org.apache.camel.component.ehcache.EhcacheComponent; +import org.apache.camel.spi.ComponentCustomizer; +import org.ehcache.config.CacheConfiguration; +import org.ehcache.config.builders.CacheConfigurationBuilder; +import org.ehcache.config.builders.ResourcePoolsBuilder; +import org.ehcache.config.units.EntryUnit; +import org.ehcache.config.units.MemoryUnit; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@DirtiesContext +@SpringBootApplication +@SpringBootTest( + classes = { + CacheConfigurationCustomizerEnabledAppendTest.TestConfiguration.class + }, + properties = { + "debug=false", + "camel.component.customizer.enabled=false", + "camel.component.ehcache.customizer.enabled=true", + "camel.component.ehcache.customizer.cache-configuration.enabled=true", + "camel.component.ehcache.customizer.cache-configuration.mode=APPEND" + }) +public class CacheConfigurationCustomizerEnabledAppendTest { + private static final String CACHE_CONFIG_ID = UUID.randomUUID().toString(); + + @Autowired + Map<String, CacheConfiguration<?, ?>> configurations; + @Autowired + EhcacheComponent component; + + @Test + public void testComponentConfiguration() throws Exception { + Assert.assertNotNull(configurations); + Assert.assertEquals(2, configurations.size()); + Assert.assertNotNull(component); + Assert.assertNotNull(component.getCachesConfigurations()); + Assert.assertEquals(3, component.getCachesConfigurations().size()); + Assert.assertTrue(component.getCachesConfigurations().containsKey("myConfig1")); + Assert.assertTrue(component.getCachesConfigurations().containsKey("myConfig2")); + Assert.assertTrue(component.getCachesConfigurations().containsKey(CACHE_CONFIG_ID)); + } + + @Configuration + static class TestConfiguration { + @Order(Ordered.HIGHEST_PRECEDENCE) + @Bean + public ComponentCustomizer<EhcacheComponent> customizer() { + return new ComponentCustomizer<EhcacheComponent>() { + @Override + public void customize(EhcacheComponent component) { + component.addCachesConfigurations(Collections.singletonMap( + CACHE_CONFIG_ID, + CacheConfigurationBuilder.newCacheConfigurationBuilder( + String.class, + String.class, + ResourcePoolsBuilder.newResourcePoolsBuilder() + .heap(2100, EntryUnit.ENTRIES) + .offheap(2, MemoryUnit.MB)) + .build() + )); + } + }; + } + + @Bean + public CacheConfiguration<?, ?> myConfig1() { + return CacheConfigurationBuilder.newCacheConfigurationBuilder( + String.class, + String.class, + ResourcePoolsBuilder.newResourcePoolsBuilder() + .heap(100, EntryUnit.ENTRIES) + .offheap(1, MemoryUnit.MB)) + .build(); + } + + @Bean + public CacheConfiguration<?, ?> myConfig2() { + return CacheConfigurationBuilder.newCacheConfigurationBuilder( + String.class, + String.class, + ResourcePoolsBuilder.newResourcePoolsBuilder() + .heap(2100, EntryUnit.ENTRIES) + .offheap(2, MemoryUnit.MB)) + .build(); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/f3004024/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizerEnabledReplaceTest.java ---------------------------------------------------------------------- diff --git a/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizerEnabledReplaceTest.java b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizerEnabledReplaceTest.java new file mode 100644 index 0000000..7471d19 --- /dev/null +++ b/platforms/spring-boot/components-starter/camel-ehcache-starter/src/test/java/org/apache/camel/component/ehcache/springboot/customizer/CacheConfigurationCustomizerEnabledReplaceTest.java @@ -0,0 +1,121 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.ehcache.springboot.customizer; + +import java.util.Collections; +import java.util.Map; +import java.util.UUID; + +import org.apache.camel.component.ehcache.EhcacheComponent; +import org.apache.camel.spi.ComponentCustomizer; +import org.ehcache.config.CacheConfiguration; +import org.ehcache.config.builders.CacheConfigurationBuilder; +import org.ehcache.config.builders.ResourcePoolsBuilder; +import org.ehcache.config.units.EntryUnit; +import org.ehcache.config.units.MemoryUnit; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@DirtiesContext +@SpringBootApplication +@SpringBootTest( + classes = { + CacheConfigurationCustomizerEnabledReplaceTest.TestConfiguration.class, + }, + properties = { + "debug=false", + "camel.component.customizer.enabled=false", + "camel.component.ehcache.customizer.enabled=true", + "camel.component.ehcache.customizer.cache-configuration.enabled=true", + "camel.component.ehcache.customizer.cache-configuration.mode=REPLACE" + }) +public class CacheConfigurationCustomizerEnabledReplaceTest { + private static final String CACHE_CONFIG_ID = UUID.randomUUID().toString(); + + @Autowired + Map<String, CacheConfiguration<?, ?>> configurations; + @Autowired + EhcacheComponent component; + + @Test + public void testComponentConfiguration() throws Exception { + Assert.assertNotNull(configurations); + Assert.assertEquals(2, configurations.size()); + Assert.assertNotNull(component); + Assert.assertNotNull(component.getCachesConfigurations()); + Assert.assertEquals(2, component.getCachesConfigurations().size()); + Assert.assertTrue(component.getCachesConfigurations().containsKey("myConfig1")); + Assert.assertTrue(component.getCachesConfigurations().containsKey("myConfig2")); + Assert.assertFalse(component.getCachesConfigurations().containsKey(CACHE_CONFIG_ID)); + } + + @Configuration + static class TestConfiguration { + @Order(Ordered.HIGHEST_PRECEDENCE) + @Bean + public ComponentCustomizer<EhcacheComponent> customizer() { + return new ComponentCustomizer<EhcacheComponent>() { + @Override + public void customize(EhcacheComponent component) { + component.addCachesConfigurations(Collections.singletonMap( + CACHE_CONFIG_ID, + CacheConfigurationBuilder.newCacheConfigurationBuilder( + String.class, + String.class, + ResourcePoolsBuilder.newResourcePoolsBuilder() + .heap(2100, EntryUnit.ENTRIES) + .offheap(2, MemoryUnit.MB)) + .build() + )); + } + }; + } + + @Bean + public CacheConfiguration<?, ?> myConfig1() { + return CacheConfigurationBuilder.newCacheConfigurationBuilder( + String.class, + String.class, + ResourcePoolsBuilder.newResourcePoolsBuilder() + .heap(100, EntryUnit.ENTRIES) + .offheap(1, MemoryUnit.MB)) + .build(); + } + + @Bean + public CacheConfiguration<?, ?> myConfig2() { + return CacheConfigurationBuilder.newCacheConfigurationBuilder( + String.class, + String.class, + ResourcePoolsBuilder.newResourcePoolsBuilder() + .heap(2100, EntryUnit.ENTRIES) + .offheap(2, MemoryUnit.MB)) + .build(); + } + } +} \ No newline at end of file