Repository: camel Updated Branches: refs/heads/master 6f0c9e6bd -> 2bca93918
CAMEL-10678 Use individual fields for the Transformer properties in ManagedTransformerRegistry#listTransformers() Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2bca9391 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2bca9391 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2bca9391 Branch: refs/heads/master Commit: 2bca939186660f1b0abdb98d7be17a6ec8e066e4 Parents: 6f0c9e6 Author: Tomohisa Igarashi <tm.igara...@gmail.com> Authored: Fri Jan 6 20:50:21 2017 +0900 Committer: Claus Ibsen <davscl...@apache.org> Committed: Fri Jan 6 14:20:45 2017 +0100 ---------------------------------------------------------------------- .../management/mbean/CamelOpenMBeanTypes.java | 9 +-- .../camel/impl/DefaultTransformerRegistry.java | 19 ++++-- .../mbean/ManagedTransformerRegistry.java | 13 ++-- .../apache/camel/spi/TransformerRegistry.java | 26 ++++++-- .../ManagedTransformerRegistryTest.java | 68 +++++++++++++++++++- .../jolokia/DefaultJolokiaCamelController.java | 26 ++++++-- 6 files changed, 138 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/2bca9391/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 index 40c5b13..b03cda1 100644 --- 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 @@ -218,13 +218,14 @@ public final class CamelOpenMBeanTypes { public static TabularType listTransformersTabularType() throws OpenDataException { CompositeType ct = listTransformersCompositeType(); - return new TabularType("listTransformers", "Lists all the transformers in the registry", ct, new String[]{"string"}); + return new TabularType("listTransformers", "Lists all the transformers in the registry", ct, new String[]{"scheme", "from", "to"}); } public static CompositeType listTransformersCompositeType() throws OpenDataException { return new CompositeType("transformers", "Transformers", - new String[]{"string", "static", "dynamic"}, - new String[]{"string", "Static", "Dynamic"}, - new OpenType[]{SimpleType.STRING, SimpleType.BOOLEAN, SimpleType.BOOLEAN}); + new String[]{"scheme", "from", "to", "static", "dynamic", "description"}, + new String[]{"Scheme", "From", "To", "Static", "Dynamic", "Description"}, + new OpenType[]{SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, + SimpleType.BOOLEAN, SimpleType.BOOLEAN, SimpleType.STRING}); } } http://git-wip-us.apache.org/repos/asf/camel/blob/2bca9391/camel-core/src/main/java/org/apache/camel/impl/DefaultTransformerRegistry.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultTransformerRegistry.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultTransformerRegistry.java index f371267..6969233 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultTransformerRegistry.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultTransformerRegistry.java @@ -27,6 +27,7 @@ import java.util.concurrent.ConcurrentMap; import org.apache.camel.CamelContext; import org.apache.camel.Endpoint; import org.apache.camel.impl.transformer.TransformerKey; +import org.apache.camel.spi.DataType; import org.apache.camel.spi.EndpointRegistry; import org.apache.camel.spi.Transformer; import org.apache.camel.spi.TransformerRegistry; @@ -190,13 +191,23 @@ public class DefaultTransformerRegistry extends LRUCache<TransformerKey, Transfo } @Override - public boolean isStatic(String key) { - return staticMap.containsKey(new EndpointKey(key)); + public boolean isStatic(String scheme) { + return staticMap.containsKey(new TransformerKey(scheme)); } @Override - public boolean isDynamic(String key) { - return super.containsKey(new EndpointKey(key)); + public boolean isStatic(DataType from, DataType to) { + return staticMap.containsKey(new TransformerKey(from, to)); + } + + @Override + public boolean isDynamic(String scheme) { + return super.containsKey(new TransformerKey(scheme)); + } + + @Override + public boolean isDynamic(DataType from, DataType to) { + return super.containsKey(new TransformerKey(from, to)); } @Override http://git-wip-us.apache.org/repos/asf/camel/blob/2bca9391/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTransformerRegistry.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTransformerRegistry.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTransformerRegistry.java index a2611dd..ec58eef 100644 --- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTransformerRegistry.java +++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedTransformerRegistry.java @@ -27,6 +27,7 @@ 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.ManagedTransformerRegistryMBean; +import org.apache.camel.spi.DataType; import org.apache.camel.spi.ManagementStrategy; import org.apache.camel.spi.Transformer; import org.apache.camel.spi.TransformerRegistry; @@ -83,11 +84,15 @@ public class ManagedTransformerRegistry extends ManagedService implements Manage Collection<Transformer> transformers = transformerRegistry.values(); for (Transformer transformer : transformers) { CompositeType ct = CamelOpenMBeanTypes.listTransformersCompositeType(); - String transformerString = transformer.toString(); - boolean fromStatic = transformerRegistry.isStatic(transformerString); - boolean fromDynamic = transformerRegistry.isDynamic(transformerString); + String scheme = transformer.getModel(); + DataType from = transformer.getFrom(); + DataType to = transformer.getTo(); + String desc = transformer.toString(); + boolean fromStatic = scheme != null ? transformerRegistry.isStatic(scheme) : transformerRegistry.isStatic(from, to); + boolean fromDynamic = scheme != null ? transformerRegistry.isDynamic(scheme) : transformerRegistry.isDynamic(from, to); - CompositeData data = new CompositeDataSupport(ct, new String[]{"string", "static", "dynamic"}, new Object[]{transformerString, fromStatic, fromDynamic}); + CompositeData data = new CompositeDataSupport(ct, new String[]{"scheme", "from", "to", "static", "dynamic", "description"}, + new Object[]{scheme, from.toString(), to.toString(), fromStatic, fromDynamic, desc}); answer.put(data); } return answer; http://git-wip-us.apache.org/repos/asf/camel/blob/2bca9391/camel-core/src/main/java/org/apache/camel/spi/TransformerRegistry.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/spi/TransformerRegistry.java b/camel-core/src/main/java/org/apache/camel/spi/TransformerRegistry.java index 2ec1be6..85acd1c 100644 --- a/camel-core/src/main/java/org/apache/camel/spi/TransformerRegistry.java +++ b/camel-core/src/main/java/org/apache/camel/spi/TransformerRegistry.java @@ -62,18 +62,36 @@ public interface TransformerRegistry<K> extends Map<K, Transformer>, StaticServi /** * Whether the given transformer is stored in the static cache * - * @param key the transformer key + * @param scheme the scheme supported by this transformer * @return <tt>true</tt> if in static cache, <tt>false</tt> if not */ - boolean isStatic(String key); + boolean isStatic(String scheme); + + /** + * Whether the given transformer is stored in the static cache + * + * @param from 'from' data type + * @param to 'to' data type + * @return <tt>true</tt> if in static cache, <tt>false</tt> if not + */ + boolean isStatic(DataType from, DataType to); + + /** + * Whether the given transformer is stored in the dynamic cache + * + * @param scheme the scheme supported by this transformer + * @return <tt>true</tt> if in dynamic cache, <tt>false</tt> if not + */ + boolean isDynamic(String scheme); /** * Whether the given transformer is stored in the dynamic cache * - * @param key the transformer key + * @param from 'from' data type + * @param to 'to' data type * @return <tt>true</tt> if in dynamic cache, <tt>false</tt> if not */ - boolean isDynamic(String key); + boolean isDynamic(DataType from, DataType to); /** * Cleanup the cache (purging stale entries) http://git-wip-us.apache.org/repos/asf/camel/blob/2bca9391/camel-core/src/test/java/org/apache/camel/management/ManagedTransformerRegistryTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedTransformerRegistryTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedTransformerRegistryTest.java index 2960cb1..37754df 100644 --- a/camel-core/src/test/java/org/apache/camel/management/ManagedTransformerRegistryTest.java +++ b/camel-core/src/test/java/org/apache/camel/management/ManagedTransformerRegistryTest.java @@ -17,18 +17,30 @@ package org.apache.camel.management; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Set; import javax.management.MBeanServer; import javax.management.ObjectName; +import javax.management.openmbean.CompositeData; import javax.management.openmbean.TabularData; +import org.apache.camel.Message; import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.model.dataformat.StringDataFormat; +import org.apache.camel.model.transformer.CustomTransformerDefinition; +import org.apache.camel.model.transformer.DataFormatTransformerDefinition; +import org.apache.camel.model.transformer.EndpointTransformerDefinition; +import org.apache.camel.spi.DataType; +import org.apache.camel.spi.Transformer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @version */ public class ManagedTransformerRegistryTest extends ManagementTestSupport { + private static final Logger LOG = LoggerFactory.getLogger(ManagedTransformerRegistryTest.class); public void testManageTransformerRegistry() throws Exception { // JMX tests dont work well on AIX CI servers (hangs them) @@ -60,20 +72,46 @@ public class ManagedTransformerRegistryTest extends ManagementTestSupport { assertEquals(1000, max.intValue()); Integer current = (Integer) mbeanServer.getAttribute(on, "Size"); - assertEquals(0, current.intValue()); + assertEquals(3, current.intValue()); current = (Integer) mbeanServer.getAttribute(on, "StaticSize"); assertEquals(0, current.intValue()); current = (Integer) mbeanServer.getAttribute(on, "DynamicSize"); - assertEquals(0, current.intValue()); + assertEquals(3, current.intValue()); String source = (String) mbeanServer.getAttribute(on, "Source"); assertTrue(source.startsWith("TransformerRegistry")); assertTrue(source.endsWith("capacity: 1000")); + TabularData data = (TabularData) mbeanServer.invoke(on, "listTransformers", null, null); - assertEquals(0, data.size()); + for (Object row : data.values()) { + CompositeData composite = (CompositeData)row; + String scheme = (String)composite.get("scheme"); + String from = (String)composite.get("from"); + String to = (String)composite.get("to"); + String description = (String)composite.get("description"); + boolean isStatic = (boolean)composite.get("static"); + boolean isDynamic = (boolean)composite.get("dynamic"); + LOG.info("[{}][{}][{}][{}][{}][{}]", scheme, from, to, isStatic, isDynamic, description); + if (description.startsWith("ProcessorTransformer")) { + assertEquals(null, scheme); + assertEquals("xml:foo", from); + assertEquals("json:bar", to); + } else if (description.startsWith("DataFormatTransformer")) { + assertEquals(null, scheme); + assertEquals("java:" + ManagedTransformerRegistryTest.class.getName(), from); + assertEquals("xml:test", to); + } else if (description.startsWith("MyTransformer")) { + assertEquals("custom", scheme); + assertEquals("null:null", from); + assertEquals("null:null", to); + } else { + fail("Unexpected transformer:" + description); + } + } + assertEquals(3, data.size()); } @Override @@ -82,8 +120,32 @@ public class ManagedTransformerRegistryTest extends ManagementTestSupport { @Override public void configure() throws Exception { from("direct:start").to("mock:result"); + + EndpointTransformerDefinition etd = new EndpointTransformerDefinition(); + etd.setFrom("xml:foo"); + etd.setTo("json:bar"); + etd.setUri("direct:transformer"); + context.getTransformers().add(etd); + context.resolveTransformer(new DataType("xml:foo"), new DataType("json:bar")); + DataFormatTransformerDefinition dftd = new DataFormatTransformerDefinition(); + dftd.setFrom(ManagedTransformerRegistryTest.class); + dftd.setTo("xml:test"); + dftd.setDataFormatType(new StringDataFormat()); + context.getTransformers().add(dftd); + context.resolveTransformer(new DataType(ManagedTransformerRegistryTest.class), new DataType("xml:test")); + CustomTransformerDefinition ctd = new CustomTransformerDefinition(); + ctd.setScheme("custom"); + ctd.setType(MyTransformer.class.getName()); + context.getTransformers().add(ctd); + context.resolveTransformer("custom"); } }; } + public static class MyTransformer extends Transformer { + @Override + public void transform(Message message, DataType from, DataType to) throws Exception { + return; + } + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/2bca9391/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java ---------------------------------------------------------------------- diff --git a/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java b/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java index c336d8c..e342840 100644 --- a/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java +++ b/platforms/commands/commands-jolokia/src/main/java/org/apache/camel/commands/jolokia/DefaultJolokiaCamelController.java @@ -781,9 +781,12 @@ public class DefaultJolokiaCamelController extends AbstractCamelController imple JSONObject service = (JSONObject) data2.values().iterator().next(); Map<String, String> row = new LinkedHashMap<String, String>(); - row.put("string", asString(service.get("string"))); + row.put("scheme", asString(service.get("scheme"))); + row.put("from", asString(service.get("from"))); + row.put("to", asString(service.get("to"))); row.put("static", asString(service.get("static"))); row.put("dynamic", asString(service.get("dynamic"))); + row.put("description", asString(service.get("description"))); answer.add(row); } } @@ -793,9 +796,24 @@ public class DefaultJolokiaCamelController extends AbstractCamelController imple Collections.sort(answer, new Comparator<Map<String, String>>() { @Override public int compare(Map<String, String> service1, Map<String, String> service2) { - String url1 = service1.get("string"); - String url2 = service2.get("string"); - return url1.compareTo(url2); + String scheme1 = service1.get("scheme"); + String scheme2 = service2.get("scheme"); + if (scheme1 != null && scheme2 != null) { + return scheme1.compareTo(scheme2); + } else if (scheme1 != null) { + return -1; + } else if (scheme2 != null) { + return 1; + } else { + String from1 = service1.get("from"); + String from2 = service2.get("from"); + if (from1.equals(from2)) { + String to1 = service1.get("to"); + String to2 = service2.get("to"); + return to1.compareTo(to2); + } + return from1.compareTo(from2); + } } }); }