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 <[email protected]> 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
