Federico Mariani created CAMEL-24685:
----------------------------------------
Summary: camel-joor - an inline expression with preCompile=false
compiles on every evaluation
Key: CAMEL-24685
URL: https://issues.apache.org/jira/browse/CAMEL-24685
Project: Camel
Issue Type: Bug
Components: camel-joor
Affects Versions: 4.22.0
Reporter: Federico Mariani
{{JoorExpression.evaluate}} does
{code:java}
JoorMethod target = this.method;
if (target == null) {
target = compiler.compile(exchange.getContext(), text, singleQuotes);
}
{code}
and never stores {{target}}, so with {{preCompile=false}} every exchange runs
javac and defines a new class (and class loader). The default
{{preCompile=true}} is unaffected.
Note that {{preCompile=false}} with a {{resource:file:}} script is the
documented hot re-load mode ({{JoorPreCompileFalseTest}} rewrites the file
mid-test), so the recompilation must be kept for resource scripts. Proposed fix
(implemented, tested): compile inline scripts
({{!ScriptHelper.hasExternalScript(text)}}) once lazily into a volatile field,
keep recompiling resource scripts, and clarify the joor/java language docs. A
new test sends two messages through a {{preCompile=false}} inline expression
and asserts one compilation.
----
_Found during a benchmark review of camel-groovy and the other scripting
languages (camel-performance-tests branch camel-groovy-perf,
tests/camel-jmh/groovy-results, JMH 1.37, JDK 21, one M1 Pro laptop). A
candidate fix with tests exists on the local apache/camel branch
camel-perf-all-fixes; a PR follows._
_Claude Code on behalf of Croway_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)