This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit baa144cff4478a9e1e14a3e78421e708789ac4fe
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Jun 14 07:30:49 2021 +0200

    CAMEL-16711: components - Move OSGi dependenct code to camel-karaf
---
 components/camel-jcache/pom.xml                    |   9 --
 .../jcache/DefaultJCacheManagerFactory.java}       |  19 ++--
 .../camel/component/jcache/JCacheEndpoint.java     |   2 +-
 .../camel/component/jcache/JCacheHelper.java       |  38 ++-----
 .../component/jcache/JCacheManagerFactory.java}    |  17 +---
 .../component/jcache/osgi/OSGiCacheManager.java    | 113 ---------------------
 .../aggregate/JCacheAggregationRepository.java     |  22 +++-
 .../idempotent/JCacheIdempotentRepository.java     |  22 +++-
 .../JCacheAggregationRepositoryTestSupport.java    |   1 +
 .../idempotent/JCacheIdempotentRepositoryTest.java |   5 +-
 10 files changed, 58 insertions(+), 190 deletions(-)

diff --git a/components/camel-jcache/pom.xml b/components/camel-jcache/pom.xml
index 122a517..7a9ecc5 100644
--- a/components/camel-jcache/pom.xml
+++ b/components/camel-jcache/pom.xml
@@ -47,15 +47,6 @@
             <version>${jcache-bundle-version}</version>
         </dependency>
 
-        <!-- osgi -->
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>osgi.core</artifactId>
-            <scope>provided</scope>
-            <optional>true</optional>
-            <version>6.0.0</version>
-        </dependency>
-
         <!-- testing -->
         <dependency>
             <groupId>org.apache.camel</groupId>
diff --git 
a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTestSupport.java
 
b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/DefaultJCacheManagerFactory.java
similarity index 54%
copy from 
components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTestSupport.java
copy to 
components/camel-jcache/src/main/java/org/apache/camel/component/jcache/DefaultJCacheManagerFactory.java
index fa655ca..2f3fbb2 100644
--- 
a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTestSupport.java
+++ 
b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/DefaultJCacheManagerFactory.java
@@ -14,20 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.jcache.processor.aggregate;
+package org.apache.camel.component.jcache;
 
