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 <claus.ib...@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(); + } }