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