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 2023/12/12 15:32:25 UTC
(camel) 05/07: CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch joor
in repository https://gitbox.apache.org/repos/asf/camel.git
commit e70aa0eff26409b8d2d1445900fcd899db5aeb99
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Dec 12 13:53:07 2023 +0100
CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl
---
.../apache/camel/language/joor/JoorScriptingCompiler.java | 5 ++++-
.../java/org/apache/camel/language/joor/MultiCompile.java | 5 +++--
.../camel/dsl/java/joor/JavaRoutesBuilderLoader.java | 15 ++++++++++++++-
3 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorScriptingCompiler.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorScriptingCompiler.java
index 6a625340174..81c0f2d555b 100644
--- a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorScriptingCompiler.java
+++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorScriptingCompiler.java
@@ -84,10 +84,13 @@ public class JoorScriptingCompiler extends ServiceSupport implements StaticServi
CamelContext context = getCamelContext();
if (context != null) {
// use existing class loader if available
- classLoader = (JavaJoorClassLoader) context.getClassResolver().getClassLoader("CamelJoorClassLoader");
+ classLoader = (JavaJoorClassLoader) context.getClassResolver().getClassLoader("JavaJoorClassLoader");
if (classLoader == null) {
classLoader = new JavaJoorClassLoader();
+ LOG.warn("Creating new JavaJoorClassLoader");
context.getClassResolver().addClassLoader(classLoader);
+ } else {
+ LOG.warn("Using existing JavaJoorClassLoader");
}
// use work dir for classloader as it writes compiled classes to disk
CompileStrategy cs = context.getCamelContextExtension().getContextPlugin(CompileStrategy.class);
diff --git a/components/camel-joor/src/main/java/org/apache/camel/language/joor/MultiCompile.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/MultiCompile.java
index 9ef05add484..1f880647838 100644
--- a/components/camel-joor/src/main/java/org/apache/camel/language/joor/MultiCompile.java
+++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/MultiCompile.java
@@ -90,13 +90,14 @@ public final class MultiCompile {
Lookup lookup = MethodHandles.lookup();
ClassLoader cl = unit.getClassLoader() != null ? unit.getClassLoader() : lookup.lookupClass().getClassLoader();
+ LOG.warn("Using classloader: {}", System.identityHashCode(cl));
unit.getInput().forEach((cn, code) -> {
try {
Class<?> clazz = cl.loadClass(cn);
result.addResult(cn, clazz, null);
- LOG.debug("Class already compiled: {}", cn);
+ LOG.warn("Class already compiled: {}", cn);
} catch (ClassNotFoundException ignore) {
- LOG.debug("Class must be compiled: {}", cn);
+ LOG.warn("Class must be compiled: {}", cn);
files.add(new CharSequenceJavaFileObject(cn, code));
}
});
diff --git a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java b/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java
index 2e428364d2f..32c5b1f4ca2 100644
--- a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java
+++ b/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java
@@ -18,7 +18,9 @@ package org.apache.camel.dsl.java.joor;
import java.io.FileNotFoundException;
import java.io.InputStream;
+import java.lang.invoke.MethodHandles;
import java.lang.reflect.Modifier;
+import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -34,6 +36,7 @@ import org.apache.camel.RuntimeCamelException;
import org.apache.camel.api.management.ManagedResource;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.dsl.support.ExtendedRouteBuilderLoaderSupport;
+import org.apache.camel.language.joor.CamelJoorClassLoader;
import org.apache.camel.language.joor.CompilationUnit;
import org.apache.camel.language.joor.JavaJoorClassLoader;
import org.apache.camel.language.joor.MultiCompile;
@@ -74,10 +77,13 @@ public class JavaRoutesBuilderLoader extends ExtendedRouteBuilderLoaderSupport {
CamelContext context = getCamelContext();
if (context != null) {
// use existing class loader if available
- classLoader = (JavaJoorClassLoader) context.getClassResolver().getClassLoader("CamelJoorClassLoader");
+ classLoader = (JavaJoorClassLoader) context.getClassResolver().getClassLoader("JavaJoorClassLoader");
if (classLoader == null) {
classLoader = new JavaJoorClassLoader();
+ LOG.warn("Creating new JavaJoorClassLoader");
context.getClassResolver().addClassLoader(classLoader);
+ } else {
+ LOG.warn("Using existing JavaJoorClassLoader");
}
// use work dir for classloader as it writes compiled classes to disk
CompileStrategy cs = context.getCamelContextExtension().getContextPlugin(CompileStrategy.class);
@@ -189,6 +195,13 @@ public class JavaRoutesBuilderLoader extends ExtendedRouteBuilderLoaderSupport {
}
}
+ // include classloader from Camel, so we can load any already compiled and loaded classes
+ ClassLoader parent = MethodHandles.lookup().lookupClass().getClassLoader();
+ if (parent instanceof URLClassLoader ucl) {
+ ClassLoader cl = new CamelJoorClassLoader(ucl, getCamelContext());
+ unit.withClassLoader(cl);
+ }
+
if (LOG.isDebugEnabled()) {
String names = String.join(", ", unit.getInput().keySet());
LOG.debug("Compiling: {}", names);