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 2020/10/02 08:50:53 UTC

[camel] 13/14: CAMEL-15605: Languages should be singleton for better performance.

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

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

commit c15c30e30ee57146487de8c5c533786906e132fa
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Oct 2 10:49:00 2020 +0200

    CAMEL-15605: Languages should be singleton for better performance.
---
 .../org/apache/camel/builder/SimpleBuilder.java    | 19 +------------------
 .../language/JsonPathExpressionReifier.java        | 14 +++++++-------
 .../language/MethodCallExpressionReifier.java      |  6 +++---
 .../reifier/language/SimpleExpressionReifier.java  | 17 +++++++++++++----
 .../language/TokenizerExpressionReifier.java       | 22 ++++++++++------------
 .../language/XMLTokenizerExpressionReifier.java    | 12 +++++-------
 .../reifier/language/XPathExpressionReifier.java   | 14 +++++++-------
 .../reifier/language/XQueryExpressionReifier.java  |  4 ++--
 .../org/apache/camel/support/LanguageSupport.java  |  4 ++++
 .../language/xtokenizer/XMLTokenizeLanguage.java   |  8 +++++---
 10 files changed, 57 insertions(+), 63 deletions(-)

diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/SimpleBuilder.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/SimpleBuilder.java
index 9a46338..61a7c12 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/SimpleBuilder.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/SimpleBuilder.java
@@ -23,10 +23,8 @@ import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
 import org.apache.camel.spi.ExpressionResultTypeAware;
 import org.apache.camel.spi.Language;
-import org.apache.camel.spi.PropertyConfigurer;
 import org.apache.camel.support.PredicateToExpressionAdapter;
 import org.apache.camel.support.ScriptHelper;
-import org.apache.camel.support.component.PropertyConfigurerSupport;
 
 /**
  * Creates an {@link org.apache.camel.language.simple.Simple} language builder.
@@ -34,7 +32,7 @@ import org.apache.camel.support.component.PropertyConfigurerSupport;
  * This builder is available in the Java DSL from the {@link RouteBuilder} which means that using simple language for
  * {@link Expression}s or {@link Predicate}s is very easy with the help of this builder.
  */
