This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch WW-5537-classloader-leak-fixes in repository https://gitbox.apache.org/repos/asf/struts.git
commit fe9cb65176c145feeb4e8a745717f4b7df010238 Author: Lukasz Lenart <[email protected]> AuthorDate: Mon Mar 23 09:57:06 2026 +0100 WW-5537 CompoundRootAccessor, DefaultFileManager: implement InternalDestroyable Co-Authored-By: Claude Opus 4.6 <[email protected]> --- .../struts2/ognl/accessor/CompoundRootAccessor.java | 15 ++++++++++++++- .../org/apache/struts2/util/fs/DefaultFileManager.java | 16 +++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/apache/struts2/ognl/accessor/CompoundRootAccessor.java b/core/src/main/java/org/apache/struts2/ognl/accessor/CompoundRootAccessor.java index d4cc814dd..0f95de9e5 100644 --- a/core/src/main/java/org/apache/struts2/ognl/accessor/CompoundRootAccessor.java +++ b/core/src/main/java/org/apache/struts2/ognl/accessor/CompoundRootAccessor.java @@ -18,6 +18,7 @@ */ package org.apache.struts2.ognl.accessor; +import org.apache.struts2.dispatcher.InternalDestroyable; import org.apache.struts2.inject.Inject; import org.apache.struts2.ognl.OgnlValueStack; import org.apache.struts2.util.CompoundRoot; @@ -57,7 +58,7 @@ import static org.apache.commons.lang3.BooleanUtils.toBoolean; * @author Rainer Hermanns * @version $Revision$ */ -public class CompoundRootAccessor implements RootAccessor { +public class CompoundRootAccessor implements RootAccessor, InternalDestroyable { /** * Used by OGNl to generate bytecode @@ -322,6 +323,18 @@ public class CompoundRootAccessor implements RootAccessor { } + public static void clearCache() { + invalidMethods.clear(); + } + + /** + * @since 7.1.0 + */ + @Override + public void destroy() { + clearCache(); + } + static class MethodCall { Class clazz; String name; diff --git a/core/src/main/java/org/apache/struts2/util/fs/DefaultFileManager.java b/core/src/main/java/org/apache/struts2/util/fs/DefaultFileManager.java index 82bf06348..e92fa89b4 100644 --- a/core/src/main/java/org/apache/struts2/util/fs/DefaultFileManager.java +++ b/core/src/main/java/org/apache/struts2/util/fs/DefaultFileManager.java @@ -19,6 +19,7 @@ package org.apache.struts2.util.fs; import org.apache.struts2.FileManager; +import org.apache.struts2.dispatcher.InternalDestroyable; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -40,7 +41,7 @@ import static java.util.Objects.requireNonNullElseGet; /** * Default implementation of {@link FileManager} */ -public class DefaultFileManager implements FileManager { +public class DefaultFileManager implements FileManager, InternalDestroyable { private static final Logger LOG = LogManager.getLogger(DefaultFileManager.class); @@ -56,6 +57,19 @@ public class DefaultFileManager implements FileManager { public DefaultFileManager() { } + public static void clearCache() { + files.clear(); + lazyMonitoredFilesCache.clear(); + } + + /** + * @since 7.1.0 + */ + @Override + public void destroy() { + clearCache(); + } + public void setReloadingConfigs(boolean reloadingConfigs) { if (reloadingConfigs && !this.reloadingConfigs) { //starting monitoring cached not-monitored files (lazy monitoring on demand because of performance)
