This is an automated email from the ASF dual-hosted git repository. thiagohp pushed a commit to branch better-page-invalidation in repository https://gitbox.apache.org/repos/asf/tapestry-5.git
commit 19fab8b41916dcd91e65f811908f57b6db3d2f0e Author: Thiago H. de Paula Figueiredo <thi...@arsmachina.com.br> AuthorDate: Sun Apr 30 11:36:20 2023 -0300 TAP-2742: fixing better class invalidation --- .../tapestry5/internal/services/PageSourceImpl.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java index 5e33c05db..d19b22708 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageSourceImpl.java @@ -38,6 +38,8 @@ import org.apache.tapestry5.services.ComponentMessages; import org.apache.tapestry5.services.ComponentTemplates; import org.apache.tapestry5.services.pageload.ComponentRequestSelectorAnalyzer; import org.apache.tapestry5.services.pageload.ComponentResourceSelector; +import org.apache.tapestry5.services.pageload.PageClassloaderContext; +import org.apache.tapestry5.services.pageload.PageClassloaderContextManager; import org.slf4j.Logger; public class PageSourceImpl implements PageSource @@ -50,6 +52,8 @@ public class PageSourceImpl implements PageSource private final ComponentClassResolver componentClassResolver; + private final PageClassloaderContextManager pageClassloaderContextManager; + private final Logger logger; final private boolean productionMode; @@ -97,6 +101,7 @@ public class PageSourceImpl implements PageSource public PageSourceImpl(PageLoader pageLoader, ComponentRequestSelectorAnalyzer selectorAnalyzer, ComponentDependencyRegistry componentDependencyRegistry, ComponentClassResolver componentClassResolver, + PageClassloaderContextManager pageClassloaderContextManager, @Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode, Logger logger) { @@ -105,6 +110,7 @@ public class PageSourceImpl implements PageSource this.componentDependencyRegistry = componentDependencyRegistry; this.componentClassResolver = componentClassResolver; this.productionMode = productionMode; + this.pageClassloaderContextManager = pageClassloaderContextManager; this.logger = logger; } @@ -145,6 +151,16 @@ public class PageSourceImpl implements PageSource final ComponentPageElement rootElement = page.getRootElement(); componentDependencyRegistry.clear(rootElement); componentDependencyRegistry.register(rootElement); + final String className = componentClassResolver.resolvePageNameToClassName(canonicalPageName); + final PageClassloaderContext context = pageClassloaderContextManager.get(className); + if (context.isUnknown()) + { + componentDependencyRegistry.disableInvalidations(); + pageClassloaderContextManager.invalidateAndFireInvalidationEvents(context); + componentDependencyRegistry.disableInvalidations(); + pageClassloaderContextManager.get(className); + } + } }