This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new af2134b CAMEL-16155: camel-zookeeper-master: add option to set a custom ManagedGroupFactory af2134b is described below commit af2134b1f385171a9086ca19251fd08caa749581 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Tue Feb 9 17:14:22 2021 +0100 CAMEL-16155: camel-zookeeper-master: add option to set a custom ManagedGroupFactory --- ...ctory.java => ManagedGroupFactoryStrategy.java} | 22 ++++++---- .../zookeepermaster/ZookeeperGroupSupport.java | 48 +++++++++++++++++++--- ...ilder.java => DefaultGroupFactoryStrategy.java} | 15 ++++--- ...actory.java => DefaultManagedGroupFactory.java} | 10 ++--- .../group/{internal => }/ManagedGroupFactory.java | 3 +- .../internal/osgi/OsgiManagedGroupFactory.java | 2 +- 6 files changed, 72 insertions(+), 28 deletions(-) diff --git a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/ManagedGroupFactory.java b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/ManagedGroupFactoryStrategy.java similarity index 60% copy from components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/ManagedGroupFactory.java copy to components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/ManagedGroupFactoryStrategy.java index eadb26a..3e6c861 100644 --- a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/ManagedGroupFactory.java +++ b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/ManagedGroupFactoryStrategy.java @@ -14,15 +14,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.zookeepermaster.group.internal; +package org.apache.camel.component.zookeepermaster; -import org.apache.camel.component.zookeepermaster.group.GroupFactory; -import org.apache.curator.framework.CuratorFramework; - -public interface ManagedGroupFactory extends GroupFactory { +import java.util.concurrent.Callable; - CuratorFramework getCurator(); +import org.apache.camel.CamelContext; +import org.apache.camel.component.zookeepermaster.group.ManagedGroupFactory; +import org.apache.curator.framework.CuratorFramework; - void close(); +/** + * SPI Strategy for custom {@link ManagedGroupFactory} implementations. + */ +public interface ManagedGroupFactoryStrategy { + ManagedGroupFactory createGroupFactory( + CuratorFramework curator, + ClassLoader loader, + CamelContext camelContext, + Callable<CuratorFramework> factory) + throws Exception; } 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 dd5785f..7a71d5f 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 @@ -16,13 +16,14 @@ */ package org.apache.camel.component.zookeepermaster; +import java.util.Set; import java.util.concurrent.Callable; import org.apache.camel.CamelContext; import org.apache.camel.CamelContextAware; +import org.apache.camel.component.zookeepermaster.group.DefaultGroupFactoryStrategy; import org.apache.camel.component.zookeepermaster.group.Group; -import org.apache.camel.component.zookeepermaster.group.internal.ManagedGroupFactory; -import org.apache.camel.component.zookeepermaster.group.internal.ManagedGroupFactoryBuilder; +import org.apache.camel.component.zookeepermaster.group.ManagedGroupFactory; import org.apache.camel.spi.Metadata; import org.apache.camel.support.service.ServiceSupport; import org.apache.camel.util.ObjectHelper; @@ -46,8 +47,11 @@ public class ZookeeperGroupSupport extends ServiceSupport private static final String ZOOKEEPER_PORT_ENV = "ZK_CLIENT_SERVICE_PORT"; private CamelContext camelContext; - private ManagedGroupFactory managedGroupFactory; + @Metadata(label = "advanced", autowired = true) + private ManagedGroupFactory managedGroupFactory; + @Metadata(label = "advanced", autowired = true) + private ManagedGroupFactoryStrategy managedGroupFactoryStrategy; @Metadata(label = "advanced") private CuratorFramework curator; @Metadata(defaultValue = "10000") @@ -122,6 +126,22 @@ public class ZookeeperGroupSupport extends ServiceSupport this.zooKeeperPassword = zooKeeperPassword; } + public ManagedGroupFactory getManagedGroupFactory() { + return managedGroupFactory; + } + + public void setManagedGroupFactory(ManagedGroupFactory managedGroupFactory) { + this.managedGroupFactory = managedGroupFactory; + } + + public ManagedGroupFactoryStrategy getManagedGroupFactoryStrategy() { + return managedGroupFactoryStrategy; + } + + public void setManagedGroupFactoryStrategy(ManagedGroupFactoryStrategy managedGroupFactoryStrategy) { + this.managedGroupFactoryStrategy = managedGroupFactoryStrategy; + } + @Override protected void doStart() throws Exception { ObjectHelper.notNull(camelContext, "CamelContext"); @@ -140,8 +160,26 @@ public class ZookeeperGroupSupport extends ServiceSupport } } - // will auto create curator if needed - managedGroupFactory = ManagedGroupFactoryBuilder.create(curator, getClass().getClassLoader(), getCamelContext(), this); + if (managedGroupFactoryStrategy == null) { + Set<ManagedGroupFactoryStrategy> set + = getCamelContext().getRegistry().findByType(ManagedGroupFactoryStrategy.class); + if (set.size() == 1) { + setManagedGroupFactoryStrategy(set.iterator().next()); + } + } + if (managedGroupFactory == null) { + Set<ManagedGroupFactory> set = getCamelContext().getRegistry().findByType(ManagedGroupFactory.class); + if (set.size() == 1) { + setManagedGroupFactory(set.iterator().next()); + } + } + if (managedGroupFactory == null) { + if (managedGroupFactoryStrategy == null) { + managedGroupFactoryStrategy = new DefaultGroupFactoryStrategy(); + } + managedGroupFactory = managedGroupFactoryStrategy.createGroupFactory(curator, getClass().getClassLoader(), + getCamelContext(), this); + } } @Override diff --git a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/ManagedGroupFactoryBuilder.java b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/DefaultGroupFactoryStrategy.java similarity index 82% rename from components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/ManagedGroupFactoryBuilder.java rename to components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/DefaultGroupFactoryStrategy.java index da132b8..b0fe74c 100644 --- a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/ManagedGroupFactoryBuilder.java +++ b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/DefaultGroupFactoryStrategy.java @@ -14,29 +14,28 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.zookeepermaster.group.internal; +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 final class ManagedGroupFactoryBuilder { +public class DefaultGroupFactoryStrategy implements ManagedGroupFactoryStrategy { - private ManagedGroupFactoryBuilder() { - } - - public static ManagedGroupFactory create( + @Override + public ManagedGroupFactory createGroupFactory( CuratorFramework curator, ClassLoader loader, CamelContext camelContext, Callable<CuratorFramework> factory) throws Exception { if (curator != null) { - return new StaticManagedGroupFactory(curator, false); + return new DefaultManagedGroupFactory(curator, false); } try { Class<?> clazz = camelContext.getClassResolver() @@ -50,7 +49,7 @@ public final class ManagedGroupFactoryBuilder { } catch (Throwable e) { // Ignore if we're not in OSGi } - return new StaticManagedGroupFactory(factory.call(), true); + return new DefaultManagedGroupFactory(factory.call(), true); } } diff --git a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/StaticManagedGroupFactory.java b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/DefaultManagedGroupFactory.java similarity index 84% rename from components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/StaticManagedGroupFactory.java rename to components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/DefaultManagedGroupFactory.java index b60973b..12a4beb 100644 --- a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/StaticManagedGroupFactory.java +++ b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/DefaultManagedGroupFactory.java @@ -14,20 +14,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.zookeepermaster.group.internal; +package org.apache.camel.component.zookeepermaster.group; import java.util.concurrent.ThreadFactory; -import org.apache.camel.component.zookeepermaster.group.Group; -import org.apache.camel.component.zookeepermaster.group.NodeState; +import org.apache.camel.component.zookeepermaster.group.internal.ZooKeeperGroup; +import org.apache.camel.component.zookeepermaster.group.internal.ZooKeeperMultiGroup; import org.apache.curator.framework.CuratorFramework; -public class StaticManagedGroupFactory implements ManagedGroupFactory { +public class DefaultManagedGroupFactory implements ManagedGroupFactory { private final CuratorFramework curator; private final boolean shouldClose; - StaticManagedGroupFactory(CuratorFramework curator, boolean shouldClose) { + public DefaultManagedGroupFactory(CuratorFramework curator, boolean shouldClose) { this.curator = curator; this.shouldClose = shouldClose; } diff --git a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/ManagedGroupFactory.java b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/ManagedGroupFactory.java similarity index 87% rename from components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/ManagedGroupFactory.java rename to components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/ManagedGroupFactory.java index eadb26a..000bbb3 100644 --- a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/ManagedGroupFactory.java +++ b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/ManagedGroupFactory.java @@ -14,9 +14,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.zookeepermaster.group.internal; +package org.apache.camel.component.zookeepermaster.group; -import org.apache.camel.component.zookeepermaster.group.GroupFactory; import org.apache.curator.framework.CuratorFramework; public interface ManagedGroupFactory extends GroupFactory { 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 index 0e36fc9..c206c59 100644 --- 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 @@ -22,10 +22,10 @@ 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.camel.component.zookeepermaster.group.internal.ManagedGroupFactory; import org.apache.curator.framework.CuratorFramework; import org.osgi.framework.BundleContext; import org.osgi.framework.BundleReference;