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

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

commit 87dc44d5405ea6b73e00e1872ce63685304a621b
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Jul 16 10:36:31 2025 +0200

    CAMEL-22214: camel-groovy - Reloading of compiled sources
---
 .../groovy/DefaultGroovyScriptCompiler.java         | 21 ++++++++++++++++-----
 .../camel/language/groovy/GroovyDevConsole.java     |  6 ++++--
 2 files changed, 20 insertions(+), 7 deletions(-)

diff --git 
a/components/camel-groovy/src/main/java/org/apache/camel/language/groovy/DefaultGroovyScriptCompiler.java
 
b/components/camel-groovy/src/main/java/org/apache/camel/language/groovy/DefaultGroovyScriptCompiler.java
index 76710b4d93e..f16d9df0a34 100644
--- 
a/components/camel-groovy/src/main/java/org/apache/camel/language/groovy/DefaultGroovyScriptCompiler.java
+++ 
b/components/camel-groovy/src/main/java/org/apache/camel/language/groovy/DefaultGroovyScriptCompiler.java
@@ -240,6 +240,17 @@ public class DefaultGroovyScriptCompiler extends 
ServiceSupport
         }
 
         IOHelper.close(classLoader);
+
+    }
+
+    @Override
+    protected void doShutdown() throws Exception {
+        super.doShutdown();
+
+        if (notifier != null) {
+            
getCamelContext().getManagementStrategy().removeEventNotifier(notifier);
+            notifier = null;
+        }
     }
 
     private final class ReloadNotifier extends SimpleEventNotifierSupport 
implements Ordered {
@@ -248,13 +259,13 @@ public class DefaultGroovyScriptCompiler extends 
ServiceSupport
         public void notify(CamelEvent event) throws Exception {
             // if context or route is reloading then clear classloader to 
ensure old scripts are removed from memory.
             if (event instanceof CamelEvent.CamelContextReloadingEvent || 
event instanceof CamelEvent.RouteReloadedEvent) {
-                if (classLoader != null) {
-                    classLoader.clear();
+                if (scriptPattern != null) {
                     // trigger re-compilation
-                    if (scriptPattern != null) {
-                        LOG.info("Re-compiling Groovy sources from: {}", 
scriptPattern);
-                        doCompile();
+                    if (classLoader != null) {
+                        classLoader.clear();
                     }
+                    LOG.info("Re-compiling Groovy sources from: {}", 
scriptPattern);
+                    doCompile();
                 }
             }
         }
diff --git 
a/components/camel-groovy/src/main/java/org/apache/camel/language/groovy/GroovyDevConsole.java
 
b/components/camel-groovy/src/main/java/org/apache/camel/language/groovy/GroovyDevConsole.java
index 3114b973cc5..d761f9c4a4b 100644
--- 
a/components/camel-groovy/src/main/java/org/apache/camel/language/groovy/GroovyDevConsole.java
+++ 
b/components/camel-groovy/src/main/java/org/apache/camel/language/groovy/GroovyDevConsole.java
@@ -36,8 +36,9 @@ public class GroovyDevConsole extends AbstractDevConsole {
         DefaultGroovyScriptCompiler compiler = 
getCamelContext().hasService(DefaultGroovyScriptCompiler.class);
         if (compiler != null) {
             sb.append(String.format("    Groovy Script Pattern: %s", 
compiler.getScriptPattern()));
-            sb.append(String.format("\n    Total Compiled Classes: %s", 
compiler.getClassesSize()));
-            sb.append(String.format("\n    Total Compiled Time: %s (ms)", 
compiler.getCompileTime()));
+            sb.append(String.format("\n    Compiled Size: %s", 
compiler.getCompileSize()));
+            sb.append(String.format("\n    Compiled Classes: %s", 
compiler.getClassesSize()));
+            sb.append(String.format("\n    Compiled Time: %s (ms)", 
compiler.getCompileTime()));
             if (compiler.getWorkDir() != null) {
                 sb.append(String.format("\n    Work Directory: %s", 
compiler.getWorkDir()));
             }
@@ -54,6 +55,7 @@ public class GroovyDevConsole extends AbstractDevConsole {
         if (compiler != null) {
             JsonObject jo = new JsonObject();
             jo.put("groovyScriptPattern", compiler.getScriptPattern());
+            jo.put("compiledSize", compiler.getCompileSize());
             jo.put("compiledClasses", compiler.getClassesSize());
             jo.put("compiledTime", compiler.getCompileTime());
             if (compiler.getWorkDir() != null) {

Reply via email to