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 2023/12/30 15:15:13 UTC
(camel) 16/25: CAMEL-19749: Add variables as concept to Camel
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch var
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 08c6d2e68b4517c5ff8e9d3f5afff4c73bf8921c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Dec 30 09:52:45 2023 +0100
CAMEL-19749: Add variables as concept to Camel
---
.../camel/spi/BrowsableVariableRepository.java} | 36 +++++++++++++++++++---
.../mbean/ManagedVariableRepositoryMBean.java | 12 ++++++++
.../management/JmxManagementLifecycleStrategy.java | 4 +--
.../mbean/ManagedVariableRepository.java | 26 +++++++++++++---
.../camel/support/ExchangeVariableRepository.java | 3 +-
.../camel/support/GlobalVariableRepository.java | 29 ++++++++++++++++-
6 files changed, 97 insertions(+), 13 deletions(-)
diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java b/core/camel-api/src/main/java/org/apache/camel/spi/BrowsableVariableRepository.java
similarity index 56%
copy from core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java
copy to core/camel-api/src/main/java/org/apache/camel/spi/BrowsableVariableRepository.java
index d9e4ea37583..2de29f5881a 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/BrowsableVariableRepository.java
@@ -14,13 +14,39 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.api.management.mbean;
+package org.apache.camel.spi;
-import org.apache.camel.api.management.ManagedAttribute;
+import java.util.Map;
+import java.util.stream.Stream;
-public interface ManagedVariableRepositoryMBean extends ManagedServiceMBean {
+/**
+ * A {@link VariableRepository} that can browse the variables.
+ */
+public interface BrowsableVariableRepository extends VariableRepository {
+
+ /**
+ * Are there any variables in the repository.
+ */
+ boolean hasVariables();
+
+ /**
+ * Number of variables
+ */
+ int size();
+
+ /**
+ * The variable names
+ */
+ Stream<String> names();
+
+ /**
+ * Gets all the variables in a Map
+ */
+ Map<String, Object> getVariables();
- @ManagedAttribute(description = "Repository ID")
- String getId();
+ /**
+ * Removes all variables
+ */
+ void clear();
}
diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java
index d9e4ea37583..afcd503e8ee 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java
+++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedVariableRepositoryMBean.java
@@ -16,11 +16,23 @@
*/
package org.apache.camel.api.management.mbean;
+import java.util.Set;
+
import org.apache.camel.api.management.ManagedAttribute;
+import org.apache.camel.api.management.ManagedOperation;
public interface ManagedVariableRepositoryMBean extends ManagedServiceMBean {
@ManagedAttribute(description = "Repository ID")
String getId();
+ @ManagedAttribute(description = "Number of variables")
+ int getSize();
+
+ @ManagedOperation(description = "Removes all variables")
+ void clear();
+
+ @ManagedOperation(description = "Variable names")
+ Set<String> names();
+
}
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java b/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java
index 83192a799f7..426ce12f53b 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java
@@ -84,6 +84,7 @@ import org.apache.camel.model.ProcessorDefinitionHelper;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.spi.AsyncProcessorAwaitManager;
import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.spi.BrowsableVariableRepository;
import org.apache.camel.spi.ConsumerCache;
import org.apache.camel.spi.DataFormat;
import org.apache.camel.spi.DumpRoutesStrategy;
@@ -107,7 +108,6 @@ import org.apache.camel.spi.TransformerRegistry;
import org.apache.camel.spi.TypeConverterRegistry;
import org.apache.camel.spi.UnitOfWork;
import org.apache.camel.spi.ValidatorRegistry;
-import org.apache.camel.spi.VariableRepository;
import org.apache.camel.support.TimerListenerManager;
import org.apache.camel.support.service.ServiceSupport;
import org.apache.camel.throttling.ThrottlingExceptionRoutePolicy;
@@ -567,7 +567,7 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
answer = new ManagedTransformerRegistry(context, transformerRegistry);
} else if (service instanceof ValidatorRegistry<?> validatorRegistry) {
answer = new ManagedValidatorRegistry(context, validatorRegistry);
- } else if (service instanceof VariableRepository variableRepository) {
+ } else if (service instanceof BrowsableVariableRepository variableRepository) {
answer = new ManagedVariableRepository(context, variableRepository);
} else if (service instanceof CamelClusterService) {
answer = getManagementObjectStrategy().getManagedObjectForClusterService(context, (CamelClusterService) service);
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedVariableRepository.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedVariableRepository.java
index 75c9569ff3a..eef3e4c8306 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedVariableRepository.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedVariableRepository.java
@@ -16,21 +16,24 @@
*/
package org.apache.camel.management.mbean;
+import java.util.Set;
+import java.util.stream.Collectors;
+
import org.apache.camel.CamelContext;
import org.apache.camel.api.management.ManagedResource;
import org.apache.camel.api.management.mbean.ManagedVariableRepositoryMBean;
-import org.apache.camel.spi.VariableRepository;
+import org.apache.camel.spi.BrowsableVariableRepository;
@ManagedResource(description = "Managed VariableRepository")
public class ManagedVariableRepository extends ManagedService implements ManagedVariableRepositoryMBean {
- private final VariableRepository variableRepository;
+ private final BrowsableVariableRepository variableRepository;
- public ManagedVariableRepository(CamelContext context, VariableRepository variableRepository) {
+ public ManagedVariableRepository(CamelContext context, BrowsableVariableRepository variableRepository) {
super(context, variableRepository);
this.variableRepository = variableRepository;
}
- public VariableRepository getVariableRepository() {
+ public BrowsableVariableRepository getVariableRepository() {
return variableRepository;
}
@@ -38,4 +41,19 @@ public class ManagedVariableRepository extends ManagedService implements Managed
public String getId() {
return variableRepository.getId();
}
+
+ @Override
+ public int getSize() {
+ return variableRepository.size();
+ }
+
+ @Override
+ public void clear() {
+ variableRepository.clear();
+ }
+
+ @Override
+ public Set<String> names() {
+ return variableRepository.names().collect(Collectors.toSet());
+ }
}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ExchangeVariableRepository.java b/core/camel-support/src/main/java/org/apache/camel/support/ExchangeVariableRepository.java
index e422155282f..3e0a3fd3192 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/ExchangeVariableRepository.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/ExchangeVariableRepository.java
@@ -22,13 +22,14 @@ import java.util.stream.Stream;
import org.apache.camel.Exchange;
import org.apache.camel.NonManagedService;
+import org.apache.camel.spi.BrowsableVariableRepository;
import org.apache.camel.spi.VariableRepository;
import org.apache.camel.support.service.ServiceSupport;
/**
* {@link VariableRepository} which is local per {@link Exchange} to hold request-scoped variables.
*/
-class ExchangeVariableRepository extends ServiceSupport implements VariableRepository, NonManagedService {
+class ExchangeVariableRepository extends ServiceSupport implements BrowsableVariableRepository, NonManagedService {
private final Map<String, Object> variables = new ConcurrentHashMap<>(8);
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/GlobalVariableRepository.java b/core/camel-support/src/main/java/org/apache/camel/support/GlobalVariableRepository.java
index a026f759c8b..23bef38fc37 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/GlobalVariableRepository.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/GlobalVariableRepository.java
@@ -19,14 +19,16 @@ package org.apache.camel.support;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import java.util.stream.Stream;
+import org.apache.camel.spi.BrowsableVariableRepository;
import org.apache.camel.spi.VariableRepository;
import org.apache.camel.support.service.ServiceSupport;
/**
* Global {@link VariableRepository} which stores variables in-memory in a {@link Map}.
*/
-public class GlobalVariableRepository extends ServiceSupport implements VariableRepository {
+public class GlobalVariableRepository extends ServiceSupport implements BrowsableVariableRepository {
private final ConcurrentMap<String, Object> variables = new ConcurrentHashMap<>();
@@ -55,4 +57,29 @@ public class GlobalVariableRepository extends ServiceSupport implements Variable
public Object removeVariable(String name) {
return variables.remove(name);
}
+
+ @Override
+ public boolean hasVariables() {
+ return !variables.isEmpty();
+ }
+
+ @Override
+ public int size() {
+ return variables.size();
+ }
+
+ @Override
+ public Stream<String> names() {
+ return variables.keySet().stream();
+ }
+
+ @Override
+ public Map<String, Object> getVariables() {
+ return variables;
+ }
+
+ @Override
+ public void clear() {
+ variables.clear();
+ }
}