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 2014/12/18 21:28:09 UTC

[1/5] camel git commit: CAMEL-8113: Optimize type converter registry.

Repository: camel
Updated Branches:
  refs/heads/master 628493645 -> 7f5301b75


CAMEL-8113: Optimize 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/aa2339db
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/aa2339db
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/aa2339db

Branch: refs/heads/master
Commit: aa2339dba993a70faed042e54264c3bc58962a06
Parents: 6284936
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 18 15:22:49 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Dec 18 21:27:56 2014 +0100

----------------------------------------------------------------------
 .../impl/converter/BaseTypeConverterRegistry.java      | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/aa2339db/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 962c415..8c46a9d 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
@@ -266,7 +266,7 @@ public abstract class BaseTypeConverterRegistry extends ServiceSupport implement
         }
 
         // try to find a suitable type converter
-        TypeConverter converter = getOrFindTypeConverter(type, value);
+        TypeConverter converter = getOrFindTypeConverter(key);
         if (converter != null) {
             log.trace("Using converter: {} to convert {}", converter, key);
             Object rc;
@@ -287,7 +287,7 @@ public abstract class BaseTypeConverterRegistry extends ServiceSupport implement
             Class<?> primitiveType = ObjectHelper.convertPrimitiveTypeToWrapperType(type);
             if (primitiveType != type) {
                 Class<?> fromType = value.getClass();
-                TypeConverter tc = getOrFindTypeConverter(primitiveType, value);
+                TypeConverter tc = getOrFindTypeConverter(new TypeMapping(primitiveType, fromType));
                 if (tc != null) {
                     // add the type as a known type converter as we can convert from primitive to object converter
                     addTypeConverter(type, fromType, tc);
@@ -436,16 +436,11 @@ public abstract class BaseTypeConverterRegistry extends ServiceSupport implement
         return typeMappings;
     }
 
-    protected <T> TypeConverter getOrFindTypeConverter(Class<?> toType, Object value) {
-        Class<?> fromType = null;
-        if (value != null) {
-            fromType = value.getClass();
-        }
-        TypeMapping key = new TypeMapping(toType, fromType);
+    protected <T> TypeConverter getOrFindTypeConverter(TypeMapping key) {
         TypeConverter converter = typeMappings.get(key);
         if (converter == null) {
             // converter not found, try to lookup then
-            converter = lookup(toType, fromType);
+            converter = lookup(key.getToType(), key.getFromType());
             if (converter != null) {
                 typeMappings.putIfAbsent(key, converter);
             }


[2/5] camel git commit: CAMEL-8113: Optimize type converter registry.

Posted by da...@apache.org.
CAMEL-8113: Optimize 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/5cfa913c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5cfa913c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5cfa913c

Branch: refs/heads/master
Commit: 5cfa913c265c7b4b3aaa5d08b7ee7f531071671f
Parents: 9cd39ab
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 18 16:28:11 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Dec 18 21:27:57 2014 +0100

----------------------------------------------------------------------
 .../apache/camel/builder/ExpressionBuilder.java | 11 ++-
 .../apache/camel/component/bean/MethodInfo.java |  9 ++-
 .../camel/language/bean/BeanExpression.java     |  7 +-
 .../apache/camel/support/ExpressionAdapter.java |  4 ++
 .../processor/TransformMethodCallTest.java      | 48 -------------
 ...peConverterRegistryStatsPerformanceTest.java | 76 ++++++++++++++++++++
 6 files changed, 101 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/5cfa913c/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
index 20f00b9..91c226c 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
@@ -1001,9 +1001,14 @@ public final class ExpressionBuilder {
                     }
 
                     // if its a bean invocation then if it has no arguments then it should be threaded as null body allowed
-                    BeanInvocation bi = exchange.getIn().getBody(BeanInvocation.class);
-                    if (bi != null && (bi.getArgs() == null || bi.getArgs().length == 0 || bi.getArgs()[0] == null)) {
-                        return null;
+                    if (exchange.getIn().getBody() instanceof BeanInvocation) {
+                        // BeanInvocation would be stored directly as the message body
+                        // do not force any type conversion attempts as it would just be unnecessary and cost a bit performance
+                        // so a regular instanceof check is sufficient
+                        BeanInvocation bi = (BeanInvocation) exchange.getIn().getBody();
+                        if (bi.getArgs() == null || bi.getArgs().length == 0 || bi.getArgs()[0] == null) {
+                            return null;
+                        }
                     }
                 }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/5cfa913c/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java b/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
index 9236cd0..aaf3cf0 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
@@ -594,9 +594,14 @@ public class MethodInfo {
                 // use object first to avoid type conversion so we know if there is a value or not
                 Object result = expression.evaluate(exchange, Object.class);
                 if (result != null) {
-                    // we got a value now try to convert it to the expected type
                     try {
-                        answer = exchange.getContext().getTypeConverter().mandatoryConvertTo(parameterType, result);
+                        if (parameterType.isInstance(result)) {
+                            // optimize if the value is already the same type
+                            answer = result;
+                        } else {
+                            // we got a value now try to convert it to the expected type
+                            answer = exchange.getContext().getTypeConverter().mandatoryConvertTo(parameterType, result);
+                        }
                         if (LOG.isTraceEnabled()) {
                             LOG.trace("Parameter #{} evaluated as: {} type: ", new Object[]{index, answer, ObjectHelper.type(answer)});
                         }

http://git-wip-us.apache.org/repos/asf/camel/blob/5cfa913c/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java b/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java
index 3cbc2fa..f5cc981 100644
--- a/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java
+++ b/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java
@@ -130,7 +130,12 @@ public class BeanExpression implements Expression, Predicate {
 
     public <T> T evaluate(Exchange exchange, Class<T> type) {
         Object result = evaluate(exchange);
-        return exchange.getContext().getTypeConverter().convertTo(type, exchange, result);
+        if (Object.class == type) {
+            // do not use type converter if type is Object (optimize)
+            return (T) result;
+        } else {
+            return exchange.getContext().getTypeConverter().convertTo(type, exchange, result);
+        }
     }
 
     public boolean matches(Exchange exchange) {

http://git-wip-us.apache.org/repos/asf/camel/blob/5cfa913c/camel-core/src/main/java/org/apache/camel/support/ExpressionAdapter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/support/ExpressionAdapter.java b/camel-core/src/main/java/org/apache/camel/support/ExpressionAdapter.java
index d8e43a9..3344eab 100644
--- a/camel-core/src/main/java/org/apache/camel/support/ExpressionAdapter.java
+++ b/camel-core/src/main/java/org/apache/camel/support/ExpressionAdapter.java
@@ -34,6 +34,10 @@ public abstract class ExpressionAdapter extends ExpressionSupport {
 
     public <T> T evaluate(Exchange exchange, Class<T> type) {
         Object value = evaluate(exchange);
+        if (Object.class == type) {
+            // do not use type converter if type is Object (optimize)
+            return (T) value;
+        }
         return exchange.getContext().getTypeConverter().convertTo(type, exchange, value);
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/5cfa913c/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java b/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java
deleted file mode 100644
index 6144e3c..0000000
--- a/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java
+++ /dev/null
@@ -1,48 +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.processor;
-
-import org.apache.camel.ContextTestSupport;
-import org.apache.camel.builder.RouteBuilder;
-
-/**
- * @version 
- */
-public class TransformMethodCallTest extends ContextTestSupport {
-
-    public void testTransform() throws Exception {
-        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
-
-        template.sendBody("direct:start", "World");
-
-        assertMockEndpointsSatisfied();
-    }
-
-    protected RouteBuilder createRouteBuilder() {
-        return new RouteBuilder() {
-            public void configure() {
-                from("direct:start")
-                    .transform().method(TransformMethodCallTest.class, "transformMe")
-                        .to("mock:result");
-            }
-        };
-    }
-
-    public String transformMe(String in) {
-        return "Hello " + in;
-    }
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/5cfa913c/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java b/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java
new file mode 100644
index 0000000..077f0f2
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java
@@ -0,0 +1,76 @@
+/**
+ * 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.processor;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version 
+ */
+public class TypeConverterRegistryStatsPerformanceTest extends ContextTestSupport {
+
+    private int size = 1000;
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+        context.setTypeConverterStatisticsEnabled(true);
+        return context;
+    }
+
+    public void testTransform() throws Exception {
+        long attempt = context.getTypeConverterRegistry().getStatistics().getAttemptCounter();
+        long failed = context.getTypeConverterRegistry().getStatistics().getFailedCounter();
+        long hit = context.getTypeConverterRegistry().getStatistics().getHitCounter();
+        long miss = context.getTypeConverterRegistry().getStatistics().getMissCounter();
+
+        getMockEndpoint("mock:result").expectedMessageCount(size);
+
+        for (int i = 0; i < size; i++) {
+            template.sendBody("direct:start", "World");
+        }
+
+        assertMockEndpointsSatisfied();
+
+        long attempt2 = context.getTypeConverterRegistry().getStatistics().getAttemptCounter();
+        long failed2 = context.getTypeConverterRegistry().getStatistics().getFailedCounter();
+        long hit2 = context.getTypeConverterRegistry().getStatistics().getHitCounter();
+        long miss2 = context.getTypeConverterRegistry().getStatistics().getMissCounter();
+
+        log.info("Attempt: before={}, after={}, delta={}", new Object[]{attempt, attempt2, attempt2 - attempt});
+        log.info("Failed: before={}, after={}, delta={}", new Object[]{failed, failed2, failed2 - failed});
+        log.info("Hit: before={}, after={}, delta={}", new Object[]{hit, hit2, hit2 - hit});
+        log.info("Miss: before={}, after={}, delta={}", new Object[]{miss, miss2, miss2 - miss});
+    }
+
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            public void configure() {
+                from("direct:start")
+                    .transform().method(TypeConverterRegistryStatsPerformanceTest.class, "transformMe")
+//                    .bean(TypeConverterRegistryStatsPerformanceTest.class, "transformMe")
+                        .to("mock:result");
+            }
+        };
+    }
+
+    public String transformMe(String in) {
+        return "Hello " + in;
+    }
+}


[3/5] camel git commit: CAMEL-8113: Optimize type converter registry.

Posted by da...@apache.org.
CAMEL-8113: Optimize 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/a707e51c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a707e51c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a707e51c

Branch: refs/heads/master
Commit: a707e51ca5e29ed4396aa2e7bfc69fa604bc7614
Parents: 5cfa913
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 18 16:54:33 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Dec 18 21:27:57 2014 +0100

----------------------------------------------------------------------
 .../java/org/apache/camel/component/file/FileOperations.java  | 2 +-
 .../src/main/java/org/apache/camel/util/MessageHelper.java    | 7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/a707e51c/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java b/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
index 7851cfc..5bf82bb 100644
--- a/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
+++ b/camel-core/src/main/java/org/apache/camel/component/file/FileOperations.java
@@ -259,7 +259,7 @@ public class FileOperations implements GenericFileOperations<File> {
 
             if (charset != null) {
                 // charset configured so we must use a reader so we can write with encoding
-                Reader in = exchange.getIn().getBody(Reader.class);
+                Reader in = exchange.getContext().getTypeConverter().tryConvertTo(Reader.class, exchange, exchange.getIn().getBody());
                 if (in == null) {
                     // okay no direct reader conversion, so use an input stream (which a lot can be converted as)
                     InputStream is = exchange.getIn().getMandatoryBody(InputStream.class);

http://git-wip-us.apache.org/repos/asf/camel/blob/a707e51c/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java b/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
index 879fcbf..f0cae78 100644
--- a/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/MessageHelper.java
@@ -67,6 +67,13 @@ public final class MessageHelper {
             return null;
         }
 
+        // optimize if the body is a String type already
+        Object body = message.getBody();
+        if (body instanceof String) {
+            return (String) body;
+        }
+
+        // we need to favor using stream cache so the body can be re-read later
         StreamCache newBody = message.getBody(StreamCache.class);
         if (newBody != null) {
             message.setBody(newBody);


[4/5] camel git commit: CAMEL-8113: Optimize type converter registry.

Posted by da...@apache.org.
CAMEL-8113: Optimize 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/7f5301b7
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7f5301b7
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7f5301b7

Branch: refs/heads/master
Commit: 7f5301b75bc30acfe7c37d12225f385b2a2e9c3b
Parents: a707e51
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 18 17:12:40 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Dec 18 21:27:57 2014 +0100

----------------------------------------------------------------------
 .../apache/camel/component/bean/BeanHolder.java   |  7 +++++++
 .../camel/component/bean/BeanProcessor.java       | 18 +++++++++++++-----
 .../camel/component/bean/ConstantBeanHolder.java  | 12 +++++++++---
 .../component/bean/ConstantTypeBeanHolder.java    |  4 ++++
 .../apache/camel/component/bean/RegistryBean.java |  4 ++++
 ...TypeConverterRegistryStatsPerformanceTest.java |  8 ++++++--
 6 files changed, 43 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/7f5301b7/camel-core/src/main/java/org/apache/camel/component/bean/BeanHolder.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/BeanHolder.java b/camel-core/src/main/java/org/apache/camel/component/bean/BeanHolder.java
index 7f26df3..5cb9dd4 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/BeanHolder.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/BeanHolder.java
@@ -41,6 +41,13 @@ public interface BeanHolder {
     Processor getProcessor();
 
     /**
+     * Whether a {@link Processor} is supported by this bean holder.
+     *
+     * @return <tt>true</tt> if the holder can supporting using a processor, <tt>false</tt> otherwise
+     */
+    boolean supportProcessor();
+
+    /**
      * Gets bean info for the bean.
      */
     BeanInfo getBeanInfo();

http://git-wip-us.apache.org/repos/asf/camel/blob/7f5301b7/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java b/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
index 055ebfb..bf8ddbe 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
@@ -37,6 +37,7 @@ import org.slf4j.LoggerFactory;
 public class BeanProcessor extends ServiceSupport implements AsyncProcessor {
     private static final Logger LOG = LoggerFactory.getLogger(BeanProcessor.class);
 
+    private Processor processor;
     private boolean multiParameterArray;
     private String method;
     private BeanHolder beanHolder;
@@ -90,8 +91,11 @@ public class BeanProcessor extends ServiceSupport implements AsyncProcessor {
         // do we have a custom adapter for this POJO to a Processor
         // but only do this if allowed
         if (allowProcessor(explicitMethodName, beanInfo)) {
-            // so if there is a custom type converter for the bean to processor
-            Processor processor = exchange.getContext().getTypeConverter().tryConvertTo(Processor.class, exchange, bean);
+            Processor processor = getProcessor();
+            if (processor == null) {
+                // so if there is a custom type converter for the bean to processor
+                processor = exchange.getContext().getTypeConverter().convertTo(Processor.class, exchange, bean);
+            }
             if (processor != null) {
                 LOG.trace("Using a custom adapter as bean invocation: {}", processor);
                 try {
@@ -168,7 +172,7 @@ public class BeanProcessor extends ServiceSupport implements AsyncProcessor {
     }
 
     protected Processor getProcessor() {
-        return beanHolder.getProcessor();
+        return processor;
     }
 
     public Object getBean() {
@@ -214,11 +218,15 @@ public class BeanProcessor extends ServiceSupport implements AsyncProcessor {
     // Implementation methods
     //-------------------------------------------------------------------------
     protected void doStart() throws Exception {
-        ServiceHelper.startService(getProcessor());
+        // optimize to only get (create) a processor if really needed
+        if (beanHolder.supportProcessor() && allowProcessor(method, beanHolder.getBeanInfo())) {
+            processor = beanHolder.getProcessor();
+            ServiceHelper.startService(processor);
+        }
     }
 
     protected void doStop() throws Exception {
-        ServiceHelper.stopService(getProcessor());
+        ServiceHelper.stopService(processor);
     }
 
     private boolean allowProcessor(String explicitMethodName, BeanInfo info) {

http://git-wip-us.apache.org/repos/asf/camel/blob/7f5301b7/camel-core/src/main/java/org/apache/camel/component/bean/ConstantBeanHolder.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/ConstantBeanHolder.java b/camel-core/src/main/java/org/apache/camel/component/bean/ConstantBeanHolder.java
index 2cac840..d2cbe1c 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/ConstantBeanHolder.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/ConstantBeanHolder.java
@@ -29,7 +29,7 @@ import org.apache.camel.util.ObjectHelper;
 public class ConstantBeanHolder implements BeanHolder {
     private final Object bean;
     private final BeanInfo beanInfo;
-    private final Processor processor;
+    private Processor processor;
 
     public ConstantBeanHolder(Object bean, BeanInfo beanInfo) {
         ObjectHelper.notNull(bean, "bean");
@@ -37,7 +37,6 @@ public class ConstantBeanHolder implements BeanHolder {
 
         this.bean = bean;
         this.beanInfo = beanInfo;
-        this.processor = CamelContextHelper.convertTo(beanInfo.getCamelContext(), Processor.class, bean);
     }
 
     public ConstantBeanHolder(Object bean, CamelContext context) {
@@ -59,7 +58,14 @@ public class ConstantBeanHolder implements BeanHolder {
     }
 
     public Processor getProcessor() {
-        return processor;
+        if (this.processor == null) {
+            this.processor = CamelContextHelper.convertTo(beanInfo.getCamelContext(), Processor.class, bean);
+        }
+        return this.processor;
+    }
+
+    public boolean supportProcessor() {
+        return true;
     }
 
     public BeanInfo getBeanInfo() {

http://git-wip-us.apache.org/repos/asf/camel/blob/7f5301b7/camel-core/src/main/java/org/apache/camel/component/bean/ConstantTypeBeanHolder.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/ConstantTypeBeanHolder.java b/camel-core/src/main/java/org/apache/camel/component/bean/ConstantTypeBeanHolder.java
index b0b0694..8c9dc55 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/ConstantTypeBeanHolder.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/ConstantTypeBeanHolder.java
@@ -68,6 +68,10 @@ public class ConstantTypeBeanHolder implements BeanTypeHolder {
         return null;
     }
 
+    public boolean supportProcessor() {
+        return false;
+    }
+
     public BeanInfo getBeanInfo() {
         return beanInfo;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/7f5301b7/camel-core/src/main/java/org/apache/camel/component/bean/RegistryBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/bean/RegistryBean.java b/camel-core/src/main/java/org/apache/camel/component/bean/RegistryBean.java
index 76a2f81..5f645f9 100644
--- a/camel-core/src/main/java/org/apache/camel/component/bean/RegistryBean.java
+++ b/camel-core/src/main/java/org/apache/camel/component/bean/RegistryBean.java
@@ -93,6 +93,10 @@ public class RegistryBean implements BeanHolder {
         return null;
     }
 
+    public boolean supportProcessor() {
+        return false;
+    }
+
     public BeanInfo getBeanInfo() {
         if (beanInfo == null) {
             Object bean = getBean();

http://git-wip-us.apache.org/repos/asf/camel/blob/7f5301b7/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java b/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java
index 077f0f2..ab3d170 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/TypeConverterRegistryStatsPerformanceTest.java
@@ -64,8 +64,8 @@ public class TypeConverterRegistryStatsPerformanceTest extends ContextTestSuppor
             public void configure() {
                 from("direct:start")
                     .transform().method(TypeConverterRegistryStatsPerformanceTest.class, "transformMe")
-//                    .bean(TypeConverterRegistryStatsPerformanceTest.class, "transformMe")
-                        .to("mock:result");
+                    .bean(TypeConverterRegistryStatsPerformanceTest.class, "transformMeAlso")
+                    .to("mock:result");
             }
         };
     }
@@ -73,4 +73,8 @@ public class TypeConverterRegistryStatsPerformanceTest extends ContextTestSuppor
     public String transformMe(String in) {
         return "Hello " + in;
     }
+
+    public String transformMeAlso(String in) {
+        return "Bye " + in;
+    }
 }


[5/5] camel git commit: CAMEL-8113: added unit test

Posted by da...@apache.org.
CAMEL-8113: added unit test


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/9cd39ab9
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/9cd39ab9
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/9cd39ab9

Branch: refs/heads/master
Commit: 9cd39ab902309e630a41560cfe585deee2c99a2e
Parents: aa2339d
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Dec 18 15:47:01 2014 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Dec 18 21:27:57 2014 +0100

----------------------------------------------------------------------
 .../processor/TransformMethodCallTest.java      | 48 ++++++++++++++++++++
 1 file changed, 48 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/9cd39ab9/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java b/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java
new file mode 100644
index 0000000..6144e3c
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/processor/TransformMethodCallTest.java
@@ -0,0 +1,48 @@
+/**
+ * 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.processor;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version 
+ */
+public class TransformMethodCallTest extends ContextTestSupport {
+
+    public void testTransform() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+
+        template.sendBody("direct:start", "World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            public void configure() {
+                from("direct:start")
+                    .transform().method(TransformMethodCallTest.class, "transformMe")
+                        .to("mock:result");
+            }
+        };
+    }
+
+    public String transformMe(String in) {
+        return "Hello " + in;
+    }
+}