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:20 UTC

(camel) branch joor created (now 66cf76603e3)

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a change to branch joor
in repository https://gitbox.apache.org/repos/asf/camel.git


      at 66cf76603e3 CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl

This branch includes the following new commits:

     new 8fb024f1711 CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl
     new 68b8b9a9fc5 CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl
     new 218b32d1377 CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl
     new 7f804e6f1a9 CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl
     new e70aa0eff26 CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl
     new 9bfbe7ae57d CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl
     new 66cf76603e3 CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl

The 7 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(camel) 05/07: CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl

Posted by da...@apache.org.
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);


(camel) 01/07: CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl

Posted by da...@apache.org.
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 8fb024f1711c75c870e5673dfb149cc1125707d8
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Dec 12 11:54:58 2023 +0100

    CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl
---
 .../java/org/apache/camel/language}/joor/ByteArrayClassLoader.java  | 2 +-
 .../main/java/org/apache/camel/language}/joor/CompilationUnit.java  | 4 ++--
 .../java/org/apache/camel/language}/joor/JavaJoorClassLoader.java   | 2 +-
 .../java/org/apache/camel/language/joor/JoorScriptingCompiler.java  | 2 ++
 .../src/main/java/org/apache/camel/language}/joor/MultiCompile.java | 2 +-
 .../java/org/apache/camel/language}/joor/CompilationUnitTest.java   | 2 +-
 dsl/camel-java-joor-dsl/pom.xml                                     | 6 ++----
 .../org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java     | 3 +++
 8 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/ByteArrayClassLoader.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/ByteArrayClassLoader.java
similarity index 97%
rename from dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/ByteArrayClassLoader.java
rename to components/camel-joor/src/main/java/org/apache/camel/language/joor/ByteArrayClassLoader.java
index ed6f8d8914c..3e415342392 100644
--- a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/ByteArrayClassLoader.java
+++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/ByteArrayClassLoader.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.dsl.java.joor;
+package org.apache.camel.language.joor;
 
 import java.util.Map;
 
diff --git a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/CompilationUnit.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/CompilationUnit.java
similarity index 97%
rename from dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/CompilationUnit.java
rename to components/camel-joor/src/main/java/org/apache/camel/language/joor/CompilationUnit.java
index 3f802eafc50..5f3f677e559 100644
--- a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/CompilationUnit.java
+++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/CompilationUnit.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.dsl.java.joor;
+package org.apache.camel.language.joor;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -108,7 +108,7 @@ public class CompilationUnit {
         return this;
     }
 
