This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 17fb33e7498 CAMEL-19398: fix not being able to enable statistics after 
initialized (#11526)
17fb33e7498 is described below

commit 17fb33e7498533a6eb328c7f1ea95078a3c9e68e
Author: Otavio Rodolfo Piske <[email protected]>
AuthorDate: Fri Sep 22 12:33:08 2023 +0200

    CAMEL-19398: fix not being able to enable statistics after initialized 
(#11526)
    
    The statistics need to be set after the context and registry are 
initialized because of Spring. This fix cleanups and partially reverts change 
a7d67bc0e8f53c2f4375e432d93540fbdbbd316e.
---
 .../csimple/joor/OriginalSimpleOperatorTest.java   | 10 +++
 .../camel/component/jcr/JcrConverterTest.java      |  2 +-
 .../apache/camel/spi/TypeConverterRegistry.java    |  7 ++
 .../camel/impl/engine/AbstractCamelContext.java    |  4 ++
 .../camel/impl/engine/SimpleCamelContext.java      |  2 +-
 .../impl/converter/BaseTypeConverterRegistry.java  |  5 +-
 .../impl/converter/CoreTypeConverterRegistry.java  | 10 +--
 .../camel/impl/converter/DefaultTypeConverter.java |  8 +--
 .../converter/NoopTypeConverterStatistics.java     | 80 ----------------------
 .../impl/converter/TypeConverterStatistics.java    | 28 ++++++--
 .../xml/AbstractCamelContextFactoryBeanTest.java   |  2 +-
 .../org/apache/camel/converter/ConverterTest.java  |  2 +-
 .../java/org/apache/camel/converter/JaxpTest.java  |  2 +-
 .../apache/camel/converter/StringSourceTest.java   |  2 +-
 ...gistryStatisticsEnabledNoStreamCachingTest.java |  5 +-
 ...TypeConverterRegistryStatisticsEnabledTest.java |  2 +-
 .../camel/language/simple/SimpleOperatorTest.java  | 10 +++
 .../mbean/ManagedTypeConverterRegistryMBean.java   |  3 +
 .../mbean/ManagedTypeConverterRegistry.java        |  5 ++
 .../ManagedTypeConverterRegistryTest.java          | 32 ++++-----
 20 files changed, 91 insertions(+), 130 deletions(-)

diff --git 
a/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleOperatorTest.java
 
b/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleOperatorTest.java
index 51f1cef4ec9..6264b5405b8 100644
--- 
a/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleOperatorTest.java
+++ 
b/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleOperatorTest.java
@@ -165,6 +165,10 @@ public class OriginalSimpleOperatorTest extends 
LanguageTestSupport {
         assertPredicate("${in.header.foo} == 'def'", false);
         assertPredicate("${in.header.foo} == '1'", false);
 
+        // no type converter needed from this point forward
+        
context.getTypeConverterRegistry().getStatistics().setStatisticsEnabled(true);
+        context.getTypeConverterRegistry().getStatistics().reset();
+
         // boolean to boolean comparison
         exchange.getIn().setHeader("bool", true);
         exchange.getIn().setHeader("booley", false);
@@ -382,6 +386,9 @@ public class OriginalSimpleOperatorTest extends 
LanguageTestSupport {
 
     @Test
     public void testLessThanOrEqualOperator() {
+        
context.getTypeConverterRegistry().getStatistics().setStatisticsEnabled(true);
+        context.getTypeConverterRegistry().getStatistics().reset();
+
         // string to string comparison
         assertPredicate("${in.header.foo} <= 'aaa'", false);
         assertPredicate("${in.header.foo} <= 'abc'", true);
@@ -406,6 +413,9 @@ public class OriginalSimpleOperatorTest extends 
LanguageTestSupport {
 
     @Test
     public void testTypeCoerceNoConversionNeeded() {
+        
context.getTypeConverterRegistry().getStatistics().setStatisticsEnabled(true);
+        context.getTypeConverterRegistry().getStatistics().reset();
+
         // int to int comparison
         exchange.getIn().setHeader("num", 70);
         assertPredicate("${in.header.num} > 100", false);
diff --git 
a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrConverterTest.java
 
b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrConverterTest.java
index 6ebd0d0b1dd..cd4c0decd19 100644
--- 
a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrConverterTest.java
+++ 
b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrConverterTest.java
@@ -68,7 +68,7 @@ public class JcrConverterTest {
                     public boolean supportsAutoWiring() {
                         return false;
                     }
-                }, true, false);
+                }, true);
         ServiceHelper.startService(converter);
     }
 
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
index 628e9ddbe93..ea51bfc0ca8 100644
--- 
a/core/camel-api/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
+++ 
b/core/camel-api/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
@@ -71,6 +71,13 @@ public interface TypeConverterRegistry extends 
StaticService, CamelContextAware
          * Whether statistics is enabled.
          */
         boolean isStatisticsEnabled();
+
+        /**
+         * Sets whether statistics is enabled.
+         *
+         * @param statisticsEnabled <tt>true</tt> to enable
+         */
+        void setStatisticsEnabled(boolean statisticsEnabled);
     }
 
     /**
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index ab465885279..7a771fd0425 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -3194,6 +3194,10 @@ public abstract class AbstractCamelContext extends 
BaseService
         getShutdownStrategy();
         getUuidGenerator();
 
+        if (isTypeConverterStatisticsEnabled()) {
+            
getTypeConverterRegistry().getStatistics().setStatisticsEnabled(isTypeConverterStatisticsEnabled());
+        }
+
         // resolve simple language to initialize it
         resolveLanguage("simple");
     }
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
index 240e4c949c6..49ca74f5a37 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
@@ -165,7 +165,7 @@ public class SimpleCamelContext extends 
AbstractCamelContext {
     protected TypeConverter createTypeConverter() {
         return new DefaultTypeConverter(
                 getCamelContextReference(), 
PluginHelper.getPackageScanClassResolver(this), getInjector(),
-                isLoadTypeConverters(), isTypeConverterStatisticsEnabled());
+                isLoadTypeConverters());
     }
 
     @Override
diff --git 
a/core/camel-base/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
 
b/core/camel-base/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
index 4ed46928438..aa58325cec6 100644
--- 
a/core/camel-base/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
+++ 
b/core/camel-base/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
@@ -64,10 +64,7 @@ public abstract class BaseTypeConverterRegistry extends 
CoreTypeConverterRegistr
     protected PackageScanClassResolver resolver;
     protected Injector injector;
 
-    public BaseTypeConverterRegistry(CamelContext camelContext, 
PackageScanClassResolver resolver, Injector injector,
-                                     boolean statisticsEnabled) {
-        super(statisticsEnabled);
-
+    public BaseTypeConverterRegistry(CamelContext camelContext, 
PackageScanClassResolver resolver, Injector injector) {
         this.camelContext = camelContext;
         this.injector = injector;
         this.resolver = resolver;
diff --git 
a/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java
 
b/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java
index 03dde53726d..d9b1a39f425 100644
--- 
a/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java
+++ 
b/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java
@@ -63,7 +63,7 @@ public abstract class CoreTypeConverterRegistry extends 
ServiceSupport implement
     // special enum converter for optional performance
     protected final TypeConverter enumTypeConverter = new EnumTypeConverter();
 
-    private final ConverterStatistics statistics;
+    private final ConverterStatistics statistics = new 
TypeConverterStatistics();
 
     protected TypeConverterExists typeConverterExists = 
TypeConverterExists.Ignore;
     protected LoggingLevel typeConverterExistsLoggingLevel = 
LoggingLevel.DEBUG;
@@ -72,14 +72,6 @@ public abstract class CoreTypeConverterRegistry extends 
ServiceSupport implement
     // space for others added during runtime
     private final Map<TypeConvertible<?, ?>, TypeConverter> converters = new 
ConcurrentHashMap<>(256);
 
-    protected CoreTypeConverterRegistry(boolean statisticsEnabled) {
-        if (statisticsEnabled) {
-            statistics = new TypeConverterStatistics();
-        } else {
-            statistics = new NoopTypeConverterStatistics();
-        }
-    }
-
     @Override
     public boolean allowNull() {
         return false;
diff --git 
a/core/camel-base/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
 
b/core/camel-base/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
index c1dee555174..31df118fa3c 100644
--- 
a/core/camel-base/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
+++ 
b/core/camel-base/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
@@ -40,13 +40,13 @@ public class DefaultTypeConverter extends 
BaseTypeConverterRegistry implements A
     private final boolean loadTypeConverters;
 
     public DefaultTypeConverter(PackageScanClassResolver resolver, Injector 
injector,
-                                boolean loadTypeConverters, boolean 
statisticsEnabled) {
-        this(null, resolver, injector, loadTypeConverters, statisticsEnabled);
+                                boolean loadTypeConverters) {
+        this(null, resolver, injector, loadTypeConverters);
     }
 
     public DefaultTypeConverter(CamelContext camelContext, 
PackageScanClassResolver resolver, Injector injector,
-                                boolean loadTypeConverters, boolean 
statisticsEnabled) {
-        super(camelContext, resolver, injector, statisticsEnabled);
+                                boolean loadTypeConverters) {
+        super(camelContext, resolver, injector);
         this.loadTypeConverters = loadTypeConverters;
     }
 
diff --git 
a/core/camel-base/src/main/java/org/apache/camel/impl/converter/NoopTypeConverterStatistics.java
 
b/core/camel-base/src/main/java/org/apache/camel/impl/converter/NoopTypeConverterStatistics.java
deleted file mode 100644
index 975b0b8f6a7..00000000000
--- 
a/core/camel-base/src/main/java/org/apache/camel/impl/converter/NoopTypeConverterStatistics.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.camel.impl.converter;
-
-final class NoopTypeConverterStatistics implements ConverterStatistics {
-    @Override
-    public long getNoopCounter() {
-        return 0;
-    }
-
-    @Override
-    public long getAttemptCounter() {
-        return 0;
-    }
-
-    @Override
-    public long getHitCounter() {
-        return 0;
-    }
-
-    @Override
-    public long getMissCounter() {
-        return 0;
-    }
-
-    @Override
-    public long getFailedCounter() {
-        return 0;
-    }
-
-    @Override
-    public void reset() {
-        // NO-OP
-    }
-
-    @Override
-    public boolean isStatisticsEnabled() {
-        return false;
-    }
-
-    @Override
-    public void incrementFailed() {
-        // NO-OP
-    }
-
-    @Override
-    public void incrementNoop() {
-        // NO-OP
-    }
-
-    @Override
-    public void incrementHit() {
-        // NO-OP
-    }
-
-    @Override
-    public void incrementMiss() {
-        // NO-OP
-    }
-
-    @Override
-    public void incrementAttempt() {
-        // NO-OP
-    }
-}
diff --git 
a/core/camel-base/src/main/java/org/apache/camel/impl/converter/TypeConverterStatistics.java
 
b/core/camel-base/src/main/java/org/apache/camel/impl/converter/TypeConverterStatistics.java
index a51066da1d9..2a813d6a26e 100644
--- 
a/core/camel-base/src/main/java/org/apache/camel/impl/converter/TypeConverterStatistics.java
+++ 
b/core/camel-base/src/main/java/org/apache/camel/impl/converter/TypeConverterStatistics.java
@@ -24,6 +24,7 @@ import java.util.concurrent.atomic.LongAdder;
  */
 final class TypeConverterStatistics implements ConverterStatistics {
 
+    private boolean statisticsEnabled;
     private final LongAdder noopCounter = new LongAdder();
     private final LongAdder attemptCounter = new LongAdder();
     private final LongAdder missCounter = new LongAdder();
@@ -57,27 +58,37 @@ final class TypeConverterStatistics implements 
ConverterStatistics {
 
     @Override
     public void incrementFailed() {
-        failedCounter.increment();
+        if (statisticsEnabled) {
+            failedCounter.increment();
+        }
     }
 
     @Override
     public void incrementNoop() {
-        noopCounter.increment();
+        if (statisticsEnabled) {
+            noopCounter.increment();
+        }
     }
 
     @Override
     public void incrementHit() {
-        hitCounter.increment();
+        if (statisticsEnabled) {
+            hitCounter.increment();
+        }
     }
 
     @Override
     public void incrementMiss() {
-        missCounter.increment();
+        if (statisticsEnabled) {
+            missCounter.increment();
+        }
     }
 
     @Override
     public void incrementAttempt() {
-        attemptCounter.increment();
+        if (statisticsEnabled) {
+            attemptCounter.increment();
+        }
     }
 
     @Override
@@ -91,7 +102,12 @@ final class TypeConverterStatistics implements 
ConverterStatistics {
 
     @Override
     public boolean isStatisticsEnabled() {
-        return true;
+        return statisticsEnabled;
+    }
+
+    @Override
+    public void setStatisticsEnabled(boolean statisticsEnabled) {
+        this.statisticsEnabled = statisticsEnabled;
     }
 
     @Override
diff --git 
a/core/camel-core-xml/src/test/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBeanTest.java
 
b/core/camel-core-xml/src/test/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBeanTest.java
index b0c51d453aa..4c112f03c79 100644
--- 
a/core/camel-core-xml/src/test/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBeanTest.java
+++ 
b/core/camel-core-xml/src/test/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBeanTest.java
@@ -83,7 +83,7 @@ public class AbstractCamelContextFactoryBeanTest {
                 public boolean supportsAutoWiring() {
                     return false;
                 }
-            }, false, false);
+            }, false);
 
     // properties that should return value that can be converted to boolean
     Set<String> valuesThatReturnBoolean = new HashSet<>(
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java 
b/core/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
index 24744bff270..1eca55a02f8 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
@@ -57,7 +57,7 @@ public class ConverterTest extends TestSupport {
     private static final Logger LOG = 
LoggerFactory.getLogger(ConverterTest.class);
 
     protected TypeConverter converter = new DefaultTypeConverter(
-            new DefaultPackageScanClassResolver(), new ReflectionInjector(), 
true, false);
+            new DefaultPackageScanClassResolver(), new ReflectionInjector(), 
true);
 
     @BeforeEach
     public void setUp() throws Exception {
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java 
b/core/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java
index 9c102659fc0..4e8dfd77628 100644
--- a/core/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java
@@ -41,7 +41,7 @@ import static org.junit.jupiter.api.Assertions.*;
 public class JaxpTest {
     private static final Logger LOG = LoggerFactory.getLogger(JaxpTest.class);
     protected TypeConverter converter = new DefaultTypeConverter(
-            new DefaultPackageScanClassResolver(), new ReflectionInjector(), 
false, false);
+            new DefaultPackageScanClassResolver(), new ReflectionInjector(), 
false);
 
     @BeforeEach
     public void setUp() throws Exception {
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/converter/StringSourceTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/converter/StringSourceTest.java
index 0a807f4d49c..bf261869e57 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/converter/StringSourceTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/converter/StringSourceTest.java
@@ -35,7 +35,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class StringSourceTest {
     protected TypeConverter converter = new DefaultTypeConverter(
-            new DefaultPackageScanClassResolver(), new ReflectionInjector(), 
false, false);
+            new DefaultPackageScanClassResolver(), new ReflectionInjector(), 
false);
     protected String expectedBody = "<hello>world!</hello>";
 
     @BeforeEach
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryStatisticsEnabledNoStreamCachingTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryStatisticsEnabledNoStreamCachingTest.java
index bd01767b676..f8a0adad8ec 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryStatisticsEnabledNoStreamCachingTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryStatisticsEnabledNoStreamCachingTest.java
@@ -30,12 +30,9 @@ public class 
TypeConverterRegistryStatisticsEnabledNoStreamCachingTest extends C
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
-        CamelContext context = new DefaultCamelContext(false);
-        context.setLoadTypeConverters(isLoadTypeConverters());
+        CamelContext context = super.createCamelContext();
         context.setStreamCaching(false);
         context.setTypeConverterStatisticsEnabled(true);
-        context.build();
-
         return context;
     }
 
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryStatisticsEnabledTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryStatisticsEnabledTest.java
index 6a38aa31c7e..6c2549323f6 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryStatisticsEnabledTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryStatisticsEnabledTest.java
@@ -30,7 +30,7 @@ public class TypeConverterRegistryStatisticsEnabledTest 
extends ContextTestSuppo
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
-        CamelContext context = new DefaultCamelContext(false);
+        CamelContext context = super.createCamelContext();
         context.setTypeConverterStatisticsEnabled(true);
         return context;
     }
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java
index 3fa6625fc5a..5c1fd78f4da 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java
@@ -173,6 +173,10 @@ public class SimpleOperatorTest extends 
LanguageTestSupport {
         assertPredicate("${in.header.foo} == '-'", false);
         assertPredicate("${in.header.bar} == '-'", false);
 
+        // no type converter needed from this point forward
+        
context.getTypeConverterRegistry().getStatistics().setStatisticsEnabled(true);
+        context.getTypeConverterRegistry().getStatistics().reset();
+
         // boolean to boolean comparison
         exchange.getIn().setHeader("bool", true);
         exchange.getIn().setHeader("booley", false);
@@ -402,6 +406,9 @@ public class SimpleOperatorTest extends LanguageTestSupport 
{
 
     @Test
     public void testLessThanOrEqualOperator() throws Exception {
+        
context.getTypeConverterRegistry().getStatistics().setStatisticsEnabled(true);
+        context.getTypeConverterRegistry().getStatistics().reset();
+
         // string to string comparison
         assertPredicate("${in.header.foo} <= 'aaa'", false);
         assertPredicate("${in.header.foo} <= 'abc'", true);
@@ -426,6 +433,9 @@ public class SimpleOperatorTest extends LanguageTestSupport 
{
 
     @Test
     public void testTypeCoerceNoConversionNeeded() throws Exception {
+        
context.getTypeConverterRegistry().getStatistics().setStatisticsEnabled(true);
+        context.getTypeConverterRegistry().getStatistics().reset();
+
         // int to int comparison
         exchange.getIn().setHeader("num", 70);
         assertPredicate("${in.header.num} > 100", false);
diff --git 
a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedTypeConverterRegistryMBean.java
 
b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedTypeConverterRegistryMBean.java
index bf14b4219a7..f607a3652bb 100644
--- 
a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedTypeConverterRegistryMBean.java
+++ 
b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedTypeConverterRegistryMBean.java
@@ -42,6 +42,9 @@ public interface ManagedTypeConverterRegistryMBean extends 
ManagedServiceMBean {
     @ManagedAttribute(description = "Utilization statistics enabled")
     boolean isStatisticsEnabled();
 
+    @ManagedAttribute(description = "Utilization statistics enabled")
+    void setStatisticsEnabled(boolean statisticsEnabled);
+
     @ManagedAttribute(description = "Number of type converters in the 
registry")
     int getNumberOfTypeConverters();
 
diff --git 
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedTypeConverterRegistry.java
 
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedTypeConverterRegistry.java
index 17d14ff352a..16d31164bf3 100644
--- 
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedTypeConverterRegistry.java
+++ 
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedTypeConverterRegistry.java
@@ -74,6 +74,11 @@ public class ManagedTypeConverterRegistry extends 
ManagedService implements Mana
         return registry.getStatistics().isStatisticsEnabled();
     }
 
+    @Override
+    public void setStatisticsEnabled(boolean statisticsEnabled) {
+        registry.getStatistics().setStatisticsEnabled(statisticsEnabled);
+    }
+
     @Override
     public int getNumberOfTypeConverters() {
         return registry.size();
diff --git 
a/core/camel-management/src/test/java/org/apache/camel/management/ManagedTypeConverterRegistryTest.java
 
b/core/camel-management/src/test/java/org/apache/camel/management/ManagedTypeConverterRegistryTest.java
index 3da8385d4de..7ada1440bd3 100644
--- 
a/core/camel-management/src/test/java/org/apache/camel/management/ManagedTypeConverterRegistryTest.java
+++ 
b/core/camel-management/src/test/java/org/apache/camel/management/ManagedTypeConverterRegistryTest.java
@@ -18,33 +18,21 @@ package org.apache.camel.management;
 
 import java.util.Set;
 
+import javax.management.Attribute;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
-import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.impl.DefaultCamelContext;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.DisabledOnOs;
 import org.junit.jupiter.api.condition.OS;
 
 import static 
org.apache.camel.management.DefaultManagementObjectNameStrategy.TYPE_SERVICE;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assertions.*;
 
 @DisabledOnOs(OS.AIX)
 public class ManagedTypeConverterRegistryTest extends ManagementTestSupport {
 
-    @Override
-    protected CamelContext createCamelContext() throws Exception {
-        CamelContext context = new DefaultCamelContext(false);
-        context.setTypeConverterStatisticsEnabled(true);
-        return context;
-    }
-
     @Test
     public void testTypeConverterRegistry() throws Exception {
         getMockEndpoint("mock:a").expectedMessageCount(2);
@@ -69,6 +57,18 @@ public class ManagedTypeConverterRegistryTest extends 
ManagementTestSupport {
         }
         assertNotNull(name, "Cannot find DefaultTypeConverter");
 
+        // is disabled by default
+        Boolean enabled = (Boolean) mbeanServer.getAttribute(name, 
"StatisticsEnabled");
+        assertEquals(Boolean.FALSE, enabled);
+
+        // need to enable statistics
+        mbeanServer.setAttribute(name, new Attribute("StatisticsEnabled", 
Boolean.TRUE));
+
+        Long failed = (Long) mbeanServer.getAttribute(name, "FailedCounter");
+        assertEquals(0, failed.intValue());
+        Long miss = (Long) mbeanServer.getAttribute(name, "MissCounter");
+        assertEquals(0, miss.intValue());
+
         // reset
         mbeanServer.invoke(name, "resetTypeConversionCounters", null, null);
 
@@ -77,9 +77,9 @@ public class ManagedTypeConverterRegistryTest extends 
ManagementTestSupport {
         // should hit
         Long hit = (Long) mbeanServer.getAttribute(name, "HitCounter");
         assertEquals(1, hit.intValue());
-        Long failed = (Long) mbeanServer.getAttribute(name, "FailedCounter");
+        failed = (Long) mbeanServer.getAttribute(name, "FailedCounter");
         assertEquals(0, failed.intValue());
-        Long miss = (Long) mbeanServer.getAttribute(name, "MissCounter");
+        miss = (Long) mbeanServer.getAttribute(name, "MissCounter");
         assertEquals(2, miss.intValue());  // stream caching misses
 
         // reset

Reply via email to