-public class SimpleBuilder implements Predicate, Expression, ExpressionResultTypeAware, PropertyConfigurer {
+public class SimpleBuilder implements Predicate, Expression, ExpressionResultTypeAware {
 
     private final String text;
     private Class<?> resultType;
@@ -64,21 +62,6 @@ public class SimpleBuilder implements Predicate, Expression, ExpressionResultTyp
         return simple(String.format(formatText, values), resultType);
     }
 
-    @Override
-    public boolean configure(CamelContext camelContext, Object target, String name, Object value, boolean ignoreCase) {
-        if (target != this) {
-            throw new IllegalStateException("Can only configure our own instance !");
-        }
-        switch (ignoreCase ? name.toLowerCase() : name) {
-            case "resulttype":
-            case "resultType":
-                setResultType(PropertyConfigurerSupport.property(camelContext, Class.class, value));
-                return true;
-            default:
-                return false;
-        }
-    }
-
     public String getText() {
         return text;
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/JsonPathExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/JsonPathExpressionReifier.java
index b04303e..3b5dbf8 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/JsonPathExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/JsonPathExpressionReifier.java
@@ -47,14 +47,14 @@ public class JsonPathExpressionReifier extends ExpressionReifier<JsonPathExpress
 
     private Map<String, Object> createProperties(String exp) {
         Map<String, Object> properties = new HashMap<>(8);
-        properties.put("expression", exp);
+        properties.put("expression", parseString(exp));
         properties.put("resultType", definition.getResultType());
-        properties.put("suppressExceptions", definition.getSuppressExceptions());
-        properties.put("allowSimple", definition.getAllowSimple());
-        properties.put("allowEasyPredicate", definition.getAllowEasyPredicate());
-        properties.put("writeAsString", definition.getWriteAsString());
-        properties.put("headerName", definition.getHeaderName());
-        properties.put("option", definition.getOption());
+        properties.put("suppressExceptions", parseBoolean(definition.getSuppressExceptions()));
+        properties.put("allowSimple", parseBoolean(definition.getAllowSimple()));
+        properties.put("allowEasyPredicate", parseBoolean(definition.getAllowEasyPredicate()));
+        properties.put("writeAsString", parseBoolean(definition.getWriteAsString()));
+        properties.put("headerName", parseString(definition.getHeaderName()));
+        properties.put("option", parseString(definition.getOption()));
         return properties;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/MethodCallExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/MethodCallExpressionReifier.java
index e6c3b52..66e6ea5 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/MethodCallExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/MethodCallExpressionReifier.java
@@ -36,9 +36,9 @@ public class MethodCallExpressionReifier extends ExpressionReifier<MethodCallExp
     protected Map<String, Object> createProperties() {
         Map<String, Object> properties = new HashMap<>(4);
         properties.put("bean", definition.getInstance());
-        properties.put("beanType", or(definition.getBeanType(), definition.getBeanTypeName()));
-        properties.put("ref", definition.getRef());
-        properties.put("method", definition.getMethod());
+        properties.put("beanType", definition.getBeanType());
+        properties.put("ref", parseString(definition.getRef()));
+        properties.put("method", parseString(definition.getMethod()));
         return properties;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/SimpleExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/SimpleExpressionReifier.java
index 2bc0a3b..e14bf79 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/SimpleExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/SimpleExpressionReifier.java
@@ -67,10 +67,7 @@ public class SimpleExpressionReifier extends ExpressionReifier<SimpleExpression>
     protected SimpleBuilder createBuilder() {
         String exp = parseString(definition.getExpression());
         // should be true by default
-        boolean isTrim = true;
-        if (definition.getTrim() != null) {
-            isTrim = parseBoolean(definition.getTrim());
-        }
+        boolean isTrim = parseBoolean(definition.getTrim(), true);
         if (exp != null && isTrim) {
             exp = exp.trim();
         }
@@ -80,6 +77,18 @@ public class SimpleExpressionReifier extends ExpressionReifier<SimpleExpression>
     }
 
     @Override
+    protected Expression createExpression(Language language, String exp) {
+        definition.setExpression(exp);
+        return createBuilder();
+    }
+
+    @Override
+    protected Predicate createPredicate(Language language, String exp) {
+        definition.setExpression(exp);
+        return createBuilder();
+    }
+
+    @Override
     protected void configureLanguage(Language language) {
         if (definition.getResultType() == null && definition.getResultTypeName() != null) {
             Class<?> clazz;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/TokenizerExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/TokenizerExpressionReifier.java
index 02576d4..7cdaf26 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/TokenizerExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/TokenizerExpressionReifier.java
@@ -41,16 +41,16 @@ public class TokenizerExpressionReifier extends ExpressionReifier<TokenizerExpre
         if (token.startsWith("\\n")) {
             token = '\n' + token.substring(2);
         }
-        properties.put("token", token);
-        properties.put("endToken", definition.getEndToken());
-        properties.put("inheritNamespaceTagName", definition.getInheritNamespaceTagName());
-        properties.put("headerName", definition.getHeaderName());
-        properties.put("groupDelimiter", definition.getGroupDelimiter());
-        properties.put("regex", definition.getRegex());
-        properties.put("xml", definition.getXml());
-        properties.put("includeTokens", definition.getIncludeTokens());
-        properties.put("group", definition.getGroup());
-        properties.put("skipFirst", definition.getSkipFirst());
+        properties.put("token", parseString(token));
+        properties.put("endToken", parseString(definition.getEndToken()));
+        properties.put("inheritNamespaceTagName", parseString(definition.getInheritNamespaceTagName()));
+        properties.put("headerName", parseString(definition.getHeaderName()));
+        properties.put("groupDelimiter", parseString(definition.getGroupDelimiter()));
+        properties.put("regex", parseBoolean(definition.getRegex()));
+        properties.put("xml", parseBoolean(definition.getXml()));
+        properties.put("includeTokens", parseBoolean(definition.getIncludeTokens()));
+        properties.put("group", parseString(definition.getGroup()));
+        properties.put("skipFirst", parseBoolean(definition.getSkipFirst()));
         return properties;
     }
 
@@ -62,13 +62,11 @@ public class TokenizerExpressionReifier extends ExpressionReifier<TokenizerExpre
 
     @Override
     protected Expression createExpression(Language language, String exp) {
-        // method call does not use the string exp so its not in use
         return language.createExpression(createProperties());
     }
 
     @Override
     protected Predicate createPredicate(Language language, String exp) {
-        // method call does not use the string exp so its not in use
         return language.createPredicate(createProperties());
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XMLTokenizerExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XMLTokenizerExpressionReifier.java
index 331a075..71f4d59 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XMLTokenizerExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XMLTokenizerExpressionReifier.java
@@ -42,13 +42,11 @@ public class XMLTokenizerExpressionReifier extends ExpressionReifier<XMLTokenize
 
     @Override
     protected Expression createExpression(Language language, String exp) {
-        // method call does not use the string exp so its not in use
         return language.createExpression(createProperties());
     }
 
     @Override
     protected Predicate createPredicate(Language language, String exp) {
-        // method call does not use the string exp so its not in use
         return language.createPredicate(createProperties());
     }
 
@@ -70,11 +68,11 @@ public class XMLTokenizerExpressionReifier extends ExpressionReifier<XMLTokenize
     }
 
     protected Map<String, Object> createProperties() {
-        Map<String, Object> properties = new HashMap<>(3);
-        properties.put("headerName", definition.getHeaderName());
-        properties.put("mode", definition.getMode());
-        properties.put("group", definition.getGroup());
-        properties.put("path", definition.getExpression());
+        Map<String, Object> properties = new HashMap<>(4);
+        properties.put("headerName", parseString(definition.getHeaderName()));
+        properties.put("mode", parseString(definition.getMode()));
+        properties.put("group", parseInt(definition.getGroup()));
+        properties.put("path", parseString(definition.getExpression()));
         return properties;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java
index 4fb3b6f..70e0085 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java
@@ -66,8 +66,8 @@ public class XPathExpressionReifier extends ExpressionReifier<XPathExpression> {
     }
 
     protected Map<String, Object> createProperties(String expression) {
-        Map<String, Object> properties = new HashMap<>(9);
-        properties.put("expression", expression);
+        Map<String, Object> properties = new HashMap<>(10);
+        properties.put("expression", parseString(expression));
         properties.put("documentType", definition.getDocumentType());
         // resultType can either point to a QName or it can be a regular class that influence the qname
         // so we need this special logic to set resultQName and resultType accordingly
@@ -78,12 +78,12 @@ public class XPathExpressionReifier extends ExpressionReifier<XPathExpression> {
         } else {
             properties.put("resultType", definition.getResultType());
         }
-        properties.put("useSaxon", definition.getSaxon());
+        properties.put("useSaxon", parseBoolean(definition.getSaxon()));
         properties.put("xpathFactory", definition.getXPathFactory());
-        properties.put("objectModelUri", definition.getObjectModel());
-        properties.put("threadSafety", definition.getThreadSafety());
-        properties.put("logNamespaces", definition.getLogNamespaces());
-        properties.put("headerName", definition.getHeaderName());
+        properties.put("objectModelUri", parseString(definition.getObjectModel()));
+        properties.put("threadSafety", parseBoolean(definition.getThreadSafety()));
+        properties.put("logNamespaces", parseBoolean(definition.getLogNamespaces()));
+        properties.put("headerName", parseString(definition.getHeaderName()));
         return properties;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java
index 0996ce1..ea4e97a 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java
@@ -63,9 +63,9 @@ public class XQueryExpressionReifier extends ExpressionReifier<XQueryExpression>
 
     protected Map<String, Object> createProperties(String expression) {
         Map<String, Object> properties = new HashMap<>(3);
-        properties.put("expression", expression);
+        properties.put("expression", parseString(expression));
         properties.put("resultType", definition.getResultType());
-        properties.put("headerName", definition.getHeaderName());
+        properties.put("headerName", parseString(definition.getHeaderName()));
         return properties;
     }
 
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/LanguageSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/LanguageSupport.java
index 6bd6c12..4f0c60e 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/LanguageSupport.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/LanguageSupport.java
@@ -110,6 +110,10 @@ public abstract class LanguageSupport implements Language, IsSingleton, CamelCon
             value = defaultValue;
         }
 
+        if (value instanceof String) {
+            value = getCamelContext().resolvePropertyPlaceholders(value.toString());
+        }
+
         // if the type is not string based and the value is a bean reference, then we need to lookup
         // the bean from the registry
         if (value instanceof String && String.class != type) {
diff --git a/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java b/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
index 0cd0447..ed0f8f9 100644
--- a/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
+++ b/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenizeLanguage.java
@@ -41,8 +41,8 @@ public class XMLTokenizeLanguage extends LanguageSupport {
 
     private String headerName;
     private String path;
-    private char mode = 'i';
-    private int group = 1;
+    private char mode;
+    private int group;
     private Namespaces namespaces;
 
     public static Expression tokenize(String path) {
@@ -98,7 +98,9 @@ public class XMLTokenizeLanguage extends LanguageSupport {
     public Expression createExpression(Map<String, Object> properties) {
         XMLTokenizeLanguage answer = new XMLTokenizeLanguage();
         answer.setHeaderName(property(String.class, properties, "headerName", headerName));
-        answer.setMode(property(char.class, properties, "mode", mode));
+        if (properties.get("mode") != null) {
+            answer.setMode(property(char.class, properties, "mode", 'i'));
+        }
         answer.setGroup(property(int.class, properties, "group", group));
         String path = property(String.class, properties, "path", null);
         return answer.createExpression(path);