Updated Branches: refs/heads/camel-2.12.x b0adea066 -> a5af43c13 refs/heads/master 6733d2120 -> d4059b2d9
CAMEL-7164: Expose more information in JMX for type converter registry. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/d4059b2d Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/d4059b2d Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/d4059b2d Branch: refs/heads/master Commit: d4059b2d9a71b544facd9b7ef5ed5edfcbcee125 Parents: 6733d21 Author: Claus Ibsen <[email protected]> Authored: Tue Feb 4 10:32:48 2014 +0100 Committer: Claus Ibsen <[email protected]> Committed: Tue Feb 4 10:32:48 2014 +0100 ---------------------------------------------------------------------- .../management/mbean/CamelOpenMBeanTypes.java | 42 ++++++++++++++++++++ .../ManagedTypeConverterRegistryMBean.java | 5 +++ .../converter/BaseTypeConverterRegistry.java | 8 ++++ .../mbean/ManagedTypeConverterRegistry.java | 24 +++++++++++ .../apache/camel/spi/TypeConverterRegistry.java | 11 +++++ .../ManagedTypeConverterRegistryTest.java | 5 +++ .../camel/core/osgi/OsgiTypeConverter.java | 5 +++ .../osgi/test/MockTypeConverterRegistry.java | 4 ++ 8 files changed, 104 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/d4059b2d/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java new file mode 100644 index 0000000..6cbdb30 --- /dev/null +++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/CamelOpenMBeanTypes.java @@ -0,0 +1,42 @@ +/** + * 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.api.management.mbean; + +import javax.management.openmbean.CompositeType; +import javax.management.openmbean.OpenDataException; +import javax.management.openmbean.OpenType; +import javax.management.openmbean.SimpleType; +import javax.management.openmbean.TabularType; + +/** + * Various JMX openmbean types used by Camel. + */ +public final class CamelOpenMBeanTypes { + + private CamelOpenMBeanTypes() { + } + + public static TabularType listTypeConvertersTabularType() throws OpenDataException { + CompositeType ct = listTypeConvertersCompositeType(); + return new TabularType("listTypeConverters", "Lists all the type converters in the registry (from -> to)", ct, new String[]{"from", "to"}); + } + + public static CompositeType listTypeConvertersCompositeType() throws OpenDataException { + return new CompositeType("types", "From/To types", new String[]{"from", "to"}, + new String[]{"From type", "To type"}, new OpenType[]{SimpleType.STRING, SimpleType.STRING}); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/d4059b2d/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedTypeConverterRegistryMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedTypeConverterRegistryMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedTypeConverterRegistryMBean.java index 89070de..650b62c 100644 --- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedTypeConverterRegistryMBean.java +++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedTypeConverterRegistryMBean.java @@ -16,6 +16,8 @@ */ package org.apache.camel.api.management.mbean; +import javax.management.openmbean.TabularData; + import org.apache.camel.api.management.ManagedAttribute; import org.apache.camel.api.management.ManagedOperation; @@ -48,4 +50,7 @@ public interface ManagedTypeConverterRegistryMBean extends ManagedServiceMBean { @ManagedOperation(description = "Checks whether a type converter exists for converting (from -> to)") boolean hasTypeConverter(String fromType, String toType); + @ManagedOperation(description = "Lists all the type converters in the registry (from -> to)") + TabularData listTypeConverters(); + } http://git-wip-us.apache.org/repos/asf/camel/blob/d4059b2d/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java b/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java index 0c726d2..5443e75 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java +++ b/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java @@ -513,6 +513,14 @@ public abstract class BaseTypeConverterRegistry extends ServiceSupport implement return null; } + public List<Class[]> listAllTypeConvertersFromTo() { + List<Class[]> answer = new ArrayList<Class[]>(typeMappings.size()); + for (TypeMapping mapping : typeMappings.keySet()) { + answer.add(new Class[]{mapping.getFromType(), mapping.getToType()}); + } + return answer; + } + /** * Loads the core type converters which is mandatory to use Camel */ http://git-wip-us.apache.org/repos/asf/camel/blob/d4059b2d/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTypeConverterRegistry.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTypeConverterRegistry.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTypeConverterRegistry.java index 1a735d8..f4e4bc3 100644 --- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTypeConverterRegistry.java +++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTypeConverterRegistry.java @@ -16,8 +16,16 @@ */ package org.apache.camel.management.mbean; +import java.util.List; +import javax.management.openmbean.CompositeData; +import javax.management.openmbean.CompositeDataSupport; +import javax.management.openmbean.CompositeType; +import javax.management.openmbean.TabularData; +import javax.management.openmbean.TabularDataSupport; + import org.apache.camel.CamelContext; import org.apache.camel.api.management.ManagedResource; +import org.apache.camel.api.management.mbean.CamelOpenMBeanTypes; import org.apache.camel.api.management.mbean.ManagedTypeConverterRegistryMBean; import org.apache.camel.spi.TypeConverterRegistry; import org.apache.camel.util.ObjectHelper; @@ -81,4 +89,20 @@ public class ManagedTypeConverterRegistry extends ManagedService implements Mana } } + public TabularData listTypeConverters() { + try { + TabularData answer = new TabularDataSupport(CamelOpenMBeanTypes.listTypeConvertersTabularType()); + List<Class[]> converters = registry.listAllTypeConvertersFromTo(); + for (Class[] entry : converters) { + CompositeType ct = CamelOpenMBeanTypes.listTypeConvertersCompositeType(); + String from = entry[0].getCanonicalName(); + String to = entry[1].getCanonicalName(); + CompositeData data = new CompositeDataSupport(ct, new String[]{"from", "to"}, new Object[]{from, to}); + answer.put(data); + } + return answer; + } catch (Exception e) { + throw ObjectHelper.wrapRuntimeCamelException(e); + } + } } http://git-wip-us.apache.org/repos/asf/camel/blob/d4059b2d/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java b/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java index b56d40f..3896fbc 100644 --- a/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java +++ b/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java @@ -16,8 +16,12 @@ */ package org.apache.camel.spi; +import java.util.Iterator; +import java.util.List; + import org.apache.camel.StaticService; import org.apache.camel.TypeConverter; +import org.apache.camel.util.KeyValueHolder; /** * Registry for type converters. @@ -108,6 +112,13 @@ public interface TypeConverterRegistry extends StaticService { TypeConverter lookup(Class<?> toType, Class<?> fromType); /** + * Gets a read-only list of the type converter from / to classes + * + * @return a list containing fromType/toType class names + */ + List<Class[]> listAllTypeConvertersFromTo(); + + /** * Sets the injector to be used for creating new instances during type conversions. * * @param injector the injector http://git-wip-us.apache.org/repos/asf/camel/blob/d4059b2d/camel-core/src/test/java/org/apache/camel/management/ManagedTypeConverterRegistryTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedTypeConverterRegistryTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedTypeConverterRegistryTest.java index c2b6a32..e93d0d0 100644 --- a/camel-core/src/test/java/org/apache/camel/management/ManagedTypeConverterRegistryTest.java +++ b/camel-core/src/test/java/org/apache/camel/management/ManagedTypeConverterRegistryTest.java @@ -20,6 +20,7 @@ import java.util.Set; import javax.management.Attribute; import javax.management.MBeanServer; import javax.management.ObjectName; +import javax.management.openmbean.TabularData; import org.apache.camel.builder.RouteBuilder; @@ -98,6 +99,10 @@ public class ManagedTypeConverterRegistryTest extends ManagementTestSupport { has = (Boolean) mbeanServer.invoke(name, "hasTypeConverter", new Object[]{"java.math.BigInteger", "int"}, new String[]{"java.lang.String", "java.lang.String"}); assertFalse("Should not have type converter", has.booleanValue()); + + // we have more than 150 converters out of the box + TabularData data = (TabularData) mbeanServer.invoke(name, "listTypeConverters", null, null); + assertTrue("Should be more than 150 converters, was: " + data.size(), data.size() >= 150); } @Override http://git-wip-us.apache.org/repos/asf/camel/blob/d4059b2d/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java ---------------------------------------------------------------------- diff --git a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java index a9a3810..e5452fe 100644 --- a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java +++ b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java @@ -17,6 +17,7 @@ package org.apache.camel.core.osgi; import java.util.Collections; +import java.util.List; import java.util.Set; import org.apache.camel.Exchange; @@ -139,6 +140,10 @@ public class OsgiTypeConverter extends ServiceSupport implements TypeConverter, return getDelegate().lookup(toType, fromType); } + public List<Class[]> listAllTypeConvertersFromTo() { + return getDelegate().listAllTypeConvertersFromTo(); + } + public void setInjector(Injector injector) { getDelegate().setInjector(injector); } http://git-wip-us.apache.org/repos/asf/camel/blob/d4059b2d/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/test/MockTypeConverterRegistry.java ---------------------------------------------------------------------- diff --git a/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/test/MockTypeConverterRegistry.java b/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/test/MockTypeConverterRegistry.java index d43bc9d..45ef590 100644 --- a/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/test/MockTypeConverterRegistry.java +++ b/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/test/MockTypeConverterRegistry.java @@ -52,6 +52,10 @@ public class MockTypeConverterRegistry implements TypeConverterRegistry { return null; } + public List<Class[]> listAllTypeConvertersFromTo() { + return null; + } + public void setInjector(Injector injector) { // do nothing }
