You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/02/09 16:15:09 UTC

[camel] branch master updated: CAMEL-16155: camel-zookeeper-master: add option to set a custom ManagedGroupFactory

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 <cl...@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;