-    Map<String, String> getInput() {
+    public Map<String, String> getInput() {
         return files;
     }
 
diff --git a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaJoorClassLoader.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JavaJoorClassLoader.java
similarity index 98%
rename from dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaJoorClassLoader.java
rename to components/camel-joor/src/main/java/org/apache/camel/language/joor/JavaJoorClassLoader.java
index c1fa8a50573..16ba5a91f1c 100644
--- a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaJoorClassLoader.java
+++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JavaJoorClassLoader.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.dsl.java.joor;
+package org.apache.camel.language.joor;
 
 import java.io.File;
 import java.io.FileOutputStream;
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 1be6bc8e29c..c41335ac9b7 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
@@ -41,6 +41,8 @@ import org.slf4j.LoggerFactory;
 
 public class JoorScriptingCompiler extends ServiceSupport implements StaticService {
 
+    // TODO: Use MultiCompile
+
     private static final Pattern BEAN_INJECTION_PATTERN = Pattern.compile("(#bean:)([A-Za-z0-9-_]*)");
 
     private static final Logger LOG = LoggerFactory.getLogger(JoorScriptingCompiler.class);
diff --git a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/MultiCompile.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/MultiCompile.java
similarity index 99%
rename from dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/MultiCompile.java
rename to components/camel-joor/src/main/java/org/apache/camel/language/joor/MultiCompile.java
index 24984f7ad82..7a5e07f387a 100644
--- a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/MultiCompile.java
+++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/MultiCompile.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.dsl.java.joor;
+package org.apache.camel.language.joor;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
diff --git a/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/CompilationUnitTest.java b/components/camel-joor/src/test/java/org/apache/camel/language/joor/CompilationUnitTest.java
similarity index 98%
rename from dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/CompilationUnitTest.java
rename to components/camel-joor/src/test/java/org/apache/camel/language/joor/CompilationUnitTest.java
index 5987cd13235..f1f3b73ab08 100644
--- a/dsl/camel-java-joor-dsl/src/test/java/org/apache/camel/dsl/java/joor/CompilationUnitTest.java
+++ b/components/camel-joor/src/test/java/org/apache/camel/language/joor/CompilationUnitTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.dsl.java.joor;
+package org.apache.camel.language.joor;
 
 import java.util.Set;
 
diff --git a/dsl/camel-java-joor-dsl/pom.xml b/dsl/camel-java-joor-dsl/pom.xml
index c73369265d3..2f7d750f220 100644
--- a/dsl/camel-java-joor-dsl/pom.xml
+++ b/dsl/camel-java-joor-dsl/pom.xml
@@ -49,11 +49,9 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-dsl-support</artifactId>
         </dependency>
-
         <dependency>
-            <groupId>org.jooq</groupId>
-            <artifactId>joor</artifactId>
-            <version>${joor-version}</version>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-joor</artifactId>
         </dependency>
 
         <dependency>
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 b3605946ff7..83188ac5e09 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
@@ -34,6 +34,9 @@ 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.CompilationUnit;
+import org.apache.camel.language.joor.JavaJoorClassLoader;
+import org.apache.camel.language.joor.MultiCompile;
 import org.apache.camel.spi.CompilePostProcessor;
 import org.apache.camel.spi.CompileStrategy;
 import org.apache.camel.spi.Resource;


(camel) 03/07: CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl

Posted by da...@apache.org.
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 218b32d137748ea6f0ac07058f9df3a5223e36f7
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Dec 12 12:06:08 2023 +0100

    CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl
---
 .../camel/language/joor/JoorScriptingCompiler.java | 24 ++++++++++++----------
 1 file changed, 13 insertions(+), 11 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 c41335ac9b7..b3bef416b69 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
@@ -34,15 +34,11 @@ import org.apache.camel.support.ScriptHelper;
 import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StopWatch;
-import org.joor.CompileOptions;
-import org.joor.Reflect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class JoorScriptingCompiler extends ServiceSupport implements StaticService {
 
-    // TODO: Use MultiCompile
-
     private static final Pattern BEAN_INJECTION_PATTERN = Pattern.compile("(#bean:)([A-Za-z0-9-_]*)");
 
     private static final Logger LOG = LoggerFactory.getLogger(JoorScriptingCompiler.class);
@@ -87,19 +83,25 @@ public class JoorScriptingCompiler extends ServiceSupport implements StaticServi
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Compiling code:\n\n{}\n", code);
             }
+            CompilationUnit unit = CompilationUnit.input();
+            unit.addClass(className, code);
+
             // include classloader from Camel, so we can load any already compiled and loaded classes
-            CompileOptions co = new CompileOptions();
             ClassLoader parent = MethodHandles.lookup().lookupClass().getClassLoader();
             if (parent instanceof URLClassLoader ucl) {
                 ClassLoader cl = new CamelJoorClassLoader(ucl, camelContext);
-                co = new CompileOptions();
-                co = co.classLoader(cl);
+                unit.withClassLoader(cl);
             }
             LOG.debug("Compiling: {}", className);
-            Reflect ref = Reflect.compile(className, code, co);
-            Class<?> clazz = ref.type();
-            LOG.debug("Compiled to Java class: {}", clazz);
-            answer = (JoorScriptingMethod) clazz.getConstructor(CamelContext.class).newInstance(camelContext);
+
+            CompilationUnit.Result result = MultiCompile.compileUnit(unit);
+            Class<?> clazz = result.getClass(className);
+            if (clazz != null) {
+                LOG.debug("Compiled to Java class: {}", clazz);
+                answer = (JoorScriptingMethod) clazz.getConstructor(CamelContext.class).newInstance(camelContext);
+            } else {
+                answer = null;
+            }
         } catch (Exception e) {
             throw new JoorCompilationException(className, code, e);
         }


(camel) 04/07: CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl

Posted by da...@apache.org.
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 7f804e6f1a9d01838f53b054cec0a67e74b0469b
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Dec 12 13:29:06 2023 +0100

    CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl
---
 .../camel/language/joor/CamelJoorClassLoader.java  | 23 +++++++++-----
 .../apache/camel/language/joor/JavaLanguage.java   |  8 +++--
 .../camel/language/joor/JoorScriptingCompiler.java | 36 ++++++++++++++++++++--
 .../java/org/apache/camel/spi/ClassResolver.java   |  8 +++++
 .../camel/impl/engine/DefaultClassResolver.java    | 12 ++++++++
 .../dsl/java/joor/JavaRoutesBuilderLoader.java     |  9 ++++--
 6 files changed, 83 insertions(+), 13 deletions(-)

diff --git a/components/camel-joor/src/main/java/org/apache/camel/language/joor/CamelJoorClassLoader.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/CamelJoorClassLoader.java
index 8cad0472c06..6a45a9c3b6c 100644
--- a/components/camel-joor/src/main/java/org/apache/camel/language/joor/CamelJoorClassLoader.java
+++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/CamelJoorClassLoader.java
@@ -66,18 +66,25 @@ public class CamelJoorClassLoader extends URLClassLoader {
 
     @Override
     protected Class<?> findClass(String name) throws ClassNotFoundException {
-        for (ClassLoader cl : camelContext.getClassResolver().getClassLoaders()) {
+        return doLoadClass(name);
+    }
+
+    @Override
+    public Class<?> loadClass(String name) throws ClassNotFoundException {
+        return doLoadClass(name);
+    }
+
+    public Class<?> doLoadClass(String name) throws ClassNotFoundException {
+        // first try CamelJoorClassLoader
+        ClassLoader joorClassLoader = camelContext.getClassResolver().getClassLoader("CamelJoorClassLoader");
+        if (joorClassLoader != null) {
             try {
-                return cl.loadClass(name);
+                return joorClassLoader.loadClass(name);
             } catch (ClassNotFoundException e) {
                 // ignore
             }
         }
-        return parent.loadClass(name);
-    }
-
-    @Override
-    public Class<?> loadClass(String name) throws ClassNotFoundException {
+        // then try all of them
         for (ClassLoader cl : camelContext.getClassResolver().getClassLoaders()) {
             try {
                 return cl.loadClass(name);
@@ -85,6 +92,8 @@ public class CamelJoorClassLoader extends URLClassLoader {
                 // ignore
             }
         }
+        // and then parent last
         return parent.loadClass(name);
     }
+
 }
diff --git a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JavaLanguage.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JavaLanguage.java
index faca700f6db..9dd7b5b3d88 100644
--- a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JavaLanguage.java
+++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JavaLanguage.java
@@ -21,6 +21,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
 import org.apache.camel.RuntimeCamelException;
@@ -144,16 +145,19 @@ public class JavaLanguage extends TypedLanguageSupport implements ScriptingLangu
     public void init() {
         // attempt to load optional configuration from classpath
         loadConfiguration();
+
+        CamelContextAware.trySetCamelContext(compiler, getCamelContext());
+        CamelContextAware.trySetCamelContext(scriptingCompiler, getCamelContext());
     }
 
     @Override
     public void start() {
-        ServiceHelper.startService(compiler);
+        ServiceHelper.startService(compiler, scriptingCompiler);
     }
 
     @Override
     public void stop() {
-        ServiceHelper.stopService(compiler);
+        ServiceHelper.stopService(compiler, scriptingCompiler);
     }
 
     private void loadConfiguration() {
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 b3bef416b69..6a625340174 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
@@ -28,7 +28,9 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.StaticService;
+import org.apache.camel.spi.CompileStrategy;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.ScriptHelper;
 import org.apache.camel.support.service.ServiceSupport;
@@ -37,17 +39,29 @@ import org.apache.camel.util.StopWatch;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class JoorScriptingCompiler extends ServiceSupport implements StaticService {
+public class JoorScriptingCompiler extends ServiceSupport implements StaticService, CamelContextAware {
 
     private static final Pattern BEAN_INJECTION_PATTERN = Pattern.compile("(#bean:)([A-Za-z0-9-_]*)");
 
     private static final Logger LOG = LoggerFactory.getLogger(JoorScriptingCompiler.class);
     private static final AtomicInteger UUID = new AtomicInteger();
+    private CamelContext camelContext;
+    private JavaJoorClassLoader classLoader;
     private Set<String> imports = new TreeSet<>();
     private Map<String, String> aliases;
     private int counter;
     private long taken;
 
+    @Override
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    @Override
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
+
     public Set<String> getImports() {
         return imports;
     }
@@ -64,9 +78,27 @@ public class JoorScriptingCompiler extends ServiceSupport implements StaticServi
         this.aliases = aliases;
     }
 
+    @Override
+    protected void doBuild() throws Exception {
+        // register jOOR classloader to camel, so we are able to load classes we have compiled
+        CamelContext context = getCamelContext();
+        if (context != null) {
+            // use existing class loader if available
+            classLoader = (JavaJoorClassLoader) context.getClassResolver().getClassLoader("CamelJoorClassLoader");
+            if (classLoader == null) {
+                classLoader = new JavaJoorClassLoader();
+                context.getClassResolver().addClassLoader(classLoader);
+            }
+            // use work dir for classloader as it writes compiled classes to disk
+            CompileStrategy cs = context.getCamelContextExtension().getContextPlugin(CompileStrategy.class);
+            if (cs != null && cs.getWorkDir() != null) {
+                classLoader.setCompileDirectory(cs.getWorkDir());
+            }
+        }
+    }
+
     @Override
     protected void doStop() throws Exception {
-        super.doStop();
         if (counter > 0) {
             LOG.info("jOOR scripting language compiled {} scripts in {} millis", counter, taken);
         }
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/ClassResolver.java b/core/camel-api/src/main/java/org/apache/camel/spi/ClassResolver.java
index 2bd504f96b7..6eefdf5a808 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/ClassResolver.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/ClassResolver.java
@@ -39,6 +39,14 @@ public interface ClassResolver {
      */
     Set<ClassLoader> getClassLoaders();
 
+    /**
+     * Gets a custom class loader by its name
+     *
+     * @param name the name of the custom classloader
+     * @return the class loader or <tt>null</tt> if not found
+     */
+    ClassLoader getClassLoader(String name);
+
     /**
      * Resolves the given class by its name
      *
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultClassResolver.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultClassResolver.java
index a047df98724..385294c5d23 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultClassResolver.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultClassResolver.java
@@ -71,6 +71,18 @@ public class DefaultClassResolver implements ClassResolver, CamelContextAware {
         return Collections.unmodifiableSet(classLoaders);
     }
 
+    @Override
+    public ClassLoader getClassLoader(String name) {
+        if (classLoaders != null) {
+            for (ClassLoader cl : classLoaders) {
+                if (name.equals(cl.getName())) {
+                    return cl;
+                }
+            }
+        }
+        return null;
+    }
+
     @Override
     public Class<?> resolveClass(String name) {
         Class<?> answer;
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 83188ac5e09..2e428364d2f 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
@@ -60,7 +60,7 @@ public class JavaRoutesBuilderLoader extends ExtendedRouteBuilderLoaderSupport {
 
     private final ConcurrentMap<Collection<Resource>, CompilationUnit.Result> compiled = new ConcurrentHashMap<>();
     private final Map<String, Resource> nameToResource = new HashMap<>();
-    private final JavaJoorClassLoader classLoader = new JavaJoorClassLoader();
+    private JavaJoorClassLoader classLoader;
 
     public JavaRoutesBuilderLoader() {
         super(EXTENSION);
@@ -73,7 +73,12 @@ public class JavaRoutesBuilderLoader extends ExtendedRouteBuilderLoaderSupport {
         // register jOOR classloader to camel, so we are able to load classes we have compiled
         CamelContext context = getCamelContext();
         if (context != null) {
-            context.getClassResolver().addClassLoader(classLoader);
+            // use existing class loader if available
+            classLoader = (JavaJoorClassLoader) context.getClassResolver().getClassLoader("CamelJoorClassLoader");
+            if (classLoader == null) {
+                classLoader = new JavaJoorClassLoader();
+                context.getClassResolver().addClassLoader(classLoader);
+            }
             // use work dir for classloader as it writes compiled classes to disk
             CompileStrategy cs = context.getCamelContextExtension().getContextPlugin(CompileStrategy.class);
             if (cs != null && cs.getWorkDir() != null) {


(camel) 06/07: CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl

Posted by da...@apache.org.
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 9bfbe7ae57dc564d5a80653d81c2b0a0264e15b3
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Dec 12 13:57:56 2023 +0100

    CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl
---
 .../java/org/apache/camel/language/joor/CamelJoorClassLoader.java     | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/components/camel-joor/src/main/java/org/apache/camel/language/joor/CamelJoorClassLoader.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/CamelJoorClassLoader.java
index 6a45a9c3b6c..f0b9d234e00 100644
--- a/components/camel-joor/src/main/java/org/apache/camel/language/joor/CamelJoorClassLoader.java
+++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/CamelJoorClassLoader.java
@@ -75,8 +75,8 @@ public class CamelJoorClassLoader extends URLClassLoader {
     }
 
     public Class<?> doLoadClass(String name) throws ClassNotFoundException {
-        // first try CamelJoorClassLoader
-        ClassLoader joorClassLoader = camelContext.getClassResolver().getClassLoader("CamelJoorClassLoader");
+        // first try JavaJoorClassLoader
+        ClassLoader joorClassLoader = camelContext.getClassResolver().getClassLoader("JavaJoorClassLoader");
         if (joorClassLoader != null) {
             try {
                 return joorClassLoader.loadClass(name);


(camel) 07/07: CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl

Posted by da...@apache.org.
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 66cf76603e3cc21f2bac927cf1f9a1350bed7c0c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Dec 12 16:32:07 2023 +0100

    CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl
---
 .../java/org/apache/camel/language/joor/JoorScriptingCompiler.java   | 5 +----
 .../src/main/java/org/apache/camel/language/joor/MultiCompile.java   | 5 ++---
 .../java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java | 3 ---
 3 files changed, 3 insertions(+), 10 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 81c0f2d555b..f5eb4fed93c 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
@@ -87,10 +87,7 @@ public class JoorScriptingCompiler extends ServiceSupport implements StaticServi
             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);
@@ -103,7 +100,7 @@ public class JoorScriptingCompiler extends ServiceSupport implements StaticServi
     @Override
     protected void doStop() throws Exception {
         if (counter > 0) {
-            LOG.info("jOOR scripting language compiled {} scripts in {} millis", counter, taken);
+            LOG.info("Java language compiled {} scripts in {} millis", counter, taken);
         }
     }
 
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 1f880647838..9ef05add484 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,14 +90,13 @@ 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.warn("Class already compiled: {}", cn);
+                LOG.debug("Class already compiled: {}", cn);
             } catch (ClassNotFoundException ignore) {
-                LOG.warn("Class must be compiled: {}", cn);
+                LOG.debug("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 32c5b1f4ca2..73f74bbe366 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
@@ -80,10 +80,7 @@ public class JavaRoutesBuilderLoader extends ExtendedRouteBuilderLoaderSupport {
             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);


(camel) 02/07: CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl

Posted by da...@apache.org.
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 68b8b9a9fc58bb389a117e7f90a412623add2f54
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Dec 12 12:01:11 2023 +0100

    CAMEL-20141: Consolidate camel-joor and camel-java-joor-dsl
---
 .../org/apache/camel/language/joor/CompilationUnit.java     | 13 +++++++++++++
 .../java/org/apache/camel/language/joor/MultiCompile.java   |  4 ++--
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/components/camel-joor/src/main/java/org/apache/camel/language/joor/CompilationUnit.java b/components/camel-joor/src/main/java/org/apache/camel/language/joor/CompilationUnit.java
index 5f3f677e559..64fd9bfc56f 100644
--- a/components/camel-joor/src/main/java/org/apache/camel/language/joor/CompilationUnit.java
+++ b/components/camel-joor/src/main/java/org/apache/camel/language/joor/CompilationUnit.java
@@ -27,6 +27,7 @@ import java.util.Set;
 public class CompilationUnit {
 
     private final Map<String, String> files = new LinkedHashMap<>();
+    private ClassLoader classLoader;
 
     /**
      * The result of the compilation that holds mapping for each className -> class.
@@ -108,10 +109,22 @@ public class CompilationUnit {
         return this;
     }
 
+    /**
+     * To use a custom classloader
+     */
+    public CompilationUnit withClassLoader(ClassLoader classLoader) {
+        this.classLoader = classLoader;
+        return this;
+    }
+
     public Map<String, String> getInput() {
         return files;
     }
 
+    public ClassLoader getClassLoader() {
+        return classLoader;
+    }
+
     @Override
     public String toString() {
         String names = String.join(", ", files.keySet());
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 7a5e07f387a..9ef05add484 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
@@ -89,7 +89,7 @@ public final class MultiCompile {
         List<CharSequenceJavaFileObject> files = new ArrayList<>();
 
         Lookup lookup = MethodHandles.lookup();
-        ClassLoader cl = lookup.lookupClass().getClassLoader();
+        ClassLoader cl = unit.getClassLoader() != null ? unit.getClassLoader() : lookup.lookupClass().getClassLoader();
         unit.getInput().forEach((cn, code) -> {
             try {
                 Class<?> clazz = cl.loadClass(cn);
@@ -124,7 +124,7 @@ public final class MultiCompile {
 
                 if (cl instanceof URLClassLoader) {
                     for (URL url : ((URLClassLoader) cl).getURLs()) {
-                        if (classpath.length() > 0) {
+                        if (!classpath.isEmpty()) {
                             classpath.append(separator);
                         }