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 c1d0b3525fd03f1a08529689ac16fa060fd1c5e6
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Jun 14 09:23:15 2021 +0200

    CAMEL-16711: components - Move OSGi dependenct code to camel-karaf
---
 components/camel-zookeeper-master/pom.xml          |  16 --
 .../zookeepermaster/ZookeeperGroupSupport.java     |   5 +-
 .../group/DefaultGroupFactoryStrategy.java         |  19 +--
 .../{ManagedGroupFactory.java => GroupHelper.java} |  17 +-
 .../zookeepermaster/group/ManagedGroupFactory.java |   4 +
 .../internal/osgi/OsgiManagedGroupFactory.java     | 184 ---------------------
 .../internal/osgi/TrackingZooKeeperGroup.java      |  66 --------
 7 files changed, 24 insertions(+), 287 deletions(-)

diff --git a/components/camel-zookeeper-master/pom.xml 
b/components/camel-zookeeper-master/pom.xml
index c189445..88a6e34 100644
--- a/components/camel-zookeeper-master/pom.xml
+++ b/components/camel-zookeeper-master/pom.xml
@@ -100,22 +100,6 @@
             <artifactId>jackson-annotations</artifactId>
         </dependency>
 
-        <!-- optional OSGi support -->
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>osgi.core</artifactId>
-            <scope>provided</scope>
-            <optional>true</optional>
-            <version>6.0.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>osgi.cmpn</artifactId>
-            <scope>provided</scope>
-            <optional>true</optional>
-            <version>6.0.0</version>
-        </dependency>
-
         <!-- test dependencies -->
         <dependency>
             <groupId>org.apache.camel</groupId>
diff --git 
a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/ZookeeperGroupSupport.java
 
b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/ZookeeperGroupSupport.java
index 7a71d5f..ec1f73e 100644
--- 
a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/ZookeeperGroupSupport.java
+++ 
b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/ZookeeperGroupSupport.java
@@ -132,6 +132,7 @@ public class ZookeeperGroupSupport extends ServiceSupport
 
     public void setManagedGroupFactory(ManagedGroupFactory 
managedGroupFactory) {
         this.managedGroupFactory = managedGroupFactory;
+        
this.managedGroupFactory.setClassLoader(this.getClass().getClassLoader());
     }
 
     public ManagedGroupFactoryStrategy getManagedGroupFactoryStrategy() {
@@ -177,8 +178,8 @@ public class ZookeeperGroupSupport extends ServiceSupport
             if (managedGroupFactoryStrategy == null) {
                 managedGroupFactoryStrategy = new 
DefaultGroupFactoryStrategy();
             }
-            managedGroupFactory = 
managedGroupFactoryStrategy.createGroupFactory(curator, 
getClass().getClassLoader(),
-                    getCamelContext(), this);
+            
setManagedGroupFactory(managedGroupFactoryStrategy.createGroupFactory(curator, 
getClass().getClassLoader(),
+                    getCamelContext(), this));
         }
     }
 
diff --git 
a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/DefaultGroupFactoryStrategy.java
 
b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/DefaultGroupFactoryStrategy.java
index b0fe74c..81d1858 100644
--- 
a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/DefaultGroupFactoryStrategy.java
+++ 
b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/DefaultGroupFactoryStrategy.java
@@ -19,10 +19,7 @@ package org.apache.camel.component.zookeepermaster.group;
 import java.util.concurrent.Callable;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.component.zookeepermaster.ManagedGroupFactoryStrategy;
-import org.apache.camel.spi.BeanIntrospection;
-import org.apache.camel.support.ObjectHelper;
 import org.apache.curator.framework.CuratorFramework;
 
 public class DefaultGroupFactoryStrategy implements 
ManagedGroupFactoryStrategy {
@@ -34,22 +31,12 @@ public class DefaultGroupFactoryStrategy implements 
ManagedGroupFactoryStrategy
             CamelContext camelContext,
             Callable<CuratorFramework> factory)
             throws Exception {
+
         if (curator != null) {
             return new DefaultManagedGroupFactory(curator, false);
+        } else {
+            return new DefaultManagedGroupFactory(factory.call(), true);
         }
-        try {
-            Class<?> clazz = camelContext.getClassResolver()
-                    
.resolveClass("org.apache.camel.component.zookeepermaster.group.internal.osgi.OsgiManagedGroupFactory");
-            if (clazz != null) {
-                Object instance = ObjectHelper.newInstance(clazz);
-                BeanIntrospection beanIntrospection = 
camelContext.adapt(ExtendedCamelContext.class).getBeanIntrospection();
-                beanIntrospection.setProperty(camelContext, instance, 
"classLoader", loader);
-                return (ManagedGroupFactory) instance;
-            }
-        } catch (Throwable e) {
-            // Ignore if we're not in OSGi
-        }
-        return new DefaultManagedGroupFactory(factory.call(), true);
     }
 
 }
