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);
+                }
+                
             }
             
         }

Reply via email to