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/16 19:35:34 UTC

[camel] 07/10: CAMEL-15697: camel-joor - Camel expression langauge using jOOR runtime java compiled.

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 287197ab27562ce7cc2f102900403e6cd32dbea1
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Oct 16 14:20:52 2020 +0200

    CAMEL-15697: camel-joor - Camel expression langauge using jOOR runtime java compiled.
---
 .../apache/camel/catalog/docs/joor-language.adoc   |  1 +
 .../apache/camel/language/joor/JoorExpression.java |  3 ++-
 .../apache/camel/language/joor/JoorLanguage.java   | 24 +++++++++++++++++++++-
 .../apache/camel/language/joor/JoorBeanTest.java   |  7 ++++---
 .../camel/language/joor/JoorPredicateTest.java     |  8 ++++----
 .../modules/languages/pages/joor-language.adoc     |  1 +
 6 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/joor-language.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/joor-language.adoc
index 573bfea..f1a75c8 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/joor-language.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/joor-language.adoc
@@ -43,6 +43,7 @@ The JOOR language allows the following variables to be used in the script
 | context | Context | The CamelContext
 | exchange | Exchange | The Camel Exchange
 | message | Message | The Camel message
+| body | Object | The message body
 |===
 
 === Sample
diff --git a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorExpression.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorExpression.java
index 026c8c8..e172991 100644
--- a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorExpression.java
+++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorExpression.java
@@ -116,7 +116,8 @@ public class JoorExpression extends ExpressionAdapter {
     @Override
     public Object evaluate(Exchange exchange) {
         try {
-            Object out = compiled.call("evaluate", exchange.getContext(), exchange, exchange.getIn(), exchange.getIn().getBody()).get();
+            Object out = compiled
+                    .call("evaluate", exchange.getContext(), exchange, exchange.getIn(), exchange.getIn().getBody()).get();
             if (out != null && resultType != null) {
                 return exchange.getContext().getTypeConverter().convertTo(resultType, exchange, out);
             } else {
diff --git a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorLanguage.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorLanguage.java
index 8f9db80..1a45547 100644
--- a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorLanguage.java
+++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorLanguage.java
@@ -20,13 +20,19 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
+import org.apache.camel.StaticService;
 import org.apache.camel.spi.annotations.Language;
 import org.apache.camel.support.ExpressionToPredicateAdapter;
 import org.apache.camel.support.LanguageSupport;
+import org.apache.camel.util.StopWatch;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @Language("joor")
-public class JoorLanguage extends LanguageSupport {
+public class JoorLanguage extends LanguageSupport implements StaticService {
 
+    private static final Logger LOG = LoggerFactory.getLogger(JoorLanguage.class);
+    private long taken;
     private static final AtomicInteger COUNTER = new AtomicInteger();
 
     private Class<?> resultType;
@@ -58,7 +64,11 @@ public class JoorLanguage extends LanguageSupport {
         JoorExpression exp = new JoorExpression(nextFQN(), expression);
         exp.setResultType(resultType);
         exp.setSingleQuotes(singleQuotes);
+
+        StopWatch watch = new StopWatch();
         exp.init(getCamelContext());
+        taken += watch.taken();
+
         return exp;
     }
 
@@ -79,4 +89,16 @@ public class JoorLanguage extends LanguageSupport {
     static String nextFQN() {
         return "org.apache.camel.language.joor.compiled.JoorLanguage" + COUNTER.incrementAndGet();
     }
+
+    @Override
+    public void start() {
+        // noop
+    }
+
+    @Override
+    public void stop() {
+        if (COUNTER.get() > 0) {
+            LOG.info("jOOR language compiled {} expressions in total {} millis", COUNTER, taken);
+        }
+    }
 }
diff --git a/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorBeanTest.java b/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorBeanTest.java
index a669c31..b0b1dd9 100644
--- a/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorBeanTest.java
+++ b/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorBeanTest.java
@@ -29,15 +29,16 @@ public class JoorBeanTest extends CamelTestSupport {
             @Override
             public void configure() throws Exception {
                 from("direct:start")
-                    .transform().method(JoorBeanTest.class, "priority")
-                    .to("mock:result");
+                        .transform().method(JoorBeanTest.class, "priority")
+                        .to("mock:result");
             }
         };
     }
 
     @Test
     public void testBean() throws Exception {
-        getMockEndpoint("mock:result").expectedBodiesReceived("User tony is a high roller", "Regular user", "User scott is a high roller");
+        getMockEndpoint("mock:result").expectedBodiesReceived("User tony is a high roller", "Regular user",
+                "User scott is a high roller");
 
         template.sendBodyAndHeader("direct:start", 123, "user", "tony");
         template.sendBodyAndHeader("direct:start", 18, "user", "mickey");
diff --git a/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorPredicateTest.java b/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorPredicateTest.java
index 3e74a96..b1829a4 100644
--- a/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorPredicateTest.java
+++ b/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorPredicateTest.java
@@ -29,10 +29,10 @@ public class JoorPredicateTest extends CamelTestSupport {
             public void configure() throws Exception {
                 from("direct:start")
                         .choice()
-                            .when().joor("((int) body) / 2 > 10")
-                                .to("mock:high")
-                            .otherwise()
-                                .to("mock:low");
+                        .when().joor("((int) body) / 2 > 10")
+                        .to("mock:high")
+                        .otherwise()
+                        .to("mock:low");
             }
         };
     }
diff --git a/docs/components/modules/languages/pages/joor-language.adoc b/docs/components/modules/languages/pages/joor-language.adoc
index 4a98779..470482f 100644
--- a/docs/components/modules/languages/pages/joor-language.adoc
+++ b/docs/components/modules/languages/pages/joor-language.adoc
@@ -45,6 +45,7 @@ The JOOR language allows the following variables to be used in the script
 | context | Context | The CamelContext
 | exchange | Exchange | The Camel Exchange
 | message | Message | The Camel message
+| body | Object | The message body
 |===
 
 === Sample