diff --git 
a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/ManagedGroupFactory.java
 
b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/GroupHelper.java
similarity index 60%
copy from 
components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/ManagedGroupFactory.java
copy to 
components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/GroupHelper.java
index 000bbb3..b1120d5 100644
--- 
a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/ManagedGroupFactory.java
+++ 
b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/GroupHelper.java
@@ -16,12 +16,23 @@
  */
 package org.apache.camel.component.zookeepermaster.group;
 
+import org.apache.camel.CamelContext;
+import org.apache.camel.support.CamelContextHelper;
 import org.apache.curator.framework.CuratorFramework;
 
-public interface ManagedGroupFactory extends GroupFactory {
+public final class GroupHelper {
 
-    CuratorFramework getCurator();
+    private GroupHelper() {
+    }
 
-    void close();
+    public static ManagedGroupFactory createManagedGroupFactory(
+            CamelContext camelContext, ClassLoader loader, CuratorFramework 
curator) {
+        ManagedGroupFactory factory = 
CamelContextHelper.findByType(camelContext, ManagedGroupFactory.class);
+        if (factory == null) {
+            factory = new DefaultManagedGroupFactory(curator, true);
+        }
+        factory.setClassLoader(loader);
+        return factory;
+    }
 
 }
diff --git 
a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/ManagedGroupFactory.java
 
b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/ManagedGroupFactory.java
index 000bbb3..f71e4d5 100644
--- 
a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/ManagedGroupFactory.java
+++ 
b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/ManagedGroupFactory.java
@@ -24,4 +24,8 @@ public interface ManagedGroupFactory extends GroupFactory {
 
     void close();
 
+    default void setClassLoader(ClassLoader classLoader) {
+        // noop
+    }
+
 }
diff --git 
a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/osgi/OsgiManagedGroupFactory.java
 
b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/osgi/OsgiManagedGroupFactory.java
deleted file mode 100644
index c206c59..0000000
--- 
a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/osgi/OsgiManagedGroupFactory.java
+++ /dev/null
@@ -1,184 +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.zookeepermaster.group.internal.osgi;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ThreadFactory;
-
-import org.apache.camel.component.zookeepermaster.group.Group;
-import org.apache.camel.component.zookeepermaster.group.ManagedGroupFactory;
-import org.apache.camel.component.zookeepermaster.group.NodeState;
-import 
org.apache.camel.component.zookeepermaster.group.internal.DelegateZooKeeperGroup;
-import 
org.apache.camel.component.zookeepermaster.group.internal.DelegateZooKeeperMultiGroup;
-import org.apache.curator.framework.CuratorFramework;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleReference;
-import org.osgi.framework.ServiceReference;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-public class OsgiManagedGroupFactory implements ManagedGroupFactory {
-
-    private ManagedGroupFactory delegate;
-
-    public OsgiManagedGroupFactory() {
-    }
-
-    public void setClassLoader(ClassLoader loader) {
-        this.delegate = new OsgiTrackingManagedGroupFactory(loader);
-    }
-
-    @Override
-    public CuratorFramework getCurator() {
-        return delegate.getCurator();
-    }
-
-    @Override
-    public <T extends NodeState> Group<T> createGroup(String path, Class<T> 
clazz) {
-        return delegate.createGroup(path, clazz);
-    }
-
-    @Override
-    public <T extends NodeState> Group<T> createGroup(String path, Class<T> 
clazz, ThreadFactory threadFactory) {
-        return delegate.createGroup(path, clazz, threadFactory);
-    }
-
-    @Override
-    public <T extends NodeState> Group<T> createMultiGroup(String path, 
Class<T> clazz) {
-        throw new IllegalStateException("not supported");
-    }
-
-    @Override
-    public <T extends NodeState> Group<T> createMultiGroup(String path, 
Class<T> clazz, ThreadFactory threadFactory) {
-        throw new IllegalStateException("not supported");
-    }
-
-    @Override
-    public void close() {
-        delegate.close();
-    }
-
-    static class OsgiTrackingManagedGroupFactory
-            implements ManagedGroupFactory, 
ServiceTrackerCustomizer<CuratorFramework, CuratorFramework> {
-
-        private final BundleContext bundleContext;
-        private final ServiceTracker<CuratorFramework, CuratorFramework> 
tracker;
-        private CuratorFramework curator;
-        private final List<DelegateZooKeeperGroup<?>> groups = new 
ArrayList<>();
-
-        OsgiTrackingManagedGroupFactory(ClassLoader loader) {
-            this(getBundleContext(loader));
-        }
-
-        OsgiTrackingManagedGroupFactory(BundleContext bundleContext) {
-            this.bundleContext = bundleContext;
-            this.tracker = new ServiceTracker<>(
-                    bundleContext, CuratorFramework.class, this);
-            this.tracker.open();
-        }
-
-        static BundleContext getBundleContext(ClassLoader loader) {
-            if (!(loader instanceof BundleReference)) {
-                throw new IllegalStateException("Not an OSGi ClassLoader");
-            }
-            return ((BundleReference) loader).getBundle().getBundleContext();
-        }
-
-        @Override
-        public CuratorFramework 
addingService(ServiceReference<CuratorFramework> reference) {
-            CuratorFramework curator = 
OsgiTrackingManagedGroupFactory.this.bundleContext.getService(reference);
-            useCurator(curator);
-            return curator;
-        }
-
-        @Override
-        public void modifiedService(ServiceReference<CuratorFramework> 
reference, CuratorFramework service) {
-        }
-
-        @Override
-        public void removedService(ServiceReference<CuratorFramework> 
reference, CuratorFramework service) {
-            useCurator(null);
-            
OsgiTrackingManagedGroupFactory.this.bundleContext.ungetService(reference);
-        }
-
-        protected void useCurator(CuratorFramework curator) {
-            this.curator = curator;
-            for (DelegateZooKeeperGroup<?> group : groups) {
-                group.useCurator(curator);
-            }
-        }
-
-        @Override
-        public CuratorFramework getCurator() {
-            return curator;
-        }
-
-        @Override
-        public <T extends NodeState> Group<T> createGroup(String path, 
Class<T> clazz) {
-            return new DelegateZooKeeperGroup<T>(path, clazz) {
-                @Override
-                public void start() {
-                    useCurator(curator);
-                    groups.add(this);
-                    super.start();
-                }
-
-                @Override
-                public void close() throws IOException {
-                    groups.remove(this);
-                    super.close();
-                }
-            };
-        }
-
-        @Override
-        public <T extends NodeState> Group<T> createGroup(String path, 
Class<T> clazz, ThreadFactory threadFactory) {
-            throw new IllegalStateException("not supported");
-        }
-
-        @Override
-        public <T extends NodeState> Group<T> createMultiGroup(String path, 
Class<T> clazz) {
-            return new DelegateZooKeeperMultiGroup<T>(path, clazz) {
-                @Override
-                public void start() {
-                    useCurator(curator);
-                    groups.add(this);
-                    super.start();
-                }
-
-                @Override
-                public void close() throws IOException {
-                    groups.remove(this);
-                    super.close();
-                }
-            };
-        }
-
-        @Override
-        public <T extends NodeState> Group<T> createMultiGroup(String path, 
Class<T> clazz, ThreadFactory threadFactory) {
-            throw new IllegalStateException("not supported");
-        }
-
-        @Override
-        public void close() {
-            this.tracker.close();
-        }
-    }
-
-}
diff --git 
a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/osgi/TrackingZooKeeperGroup.java
 
b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/osgi/TrackingZooKeeperGroup.java
deleted file mode 100644
index 67e2cfa..0000000
--- 
a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/osgi/TrackingZooKeeperGroup.java
+++ /dev/null
@@ -1,66 +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.zookeepermaster.group.internal.osgi;
-
-import org.apache.camel.component.zookeepermaster.group.NodeState;
-import 
org.apache.camel.component.zookeepermaster.group.internal.DelegateZooKeeperGroup;
-import org.apache.curator.framework.CuratorFramework;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-public class TrackingZooKeeperGroup<T extends NodeState> extends 
DelegateZooKeeperGroup<T> {
-
-    private final BundleContext bundleContext;
-    private final ServiceTracker<CuratorFramework, CuratorFramework> tracker;
-
-    public TrackingZooKeeperGroup(BundleContext bundleContext, String path, 
Class<T> clazz) {
-        super(path, clazz);
-        this.bundleContext = bundleContext;
-        this.tracker = new ServiceTracker<>(
-                bundleContext, CuratorFramework.class, new 
ServiceTrackerCustomizer<CuratorFramework, CuratorFramework>() {
-                    @Override
-                    public CuratorFramework 
addingService(ServiceReference<CuratorFramework> reference) {
-                        CuratorFramework curator = 
TrackingZooKeeperGroup.this.bundleContext.getService(reference);
-                        useCurator(curator);
-                        return curator;
-                    }
-
-                    @Override
-                    public void 
modifiedService(ServiceReference<CuratorFramework> reference, CuratorFramework 
service) {
-                    }
-
-                    @Override
-                    public void 
removedService(ServiceReference<CuratorFramework> reference, CuratorFramework 
service) {
-                        useCurator(null);
-                        
TrackingZooKeeperGroup.this.bundleContext.ungetService(reference);
-                    }
-                });
-    }
-
-    @Override
-    protected void doStart() {
-        tracker.open();
-    }
-
-    @Override
-    protected void doStop() {
-        tracker.close();
-    }
-
-}

Reply via email to