This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch feature/CAMEL-22616-cluster-config in repository https://gitbox.apache.org/repos/asf/camel.git
commit ed64c130a21a0feb9b9ff70b99ba02c8e664ac19 Author: Claus Ibsen <[email protected]> AuthorDate: Mon Jul 6 17:00:28 2026 +0200 CAMEL-22616: camel-jbang - Auto-download cluster service dependencies Co-Authored-By: Claude <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../META-INF/camel-main-configuration-metadata.json | 6 ++++++ core/camel-main/src/main/docs/main.adoc | 16 +++++++++++----- .../camel-factoryfinder-known-dependencies.properties | 6 ++++++ .../resources/camel-main-known-dependencies.properties | 6 ++++++ .../camel/maven/packaging/PrepareCamelMainMojo.java | 14 -------------- 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json index ca9332ad5c6f..034183e3dda7 100644 --- a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json +++ b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json @@ -168,6 +168,7 @@ { "name": "camel.main.yamlDslCompactNotationWarn", "required": false, "description": "Whether to log a WARN when YAML DSL routes use compact (shorthand) notation instead of the canonical (explicit\/normalized) form. The canonical style is recommended as it is more tooling and AI friendly. Use Camel CLI to normalize existing routes: camel validate normalize <file>", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "boolean", "javaType": "boolean", "d [...] { "name": "camel.cluster.consul.aclToken", "required": false, "description": "Sets the ACL token to be used with Consul", "sourceType": "org.apache.camel.component.consul.cluster.ConsulClusterService", "type": "string", "javaType": "java.lang.String", "secret": true, "security": "secret" }, { "name": "camel.cluster.consul.blockSeconds", "required": false, "description": "The second to wait for a watch event, default 10 seconds", "sourceType": "org.apache.camel.component.consul.cluster.ConsulClusterService", "type": "integer", "javaType": "int", "defaultValue": 10, "secret": false }, + { "name": "camel.cluster.consul.configuration", "required": false, "description": "To use an existing configuration", "sourceType": "org.apache.camel.component.consul.cluster.ConsulClusterService", "type": "object", "javaType": "org.apache.camel.component.consul.cluster.ConsulClusterConfiguration", "secret": false }, { "name": "camel.cluster.consul.connectTimeout", "required": false, "description": "Connect timeout in millis", "sourceType": "org.apache.camel.component.consul.cluster.ConsulClusterService", "type": "integer", "javaType": "int", "secret": false }, { "name": "camel.cluster.consul.datacenter", "required": false, "description": "The data center", "sourceType": "org.apache.camel.component.consul.cluster.ConsulClusterService", "type": "string", "javaType": "java.lang.String", "secret": false }, { "name": "camel.cluster.consul.enabled", "required": false, "description": "Whether to enable this cluster service.", "sourceType": "org.apache.camel.component.consul.cluster.ConsulClusterService", "type": "boolean", "javaType": "boolean", "defaultValue": true, "secret": false }, @@ -193,6 +194,8 @@ { "name": "camel.cluster.file.heartbeatTimeoutMultiplier", "required": false, "description": "Multiplier applied to the cluster leader acquireLockInterval to determine how long followers should wait before considering the leader stale. For example, if the leader updates its heartbeat every 2 seconds and the heartbeatTimeoutMultiplier is 3, followers will tolerate up to 2s * 3 = 6s of silence before declaring the leader unavailable.", "sourceType": "org.apache.camel.component.file.clu [...] { "name": "camel.cluster.file.root", "required": true, "description": "The root file path", "sourceType": "org.apache.camel.component.file.cluster.FileLockClusterService", "type": "string", "javaType": "java.lang.String", "secret": false }, { "name": "camel.cluster.infinispan.cacheContainer", "required": false, "description": "Specifies the cache Container to connect", "sourceType": "org.apache.camel.component.infinispan.remote.cluster.InfinispanRemoteClusterService", "type": "object", "javaType": "org.infinispan.client.hotrod.RemoteCacheManager", "secret": false }, + { "name": "camel.cluster.infinispan.cacheContainerConfiguration", "required": false, "description": "The CacheContainer configuration. Used if the cacheContainer is not defined.", "sourceType": "org.apache.camel.component.infinispan.remote.cluster.InfinispanRemoteClusterService", "type": "object", "javaType": "org.infinispan.client.hotrod.configuration.Configuration", "secret": false }, + { "name": "camel.cluster.infinispan.configuration", "required": false, "description": "To use an existing configuration", "sourceType": "org.apache.camel.component.infinispan.remote.cluster.InfinispanRemoteClusterService", "type": "object", "javaType": "org.apache.camel.component.infinispan.remote.cluster.InfinispanRemoteClusterConfiguration", "secret": false }, { "name": "camel.cluster.infinispan.configurationProperties", "required": false, "description": "Implementation specific properties for the CacheManager", "sourceType": "org.apache.camel.component.infinispan.remote.cluster.InfinispanRemoteClusterService", "type": "object", "javaType": "java.util.Map", "secret": false }, { "name": "camel.cluster.infinispan.configurationUri", "required": false, "description": "An implementation specific URI for the CacheManager", "sourceType": "org.apache.camel.component.infinispan.remote.cluster.InfinispanRemoteClusterService", "type": "string", "javaType": "java.lang.String", "secret": false }, { "name": "camel.cluster.infinispan.enabled", "required": false, "description": "Whether to enable this cluster service.", "sourceType": "org.apache.camel.component.infinispan.remote.cluster.InfinispanRemoteClusterService", "type": "boolean", "javaType": "boolean", "defaultValue": true, "secret": false }, @@ -210,7 +213,9 @@ { "name": "camel.cluster.jgroups-raft.id", "required": true, "description": "Unique Raft id", "sourceType": "org.apache.camel.component.jgroups.raft.cluster.JGroupsRaftClusterService", "type": "string", "javaType": "java.lang.String", "secret": false }, { "name": "camel.cluster.jgroups-raft.jgroupsClusterName", "required": false, "description": "The name of the cluster", "sourceType": "org.apache.camel.component.jgroups.raft.cluster.JGroupsRaftClusterService", "type": "string", "javaType": "java.lang.String", "defaultValue": "jgroupsraft-master", "secret": false }, { "name": "camel.cluster.jgroups-raft.jgroupsConfig", "required": false, "description": "The path to the JGroups Raft configuration", "sourceType": "org.apache.camel.component.jgroups.raft.cluster.JGroupsRaftClusterService", "type": "string", "javaType": "java.lang.String", "defaultValue": "raft.xml", "secret": false }, + { "name": "camel.cluster.jgroups-raft.raftHandle", "required": false, "description": "To use a custom RaftHandler", "sourceType": "org.apache.camel.component.jgroups.raft.cluster.JGroupsRaftClusterService", "type": "object", "javaType": "org.jgroups.raft.RaftHandle", "secret": false }, { "name": "camel.cluster.kubernetes.clusterLabels", "required": false, "description": "Labels used to identify the members of the cluster.", "sourceType": "org.apache.camel.component.kubernetes.cluster.KubernetesClusterService", "type": "object", "javaType": "java.util.Map", "secret": false, "deprecated": true }, + { "name": "camel.cluster.kubernetes.configuration", "required": false, "description": "To use an existing configuration for Kubernetes", "sourceType": "org.apache.camel.component.kubernetes.cluster.KubernetesClusterService", "type": "object", "javaType": "org.apache.camel.component.kubernetes.KubernetesConfiguration", "secret": false, "deprecated": true }, { "name": "camel.cluster.kubernetes.connectionTimeout", "required": false, "description": "Connection timeout in milliseconds to use when making requests to the Kubernetes API server.", "sourceType": "org.apache.camel.component.kubernetes.cluster.KubernetesClusterService", "type": "integer", "javaType": "java.lang.Integer", "secret": false, "deprecated": true }, { "name": "camel.cluster.kubernetes.enabled", "required": false, "description": "Whether to enable this cluster service.", "sourceType": "org.apache.camel.component.kubernetes.cluster.KubernetesClusterService", "type": "boolean", "javaType": "boolean", "defaultValue": true, "secret": false }, { "name": "camel.cluster.kubernetes.groupName", "required": false, "description": "Name of the lock group (or namespace according to the Camel cluster convention) within the chosen ConfigMap.", "sourceType": "org.apache.camel.component.kubernetes.cluster.KubernetesClusterService", "type": "string", "javaType": "java.lang.String", "secret": false, "deprecated": true }, @@ -234,6 +239,7 @@ { "name": "camel.cluster.zookeeper.reconnectBaseSleepTime", "required": false, "description": "Initial amount of time (millis) to wait between retries", "sourceType": "org.apache.camel.component.zookeeper.cluster.ZooKeeperClusterService", "type": "integer", "javaType": "long", "defaultValue": 1000, "secret": false }, { "name": "camel.cluster.zookeeper.reconnectMaxRetries", "required": false, "description": "Max number of times to retry", "sourceType": "org.apache.camel.component.zookeeper.cluster.ZooKeeperClusterService", "type": "integer", "javaType": "int", "defaultValue": 3, "secret": false }, { "name": "camel.cluster.zookeeper.reconnectMaxSleepTime", "required": false, "description": "Max time (millis) to sleep on each retry", "sourceType": "org.apache.camel.component.zookeeper.cluster.ZooKeeperClusterService", "type": "integer", "javaType": "long", "secret": false }, + { "name": "camel.cluster.zookeeper.retryPolicy", "required": false, "description": "To use a custom retry policy implementation", "sourceType": "org.apache.camel.component.zookeeper.cluster.ZooKeeperClusterService", "type": "object", "javaType": "org.apache.curator.RetryPolicy", "secret": false }, { "name": "camel.cluster.zookeeper.sessionTimeout", "required": false, "description": "Session timeout (millis)", "sourceType": "org.apache.camel.component.zookeeper.cluster.ZooKeeperClusterService", "type": "integer", "javaType": "long", "defaultValue": 60000, "secret": false }, { "name": "camel.debug.bodyIncludeFiles", "required": false, "description": "Whether to include the message body of file based messages. The overhead is that the file content has to be read from the file.", "sourceType": "org.apache.camel.main.DebuggerConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": true, "secret": false }, { "name": "camel.debug.bodyIncludeStreams", "required": false, "description": "Whether to include the message body of stream based messages. If enabled then beware the stream may not be re-readable later. See more about Stream Caching.", "sourceType": "org.apache.camel.main.DebuggerConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": false, "secret": false }, diff --git a/core/camel-main/src/main/docs/main.adoc b/core/camel-main/src/main/docs/main.adoc index c2b0aa4f4576..20d29d34c351 100644 --- a/core/camel-main/src/main/docs/main.adoc +++ b/core/camel-main/src/main/docs/main.adoc @@ -756,12 +756,13 @@ The camel.cluster.file supports 10 options, which are listed below. === Camel Kubernetes Cluster Service configurations -The camel.cluster.kubernetes supports 14 options, which are listed below. +The camel.cluster.kubernetes supports 15 options, which are listed below. [width="100%",cols="2,5,^1,2",options="header"] |=== | Name | Description | Default | Type | *camel.cluster.kubernetes.clusterLabels* | Labels used to identify the members of the cluster. | | Map +| *camel.cluster.kubernetes.configuration* | To use an existing configuration for Kubernetes | | KubernetesConfiguration | *camel.cluster.kubernetes.connectionTimeout* | Connection timeout in milliseconds to use when making requests to the Kubernetes API server. | | Integer | *camel.cluster.kubernetes.enabled* | Whether to enable this cluster service. | true | boolean | *camel.cluster.kubernetes.groupName* | Name of the lock group (or namespace according to the Camel cluster convention) within the chosen ConfigMap. | | String @@ -779,7 +780,7 @@ The camel.cluster.kubernetes supports 14 options, which are listed below. === Camel ZooKeeper Cluster Service configurations -The camel.cluster.zookeeper supports 11 options, which are listed below. +The camel.cluster.zookeeper supports 12 options, which are listed below. [width="100%",cols="2,5,^1,2",options="header"] |=== @@ -794,18 +795,20 @@ The camel.cluster.zookeeper supports 11 options, which are listed below. | *camel.cluster.zookeeper.reconnectBaseSleepTime* | Initial amount of time (millis) to wait between retries | 1000 | long | *camel.cluster.zookeeper.reconnectMaxRetries* | Max number of times to retry | 3 | int | *camel.cluster.zookeeper.reconnectMaxSleepTime* | Max time (millis) to sleep on each retry | | long +| *camel.cluster.zookeeper.retryPolicy* | To use a custom retry policy implementation | | RetryPolicy | *camel.cluster.zookeeper.sessionTimeout* | Session timeout (millis) | 60000 | long |=== === Camel Consul Cluster Service configurations -The camel.cluster.consul supports 16 options, which are listed below. +The camel.cluster.consul supports 17 options, which are listed below. [width="100%",cols="2,5,^1,2",options="header"] |=== | Name | Description | Default | Type | *camel.cluster.consul.aclToken* | Sets the ACL token to be used with Consul | | String | *camel.cluster.consul.blockSeconds* | The second to wait for a watch event, default 10 seconds | 10 | int +| *camel.cluster.consul.configuration* | To use an existing configuration | | ConsulClusterConfiguration | *camel.cluster.consul.connectTimeout* | Connect timeout in millis | | int | *camel.cluster.consul.datacenter* | The data center | | String | *camel.cluster.consul.enabled* | Whether to enable this cluster service. | true | boolean @@ -824,7 +827,7 @@ The camel.cluster.consul supports 16 options, which are listed below. === Camel JGroups Raft Cluster Service configurations -The camel.cluster.jgroups-raft supports 4 options, which are listed below. +The camel.cluster.jgroups-raft supports 5 options, which are listed below. [width="100%",cols="2,5,^1,2",options="header"] |=== @@ -833,16 +836,19 @@ The camel.cluster.jgroups-raft supports 4 options, which are listed below. | *camel.cluster.jgroups-raft.id* | Unique Raft id | | String | *camel.cluster.jgroups-raft.jgroupsClusterName* | The name of the cluster | jgroupsraft-master | String | *camel.cluster.jgroups-raft.jgroupsConfig* | The path to the JGroups Raft configuration | raft.xml | String +| *camel.cluster.jgroups-raft.raftHandle* | To use a custom RaftHandler | | RaftHandle |=== === Camel Infinispan Remote Cluster Service configurations -The camel.cluster.infinispan supports 14 options, which are listed below. +The camel.cluster.infinispan supports 16 options, which are listed below. [width="100%",cols="2,5,^1,2",options="header"] |=== | Name | Description | Default | Type | *camel.cluster.infinispan.cacheContainer* | Specifies the cache Container to connect | | RemoteCacheManager +| *camel.cluster.infinispan.cacheContainerConfiguration* | The CacheContainer configuration. Used if the cacheContainer is not defined. | | Configuration +| *camel.cluster.infinispan.configuration* | To use an existing configuration | | InfinispanRemoteClusterConfiguration | *camel.cluster.infinispan.configurationProperties* | Implementation specific properties for the CacheManager | | Map | *camel.cluster.infinispan.configurationUri* | An implementation specific URI for the CacheManager | | String | *camel.cluster.infinispan.enabled* | Whether to enable this cluster service. | true | boolean diff --git a/dsl/camel-kamelet-main/src/generated/resources/camel-factoryfinder-known-dependencies.properties b/dsl/camel-kamelet-main/src/generated/resources/camel-factoryfinder-known-dependencies.properties index 4b6ae8f81790..d21021382017 100644 --- a/dsl/camel-kamelet-main/src/generated/resources/camel-factoryfinder-known-dependencies.properties +++ b/dsl/camel-kamelet-main/src/generated/resources/camel-factoryfinder-known-dependencies.properties @@ -17,6 +17,12 @@ META-INF/services/org/apache/camel/bean-processor-factory=camel:bean META-INF/services/org/apache/camel/bean-proxy-factory=camel:bean +META-INF/services/org/apache/camel/cluster-service-consul=camel:consul +META-INF/services/org/apache/camel/cluster-service-file=camel:file +META-INF/services/org/apache/camel/cluster-service-infinispan=camel:infinispan +META-INF/services/org/apache/camel/cluster-service-jgroups-raft=camel:jgroups-raft +META-INF/services/org/apache/camel/cluster-service-kubernetes=camel:kubernetes +META-INF/services/org/apache/camel/cluster-service-zookeeper=camel:zookeeper META-INF/services/org/apache/camel/csimple-compiler=camel:csimple-joor META-INF/services/org/apache/camel/debugger-factory=camel:debug META-INF/services/org/apache/camel/file-adapter-factory=camel:file diff --git a/dsl/camel-kamelet-main/src/main/resources/camel-main-known-dependencies.properties b/dsl/camel-kamelet-main/src/main/resources/camel-main-known-dependencies.properties index ac4afe0e433b..70730cfcc430 100644 --- a/dsl/camel-kamelet-main/src/main/resources/camel-main-known-dependencies.properties +++ b/dsl/camel-kamelet-main/src/main/resources/camel-main-known-dependencies.properties @@ -44,6 +44,12 @@ camel.opentelemetry = camel:opentelemetry camel.opentelemetry2 = camel:opentelemetry2 camel.lra = camel:lra camel.telemetryDev = camel:telemetry-dev +camel.cluster.file = camel:file +camel.cluster.kubernetes = camel:kubernetes +camel.cluster.zookeeper = camel:zookeeper +camel.cluster.consul = camel:consul +camel.cluster.jgroups-raft = camel:jgroups-raft +camel.cluster.infinispan = camel:infinispan META-INF/services/org/apache/camel/modelxml-dumper = camel:xml-io META-INF/services/org/apache/camel/modelyaml-dumper = camel:yaml-io diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCamelMainMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCamelMainMojo.java index 259740416d85..df0651404763 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCamelMainMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCamelMainMojo.java @@ -23,7 +23,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.stream.Collectors; import javax.inject.Inject; @@ -155,13 +154,6 @@ public class PrepareCamelMainMojo extends AbstractGeneratorMojo { return answer; } - private static final Set<String> SETTABLE_JAVA_TYPES = Set.of( - "java.lang.String", "java.lang.Integer", "java.lang.Long", "java.lang.Boolean", - "java.lang.Double", "java.lang.Float", "java.lang.Short", "java.lang.Byte", - "int", "long", "boolean", "double", "float", "short", "byte", - "java.util.Map", "java.util.concurrent.TimeUnit", - "org.apache.camel.support.jsse.SSLContextParameters"); - /** * Loads cluster service configuration metadata from a bean JSON file. */ @@ -194,12 +186,6 @@ public class PrepareCamelMainMojo extends AbstractGeneratorMojo { JsonObject prop = (JsonObject) entry.getValue(); String javaType = prop.getString("javaType"); - String label = prop.getString("label"); - - // skip advanced properties with component-specific types - if (label != null && label.contains("advanced") && !SETTABLE_JAVA_TYPES.contains(javaType)) { - continue; - } MainModel.MainOptionModel model = new MainModel.MainOptionModel(); model.setName(prefix + name);
