Repository: camel Updated Branches: refs/heads/master b9f91f4d3 -> e3c9f1b01
CAMEL-10234: Improve OSGi camel-jcache support Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e3c9f1b0 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e3c9f1b0 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e3c9f1b0 Branch: refs/heads/master Commit: e3c9f1b01f74d8105f81fa2a9fcf8d1cd902c690 Parents: b9f91f4 Author: lburgazzoli <lburgazz...@gmail.com> Authored: Wed Aug 10 17:22:09 2016 +0200 Committer: lburgazzoli <lburgazz...@gmail.com> Committed: Fri Aug 12 15:48:52 2016 +0200 ---------------------------------------------------------------------- components/camel-jcache/pom.xml | 7 ++ .../camel-jcache/src/main/docs/jcache.adoc | 7 +- .../camel/component/jcache/JCacheComponent.java | 4 +- .../component/jcache/JCacheConfiguration.java | 50 +++++++- .../camel/component/jcache/JCacheEndpoint.java | 10 +- .../camel/component/jcache/JCacheHelper.java | 63 +++++++++++ .../camel/component/jcache/JCacheManager.java | 102 ++++++++--------- .../camel/component/jcache/JCacheProvider.java | 22 ++++ .../camel/component/jcache/JCacheProviders.java | 71 ++++++++++++ .../component/jcache/osgi/OSGiCacheManager.java | 113 +++++++++++++++++++ .../aggregate/JCacheAggregationRepository.java | 37 +++--- .../idempotent/JCacheIdempotentRepository.java | 39 +++---- .../component/jcache/JCacheManagerTest.java | 6 +- .../JCacheAggregationRepositoryTestSupport.java | 3 +- .../JCacheIdempotentRepositoryTest.java | 3 +- 15 files changed, 418 insertions(+), 119 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/pom.xml ---------------------------------------------------------------------- diff --git a/components/camel-jcache/pom.xml b/components/camel-jcache/pom.xml index cacc9ba..7584eb1 100644 --- a/components/camel-jcache/pom.xml +++ b/components/camel-jcache/pom.xml @@ -52,6 +52,13 @@ <version>${jcache-bundle-version}</version> </dependency> + <!-- osgi --> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.core</artifactId> + <scope>provided</scope> + </dependency> + <!-- testing --> <dependency> <groupId>org.apache.camel</groupId> http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/src/main/docs/jcache.adoc ---------------------------------------------------------------------- diff --git a/components/camel-jcache/src/main/docs/jcache.adoc b/components/camel-jcache/src/main/docs/jcache.adoc index cc1cdfe..4c09c8d 100644 --- a/components/camel-jcache/src/main/docs/jcache.adoc +++ b/components/camel-jcache/src/main/docs/jcache.adoc @@ -5,8 +5,10 @@ JCache + + // endpoint options: START -The JCache component supports 22 endpoint options which are listed below: +The JCache component supports 23 endpoint options which are listed below: {% raw %} [width="100%",cols="2s,1,1m,1m,5",options="header"] @@ -34,6 +36,7 @@ The JCache component supports 22 endpoint options which are listed below: | createCacheIfNotExists | advanced | true | boolean | Configure if a cache need to be created if it does exist or can't be pre-configured. | exchangePattern | advanced | InOnly | ExchangePattern | Sets the default exchange pattern when creating an exchange | expiryPolicyFactory | advanced | | ExpiryPolicy> | The ExpiryPolicy factory +| lookupProviders | advanced | false | boolean | Configure if a camel-cache should try to find implementations of jcache api in runtimes like OSGi. |======================================================================= {% endraw %} // endpoint options: END @@ -43,6 +46,8 @@ The JCache component supports 22 endpoint options which are listed below: + + // component options: START The JCache component has no options. // component options: END http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheComponent.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheComponent.java index c94af86..8ee5052 100644 --- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheComponent.java +++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheComponent.java @@ -36,9 +36,9 @@ public class JCacheComponent extends UriEndpointComponent { @Override protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { - JCacheConfiguration configuration = new JCacheConfiguration(getCamelContext()); + JCacheConfiguration configuration = new JCacheConfiguration(getCamelContext(), remaining); setProperties(configuration, parameters); - return new JCacheEndpoint(uri, this, configuration, remaining); + return new JCacheEndpoint(uri, this, configuration); } } http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheConfiguration.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheConfiguration.java index ceda31a..05dd5a6 100644 --- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheConfiguration.java +++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheConfiguration.java @@ -93,14 +93,46 @@ public class JCacheConfiguration { @UriParam(label = "advanced", defaultValue = "true") private boolean createCacheIfNotExists = true; - private final CamelContext camelContext; + @UriParam(label = "advanced") + private boolean lookupProviders; + + private CamelContext camelContext; + private String cacheName; + public JCacheConfiguration() { - this(null); + this(null, null); } - public JCacheConfiguration(CamelContext camelContext) { + public JCacheConfiguration(String cacheName) { + this(null, cacheName); + } + + public JCacheConfiguration(CamelContext camelContext, String cacheName) { this.camelContext = camelContext; + this.cacheName = cacheName; + } + + public CamelContext getCamelContext() { + return this.camelContext; + } + + public void setCamelContext(CamelContext camelContext) { + this.camelContext = camelContext; + } + + public String getCacheName() { + return this.cacheName; + } + + public void setCacheName(String cacheName) { + this.cacheName = cacheName; + } + + public ClassLoader getApplicationContextClassLoader() { + return this.camelContext != null + ? this.camelContext.getApplicationContextClassLoader() + : null; } /** @@ -315,4 +347,16 @@ public class JCacheConfiguration { public void setCreateCacheIfNotExists(boolean createCacheIfNotExists) { this.createCacheIfNotExists = createCacheIfNotExists; } + + public boolean isLookupProviders() { + return lookupProviders; + } + + /** + * Configure if a camel-cache should try to find implementations of jcache + * api in runtimes like OSGi. + */ + public void setLookupProviders(boolean lookupProviders) { + this.lookupProviders = lookupProviders; + } } http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheEndpoint.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheEndpoint.java index ffa8c2d..079ab12 100644 --- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheEndpoint.java +++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheEndpoint.java @@ -38,16 +38,12 @@ public class JCacheEndpoint extends DefaultEndpoint { private final JCacheConfiguration cacheConfiguration; private final JCacheManager<Object, Object> cacheManager; - public JCacheEndpoint(String uri, JCacheComponent component, JCacheConfiguration configuration, String cacheName) { + public JCacheEndpoint(String uri, JCacheComponent component, JCacheConfiguration configuration) { super(uri, component); - this.cacheName = cacheName; + this.cacheName = configuration.getCacheName(); this.cacheConfiguration = configuration; - this.cacheManager = new JCacheManager<>( - configuration, - cacheName, - component.getCamelContext().getApplicationContextClassLoader(), - component.getCamelContext()); + this.cacheManager = JCacheHelper.createManager(configuration); } @Override http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheHelper.java ---------------------------------------------------------------------- diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheHelper.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheHelper.java new file mode 100644 index 0000000..bf591a7 --- /dev/null +++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheHelper.java @@ -0,0 +1,63 @@ +/** + * 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.jcache; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; + +import org.apache.camel.RuntimeCamelException; + +public final class JCacheHelper { + private JCacheHelper() { + } + + public static <K, V> JCacheManager<K, V> createManager(JCacheConfiguration configuration) { + try { + // Check if we are in an osgi container + Class.forName("org.osgi.framework.FrameworkUtil"); + Class<?> type = Class.forName("org.apache.camel.component.jcache.osgi.OSGiCacheManager"); + Constructor<?> ctor = type.getConstructor(JCacheConfiguration.class); + + return (JCacheManager<K, V>)ctor.newInstance(configuration); + } catch (ClassNotFoundException e) { + return new JCacheManager<>(configuration); + } catch (Exception e) { + throw new RuntimeCamelException(e); + } + } + + @SuppressWarnings("uncheked") + public static <T> T tcclProxy(final T instance, Class<T> type, final ClassLoader classLoader) { + return (T) Proxy.newProxyInstance( + JCacheHelper.class.getClassLoader(), + new Class<?>[] { + type + }, + (Object proxy, Method method, Object[] args) -> { + final ClassLoader tccl = Thread.currentThread().getContextClassLoader(); + try { + Thread.currentThread().setContextClassLoader(classLoader); + return method.invoke(instance, args); + } finally { + Thread.currentThread().setContextClassLoader(tccl); + } + } + ); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheManager.java ---------------------------------------------------------------------- diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheManager.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheManager.java index b7eb90c..fd7c70c 100644 --- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheManager.java +++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheManager.java @@ -31,43 +31,32 @@ import org.apache.camel.CamelContext; import org.apache.camel.util.ObjectHelper; public class JCacheManager<K, V> implements Closeable { - private JCacheConfiguration configuration; + private final JCacheConfiguration configuration; + private final ClassLoader classLoader; + private final String cacheName; + private final CamelContext camelContext; private CachingProvider provider; private CacheManager manager; - private ClassLoader classLoader; private Cache<K, V> cache; - private String cacheName; - private CamelContext camelContext; - public JCacheManager(JCacheConfiguration configuration, String cacheName) { - this(configuration, cacheName, null, null); - } - - public JCacheManager(JCacheConfiguration configuration, String cacheName, CamelContext camelContext) { - this(configuration, cacheName, null, camelContext); - } - - public JCacheManager(JCacheConfiguration configuration, String cacheName, ClassLoader classLoader) { - this(configuration, cacheName, classLoader, null); - } - - public JCacheManager(JCacheConfiguration configuration, String cacheName, ClassLoader classLoader, CamelContext camelContext) { + public JCacheManager(JCacheConfiguration configuration) { this.configuration = configuration; + this.camelContext = configuration.getCamelContext(); + this.classLoader = camelContext != null ? camelContext.getApplicationContextClassLoader() : null; + this.cacheName = configuration.getCacheName(); this.provider = null; this.manager = null; - this.classLoader = classLoader; this.cache = null; - this.cacheName = cacheName; - this.camelContext = camelContext; } public JCacheManager(Cache<K, V> cache) { - this.cache = cache; this.configuration = null; + this.camelContext = null; + this.classLoader = null; this.cacheName = cache.getName(); this.provider = null; this.manager = null; - this.camelContext = null; + this.cache = cache; } public String getCacheName() { @@ -80,18 +69,53 @@ public class JCacheManager<K, V> implements Closeable { public synchronized Cache<K, V> getCache() throws Exception { if (cache == null) { + JCacheProvider provider = JCacheProviders.lookup(configuration.getCachingProvider()); + cache = doGetCache(provider); + } + + return cache; + } + + @SuppressWarnings("unchecked") + @Override + public synchronized void close() throws IOException { + if (configuration != null) { + if (cache != null) { + cache.close(); + } + + if (manager != null) { + manager.close(); + } + + if (provider != null) { + provider.close(); + } + } + } + + protected CacheEntryEventFilter getEventFilter() { + if (configuration.getEventFilters() != null) { + return new JCacheEntryEventFilters.Chained(configuration.getEventFilters()); + } + + return new JCacheEntryEventFilters.Named(configuration.getFilteredEvents()); + } + + protected Cache<K, V> doGetCache(JCacheProvider jcacheProvider) throws Exception { + if (cache == null) { String uri = configuration.getConfigurationUri(); if (uri != null && camelContext != null) { uri = camelContext.resolvePropertyPlaceholders(uri); } - provider = configuration.getCachingProvider() != null - ? Caching.getCachingProvider(configuration.getCachingProvider()) + provider = ObjectHelper.isNotEmpty(jcacheProvider.className()) + ? Caching.getCachingProvider(jcacheProvider.className()) : Caching.getCachingProvider(); manager = provider.getCacheManager( ObjectHelper.isNotEmpty(uri) ? URI.create(uri) : null, - classLoader, + null, configuration.getCacheConfigurationProperties()); cache = manager.getCache(cacheName); @@ -110,25 +134,7 @@ public class JCacheManager<K, V> implements Closeable { return cache; } - @Override - public synchronized void close() throws IOException { - if (configuration != null) { - if (cache != null) { - cache.close(); - } - - if (manager != null) { - manager.close(); - } - - if (provider != null) { - provider.close(); - } - } - } - - - Configuration getOrCreateCacheConfiguration() { + private Configuration getOrCreateCacheConfiguration() { if (configuration.getCacheConfiguration() != null) { return configuration.getCacheConfiguration(); } @@ -152,12 +158,4 @@ public class JCacheManager<K, V> implements Closeable { return mutableConfiguration; } - - CacheEntryEventFilter getEventFilter() { - if (configuration.getEventFilters() != null) { - return new JCacheEntryEventFilters.Chained(configuration.getEventFilters()); - } - - return new JCacheEntryEventFilters.Named(configuration.getFilteredEvents()); - } } http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheProvider.java ---------------------------------------------------------------------- diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheProvider.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheProvider.java new file mode 100644 index 0000000..254ee91 --- /dev/null +++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheProvider.java @@ -0,0 +1,22 @@ +/** + * 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.jcache; + +public interface JCacheProvider { + String shortName(); + String className(); +} http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheProviders.java ---------------------------------------------------------------------- diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheProviders.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheProviders.java new file mode 100644 index 0000000..dc08832 --- /dev/null +++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheProviders.java @@ -0,0 +1,71 @@ +/** + * 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.jcache; + +public enum JCacheProviders implements JCacheProvider { + hazelcast {{ + shortName = "hazelcast"; + className = "com.hazelcast.cache.HazelcastCachingProvider"; + }}, + ehcache {{ + shortName = "ehcache"; + className = "org.ehcache.jsr107.EhcacheCachingProvider"; + }}, + caffeine {{ + shortName = "caffeine"; + className = "com.github.benmanes.caffeine.jcache.spi.CaffeineCachingProvider"; + }}, + ispnEmbedded {{ + shortName = "infinispan-embedded"; + className = "org.infinispan.jcache.embedded.JCachingProvider"; + }}; + + protected String shortName; + protected String className; + + @Override + public String shortName() { + return shortName; + } + + @Override + public String className() { + return className; + } + + public static JCacheProvider lookup(String providerName) { + if (providerName != null) { + for (JCacheProvider provider : values()) { + if (provider.shortName().equals(providerName) || provider.className().equals(providerName)) { + return provider; + } + } + } + + return new JCacheProvider() { + @Override + public String shortName() { + return providerName; + } + + @Override + public String className() { + return providerName; + } + }; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/osgi/OSGiCacheManager.java ---------------------------------------------------------------------- diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/osgi/OSGiCacheManager.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/osgi/OSGiCacheManager.java new file mode 100644 index 0000000..9d55e87 --- /dev/null +++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/osgi/OSGiCacheManager.java @@ -0,0 +1,113 @@ +/** + * 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.jcache.osgi; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.Enumeration; +import javax.cache.Cache; + +import org.apache.camel.component.jcache.JCacheConfiguration; +import org.apache.camel.component.jcache.JCacheHelper; +import org.apache.camel.component.jcache.JCacheManager; +import org.apache.camel.component.jcache.JCacheProvider; +import org.apache.camel.component.jcache.JCacheProviders; +import org.apache.camel.util.ObjectHelper; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.wiring.BundleWiring; + +public final class OSGiCacheManager<K, V> extends JCacheManager { + public OSGiCacheManager(JCacheConfiguration configuration) { + super(configuration); + } + + @Override + public synchronized Cache<K, V> doGetCache(JCacheProvider provider) throws Exception { + final ClassLoader jcl = getClassLoader(provider.className()); + final ClassLoader tccl = Thread.currentThread().getContextClassLoader(); + + try { + if (jcl != null) { + Thread.currentThread().setContextClassLoader(jcl); + } + + Cache<K, V> cache = super.doGetCache(provider); + if (provider == JCacheProviders.hazelcast && jcl != null) { + cache = JCacheHelper.tcclProxy(cache, Cache.class, jcl); + } + + return cache; + } finally { + if (jcl != null) { + Thread.currentThread().setContextClassLoader(tccl); + } + } + } + + private ClassLoader getClassLoader(String providerName) throws Exception { + if (providerName == null || !getConfiguration().isLookupProviders()) { + return null; + } + + final BundleContext bc = FrameworkUtil.getBundle(JCacheHelper.class).getBundleContext(); + final ClassLoader bcl = bc.getBundle().adapt(BundleWiring.class).getClassLoader(); + final ClassLoader acl = getConfiguration().getApplicationContextClassLoader(); + + for (final Bundle bundle: bc.getBundles()) { + URL spi = bundle.getResource("META-INF/services/javax.cache.spi.CachingProvider"); + if (spi != null) { + try (BufferedReader in = new BufferedReader(new InputStreamReader(spi.openStream()))) { + if (ObjectHelper.equal(providerName, in.readLine())) { + return new ClassLoader(bcl) { + @Override + protected Class<?> findClass(String name) throws ClassNotFoundException { + try { + return acl.loadClass(name); + } catch (ClassNotFoundException e) { + return bundle.loadClass(name); + } + } + @Override + protected URL findResource(String name) { + URL resource = acl.getResource(name); + if (resource == null) { + resource = bundle.getResource(name); + } + return resource; + } + @Override + protected Enumeration findResources(String name) throws IOException { + try { + return acl.getResources(name); + } catch (IOException e) { + return bundle.getResources(name); + } + } + }; + } + } + } + } + + return null; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepository.java ---------------------------------------------------------------------- diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepository.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepository.java index 341c9ca..482dd26 100644 --- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepository.java +++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepository.java @@ -26,26 +26,28 @@ import org.apache.camel.CamelContext; import org.apache.camel.Exchange; import org.apache.camel.component.jcache.JCacheConfiguration; import org.apache.camel.component.jcache.JCacheManager; +import org.apache.camel.component.jcache.JCacheHelper; import org.apache.camel.impl.DefaultExchange; import org.apache.camel.impl.DefaultExchangeHolder; import org.apache.camel.spi.OptimisticLockingAggregationRepository; import org.apache.camel.support.ServiceSupport; +import org.apache.camel.util.ObjectHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JCacheAggregationRepository extends ServiceSupport implements OptimisticLockingAggregationRepository { private static final Logger LOG = LoggerFactory.getLogger(JCacheAggregationRepository.class); - private JCacheConfiguration configuration = new JCacheConfiguration(); - private String cacheName; - private ClassLoader classLoader; - private CamelContext camelContext; + private JCacheConfiguration configuration; private Cache<String, DefaultExchangeHolder> cache; private boolean optimistic; private boolean allowSerializedHeaders; - private JCacheManager<String, DefaultExchangeHolder> cacheManager; + public JCacheAggregationRepository() { + this.configuration = new JCacheConfiguration(); + } + public JCacheConfiguration getConfiguration() { return configuration; } @@ -55,27 +57,11 @@ public class JCacheAggregationRepository extends ServiceSupport implements Opti } public String getCacheName() { - return cacheName; + return configuration.getCacheName(); } public void setCacheName(String cacheName) { - this.cacheName = cacheName; - } - - public ClassLoader getClassLoader() { - return classLoader; - } - - public void setClassLoader(ClassLoader classLoader) { - this.classLoader = classLoader; - } - - public CamelContext getCamelContext() { - return camelContext; - } - - public void setCamelContext(CamelContext camelContext) { - this.camelContext = camelContext; + configuration.setCacheName(cacheName); } public Cache<String, DefaultExchangeHolder> getCache() { @@ -185,7 +171,10 @@ public class JCacheAggregationRepository extends ServiceSupport implements Opti if (cache != null) { cacheManager = new JCacheManager<>(cache); } else { - cacheManager = new JCacheManager(configuration, cacheName, classLoader, camelContext); + cacheManager = JCacheHelper.createManager( + ObjectHelper.notNull(configuration, "configuration") + ); + cache = cacheManager.getCache(); } } http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/processor/idempotent/JCacheIdempotentRepository.java ---------------------------------------------------------------------- diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/processor/idempotent/JCacheIdempotentRepository.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/processor/idempotent/JCacheIdempotentRepository.java index 7564ce5..b41c32c 100644 --- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/processor/idempotent/JCacheIdempotentRepository.java +++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/processor/idempotent/JCacheIdempotentRepository.java @@ -18,25 +18,27 @@ package org.apache.camel.component.jcache.processor.idempotent; import javax.cache.Cache; -import org.apache.camel.CamelContext; import org.apache.camel.api.management.ManagedAttribute; import org.apache.camel.api.management.ManagedOperation; import org.apache.camel.api.management.ManagedResource; import org.apache.camel.component.jcache.JCacheConfiguration; import org.apache.camel.component.jcache.JCacheManager; +import org.apache.camel.component.jcache.JCacheHelper; import org.apache.camel.spi.IdempotentRepository; import org.apache.camel.support.ServiceSupport; +import org.apache.camel.util.ObjectHelper; @ManagedResource(description = "JCache based message id repository") public class JCacheIdempotentRepository extends ServiceSupport implements IdempotentRepository<Object> { - private JCacheConfiguration configuration = new JCacheConfiguration(); - private String cacheName; - private ClassLoader classLoader; - private CamelContext camelContext; + private JCacheConfiguration configuration; private Cache<Object, Boolean> cache; - private JCacheManager<Object, Boolean> cacheManager; + public JCacheIdempotentRepository() { + this.configuration = new JCacheConfiguration(); + } + + public JCacheConfiguration getConfiguration() { return configuration; } @@ -45,22 +47,6 @@ public class JCacheIdempotentRepository extends ServiceSupport implements Idempo this.configuration = configuration; } - public ClassLoader getClassLoader() { - return classLoader; - } - - public void setClassLoader(ClassLoader classLoader) { - this.classLoader = classLoader; - } - - public CamelContext getCamelContext() { - return camelContext; - } - - public void setCamelContext(CamelContext camelContext) { - this.camelContext = camelContext; - } - public Cache<Object, Boolean> getCache() { return cache; } @@ -94,12 +80,12 @@ public class JCacheIdempotentRepository extends ServiceSupport implements Idempo } public void setCacheName(String cacheName) { - this.cacheName = cacheName; + configuration.setCacheName(cacheName); } @ManagedAttribute(description = "The processor name") public String getCacheName() { - return cacheName; + return configuration.getCacheName(); } @Override @@ -112,7 +98,10 @@ public class JCacheIdempotentRepository extends ServiceSupport implements Idempo if (cache != null) { cacheManager = new JCacheManager<>(cache); } else { - cacheManager = new JCacheManager(configuration, cacheName, classLoader, camelContext); + cacheManager = JCacheHelper.createManager( + ObjectHelper.notNull(configuration, "configuration") + ); + cache = cacheManager.getCache(); } } http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheManagerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheManagerTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheManagerTest.java index 3eb98b1..b5b3278 100644 --- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheManagerTest.java +++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheManagerTest.java @@ -23,8 +23,9 @@ public class JCacheManagerTest extends JCacheComponentTestSupport { @Test public void testCacheCreation() throws Exception { JCacheConfiguration conf = new JCacheConfiguration(); + conf.setCacheName(randomString()); - JCacheManager<Object, Object> manager = new JCacheManager<>(conf, randomString()); + JCacheManager<Object, Object> manager = new JCacheManager<>(conf); assertNotNull(manager.getCache()); manager.close(); @@ -33,9 +34,10 @@ public class JCacheManagerTest extends JCacheComponentTestSupport { @Test(expected = IllegalStateException.class) public void testCacheCreationFailure() throws Exception { JCacheConfiguration conf = new JCacheConfiguration(); + conf.setCacheName(randomString()); conf.setCreateCacheIfNotExists(false); - new JCacheManager<>(conf, randomString()).getCache(); + new JCacheManager<>(conf).getCache(); fail("Should have raised IllegalStateException"); } http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTestSupport.java ---------------------------------------------------------------------- diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTestSupport.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTestSupport.java index c4bc2a4..73eea13 100644 --- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTestSupport.java +++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTestSupport.java @@ -23,8 +23,7 @@ class JCacheAggregationRepositoryTestSupport extends CamelTestSupport { protected JCacheAggregationRepository createRepository(boolean optimistic) throws Exception { JCacheAggregationRepository repository = new JCacheAggregationRepository(); - repository.setConfiguration(new JCacheConfiguration()); - repository.setCacheName("aggregation-repository"); + repository.setConfiguration(new JCacheConfiguration("aggregation-repository")); repository.setOptimistic(optimistic); return repository; http://git-wip-us.apache.org/repos/asf/camel/blob/e3c9f1b0/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/idempotent/JCacheIdempotentRepositoryTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/idempotent/JCacheIdempotentRepositoryTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/idempotent/JCacheIdempotentRepositoryTest.java index 0235654..3923a5d 100644 --- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/idempotent/JCacheIdempotentRepositoryTest.java +++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/idempotent/JCacheIdempotentRepositoryTest.java @@ -20,6 +20,7 @@ import javax.cache.Cache; import org.apache.camel.component.jcache.JCacheConfiguration; import org.apache.camel.component.jcache.JCacheManager; +import org.apache.camel.component.jcache.JCacheHelper; import org.apache.camel.test.junit4.CamelTestSupport; import org.junit.After; import org.junit.Before; @@ -37,7 +38,7 @@ public class JCacheIdempotentRepositoryTest extends CamelTestSupport { @Before public void setUp() throws Exception { - cacheManager = new JCacheManager<>(new JCacheConfiguration(), "idempotent-repository"); + cacheManager = JCacheHelper.createManager(new JCacheConfiguration("idempotent-repository")); cache = cacheManager.getCache(); repository = new JCacheIdempotentRepository();