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(); - } - -}