-import org.apache.camel.component.jcache.JCacheConfiguration;
-import org.apache.camel.component.jcache.support.HazelcastTest;
-import org.apache.camel.test.junit5.CamelTestSupport;
+public class DefaultJCacheManagerFactory implements JCacheManagerFactory {
 
-@HazelcastTest
-class JCacheAggregationRepositoryTestSupport extends CamelTestSupport {
-
-    protected JCacheAggregationRepository createRepository(boolean optimistic) 
throws Exception {
-        JCacheAggregationRepository repository = new 
JCacheAggregationRepository();
-        repository.setConfiguration(new 
JCacheConfiguration("aggregation-repository"));
-        repository.setOptimistic(optimistic);
-
-        return repository;
+    @Override
+    public <K, V> JCacheManager<K, V> createManager(JCacheConfiguration 
configuration) {
+        return new JCacheManager<>(configuration);
     }
+
 }
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 a520c8a..034818d 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
@@ -66,7 +66,7 @@ public class JCacheEndpoint extends DefaultEndpoint {
 
     @Override
     protected void doStart() throws Exception {
-        cacheManager = JCacheHelper.createManager(configuration);
+        cacheManager = JCacheHelper.createManager(getCamelContext(), 
configuration);
     }
 
     @Override
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
index 55a27f8..327faa9 100644
--- 
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
@@ -16,29 +16,22 @@
  */
 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;
+import org.apache.camel.CamelContext;
+import org.apache.camel.support.CamelContextHelper;
 
 public final class JCacheHelper {
     private JCacheHelper() {
     }
 
-    public static <K, V> JCacheManager<K, V> createManager(JCacheConfiguration 
configuration) {
-        if (isOSGi()) {
-            try {
-                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 (Exception e) {
-                throw new RuntimeCamelException(e);
-            }
+    public static <K, V> JCacheManager<K, V> createManager(CamelContext 
camelContext, JCacheConfiguration configuration) {
+        JCacheManagerFactory factory = 
CamelContextHelper.findByType(camelContext, JCacheManagerFactory.class);
+        if (factory == null) {
+            factory = new DefaultJCacheManagerFactory();
         }
-
-        return new JCacheManager<>(configuration);
+        return factory.createManager(configuration);
     }
 
     @SuppressWarnings("unchecked")
@@ -59,21 +52,4 @@ public final class JCacheHelper {
                 });
     }
 
-    public static boolean isOSGi() {
-        try {
-            // Check if we are in an osgi container
-            Class<?> fu = Class.forName("org.osgi.framework.FrameworkUtil");
-            if (fu != null) {
-                Method method = fu.getMethod("getBundle", Class.class);
-                if (method != null) {
-                    return method.invoke(null, JCacheHelper.class) != null;
-                }
-            }
-        } catch (ClassNotFoundException e) {
-        } catch (Exception e) {
-            throw new RuntimeCamelException(e);
-        }
-
-        return false;
-    }
 }
diff --git 
a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTestSupport.java
 
b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheManagerFactory.java
similarity index 54%
copy from 
components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTestSupport.java
copy to 
components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheManagerFactory.java
index fa655ca..2e7cd40 100644
--- 
a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTestSupport.java
+++ 
b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheManagerFactory.java
@@ -14,20 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.jcache.processor.aggregate;
+package org.apache.camel.component.jcache;
 
-import org.apache.camel.component.jcache.JCacheConfiguration;
-import org.apache.camel.component.jcache.support.HazelcastTest;
-import org.apache.camel.test.junit5.CamelTestSupport;
+public interface JCacheManagerFactory {
 
-@HazelcastTest
-class JCacheAggregationRepositoryTestSupport extends CamelTestSupport {
-
-    protected JCacheAggregationRepository createRepository(boolean optimistic) 
throws Exception {
-        JCacheAggregationRepository repository = new 
JCacheAggregationRepository();
-        repository.setConfiguration(new 
JCacheConfiguration("aggregation-repository"));
-        repository.setOptimistic(optimistic);
-
-        return repository;
-    }
+    <K, V> JCacheManager<K, V> createManager(JCacheConfiguration 
configuration);
 }
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
deleted file mode 100644
index b08c5be..0000000
--- 
a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/osgi/OSGiCacheManager.java
+++ /dev/null
@@ -1,113 +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.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 {
-            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;
-    }
-}
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 b8ef868..4bb33b1 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
@@ -24,6 +24,7 @@ import java.util.Set;
 import javax.cache.Cache;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.jcache.JCacheConfiguration;
 import org.apache.camel.component.jcache.JCacheHelper;
@@ -36,10 +37,12 @@ import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class JCacheAggregationRepository extends ServiceSupport implements 
OptimisticLockingAggregationRepository {
+public class JCacheAggregationRepository extends ServiceSupport
+        implements CamelContextAware, OptimisticLockingAggregationRepository {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(JCacheAggregationRepository.class);
 
+    private CamelContext camelContext;
     private JCacheConfiguration configuration;
     private Cache<String, DefaultExchangeHolder> cache;
     private boolean optimistic;
@@ -50,6 +53,16 @@ public class JCacheAggregationRepository extends 
ServiceSupport implements Optim
         this.configuration = new JCacheConfiguration();
     }
 
+    @Override
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    @Override
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
+
     public JCacheConfiguration getConfiguration() {
         return configuration;
     }
@@ -176,12 +189,13 @@ public class JCacheAggregationRepository extends 
ServiceSupport implements Optim
 
     @Override
     protected void doStart() throws Exception {
+        ObjectHelper.notNull(camelContext, "camelContext");
+        ObjectHelper.notNull(configuration, "configuration");
+
         if (cache != null) {
             cacheManager = new JCacheManager<>(cache);
         } else {
-            cacheManager = JCacheHelper.createManager(
-                    ObjectHelper.notNull(configuration, "configuration"));
-
+            cacheManager = JCacheHelper.createManager(getCamelContext(), 
configuration);
             cache = cacheManager.getCache();
         }
     }
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 4fdd87d..8e9c8d5 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,6 +18,8 @@ package 
org.apache.camel.component.jcache.processor.idempotent;
 
 import javax.cache.Cache;
 
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.api.management.ManagedAttribute;
 import org.apache.camel.api.management.ManagedOperation;
 import org.apache.camel.api.management.ManagedResource;
@@ -29,7 +31,8 @@ import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 
 @ManagedResource(description = "JCache based message id repository")
-public class JCacheIdempotentRepository extends ServiceSupport implements 
IdempotentRepository {
+public class JCacheIdempotentRepository extends ServiceSupport implements 
CamelContextAware, IdempotentRepository {
+    private CamelContext camelContext;
     private JCacheConfiguration configuration;
     private Cache<String, Boolean> cache;
     private JCacheManager<String, Boolean> cacheManager;
@@ -38,6 +41,16 @@ public class JCacheIdempotentRepository extends 
ServiceSupport implements Idempo
         this.configuration = new JCacheConfiguration();
     }
 
+    @Override
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    @Override
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
+
     public JCacheConfiguration getConfiguration() {
         return configuration;
     }
@@ -94,12 +107,13 @@ public class JCacheIdempotentRepository extends 
ServiceSupport implements Idempo
 
     @Override
     protected void doStart() throws Exception {
+        ObjectHelper.notNull(camelContext, "camelContext");
+        ObjectHelper.notNull(configuration, "configuration");
+
         if (cache != null) {
             cacheManager = new JCacheManager<>(cache);
         } else {
-            cacheManager = JCacheHelper.createManager(
-                    ObjectHelper.notNull(configuration, "configuration"));
-
+            cacheManager = JCacheHelper.createManager(getCamelContext(), 
configuration);
             cache = cacheManager.getCache();
         }
     }
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 fa655ca..bdf415d 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
@@ -25,6 +25,7 @@ class JCacheAggregationRepositoryTestSupport extends 
CamelTestSupport {
 
     protected JCacheAggregationRepository createRepository(boolean optimistic) 
throws Exception {
         JCacheAggregationRepository repository = new 
JCacheAggregationRepository();
+        repository.setCamelContext(context);
         repository.setConfiguration(new 
JCacheConfiguration("aggregation-repository"));
         repository.setOptimistic(optimistic);
 
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 dd7b42b..1ca2f70 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
@@ -43,10 +43,12 @@ public class JCacheIdempotentRepositoryTest extends 
CamelTestSupport {
     @Override
     @BeforeEach
     public void setUp() throws Exception {
-        cacheManager = JCacheHelper.createManager(new 
JCacheConfiguration("idempotent-repository"));
+        super.setUp();
+        cacheManager = JCacheHelper.createManager(context, new 
JCacheConfiguration("idempotent-repository"));
         cache = cacheManager.getCache();
 
         repository = new JCacheIdempotentRepository();
+        repository.setCamelContext(context);
         repository.setCache(cache);
         repository.start();
     }
@@ -54,6 +56,7 @@ public class JCacheIdempotentRepositoryTest extends 
CamelTestSupport {
     @Override
     @AfterEach
     public void tearDown() throws Exception {
+        super.tearDown();
         repository.stop();
         cacheManager.close();
     }

Reply via email to