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 <claus.ib...@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);