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) {
