You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by th...@apache.org on 2023/01/07 20:15:12 UTC
[tapestry-5] branch better-page-invalidation updated: TAP5-2742: fixing changes in PageLoaderImpl, plus other changes
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
The following commit(s) were added to refs/heads/better-page-invalidation by this push:
new 3c191477a TAP5-2742: fixing changes in PageLoaderImpl, plus other changes
3c191477a is described below
commit 3c191477abf70b057e6d6dbfd9106423edfbb5d9
Author: Thiago H. de Paula Figueiredo <th...@arsmachina.com.br>
AuthorDate: Sat Jan 7 17:14:53 2023 -0300
TAP5-2742: fixing changes in PageLoaderImpl, plus other changes
in ComponentClassCache and PropertyConduitSourceImpl
---
.../services/PropertyConduitSourceImpl.java | 40 ++++++++++++-
.../internal/event/InvalidationEventHubImpl.java | 2 +-
.../internal/pageload/PageLoaderImpl.java | 67 ++++++++++++++++------
.../internal/services/ComponentClassCacheImpl.java | 24 +++++++-
.../internal/services/RequestErrorFilter.java | 8 ++-
.../services/assets/ResourceChangeTrackerImpl.java | 6 --
.../src/test/resources/GebConfig.groovy | 2 +-
7 files changed, 120 insertions(+), 29 deletions(-)
diff --git a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java
index 46641a8f7..8a304a5ce 100644
--- a/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java
+++ b/beanmodel/src/main/java/org/apache/tapestry5/beanmodel/internal/services/PropertyConduitSourceImpl.java
@@ -41,9 +41,12 @@ import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import org.antlr.runtime.ANTLRInputStream;
import org.antlr.runtime.CommonTokenStream;
@@ -1387,9 +1390,42 @@ public class PropertyConduitSourceImpl implements PropertyConduitSource
@PostInjection
public void listenForInvalidations(@ComponentClasses InvalidationEventHub hub)
{
- hub.clearOnInvalidation(cache);
+ hub.addInvalidationCallback(this::listen);
+ }
+
+ private List<String> listen(List<String> resources)
+ {
+
+ if (resources.isEmpty())
+ {
+ cache.clear();
+ }
+ else
+ {
+
+ final Iterator<Entry<MultiKey, PropertyConduit>> iterator = cache.entrySet().iterator();
+
+ while (iterator.hasNext())
+ {
+
+ final Entry<MultiKey, PropertyConduit> entry = iterator.next();
+
+ for (String resource : resources) {
+ @SuppressWarnings("rawtypes")
+ final Class clasz = (Class) entry.getKey().getValues()[0];
+ if (clasz.getName().equals(resource))
+ {
+ iterator.remove();
+ }
+ }
+
+ }
+
+ }
+
+ return Collections.emptyList();
+
}
-
public PropertyConduit create(Class rootClass, String expression)
{
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/event/InvalidationEventHubImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/event/InvalidationEventHubImpl.java
index 590ea3b27..a18df83d8 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/event/InvalidationEventHubImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/event/InvalidationEventHubImpl.java
@@ -117,7 +117,7 @@ public class InvalidationEventHubImpl implements InvalidationEventHub
}
}
- public /*final*/ void clearOnInvalidation(final Map<?, ?> map)
+ public final void clearOnInvalidation(final Map<?, ?> map)
{
assert map != null;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java
index 781ca7365..ec0566ed0 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/pageload/PageLoaderImpl.java
@@ -12,12 +12,16 @@
package org.apache.tapestry5.internal.pageload;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
import org.apache.tapestry5.Binding;
import org.apache.tapestry5.BindingConstants;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.MarkupWriter;
-import org.apache.tapestry5.beanmodel.internal.services.*;
-import org.apache.tapestry5.beanmodel.services.*;
import org.apache.tapestry5.commons.Location;
import org.apache.tapestry5.commons.internal.services.StringInterner;
import org.apache.tapestry5.commons.internal.util.TapestryException;
@@ -26,18 +30,36 @@ import org.apache.tapestry5.commons.util.AvailableValues;
import org.apache.tapestry5.commons.util.CollectionFactory;
import org.apache.tapestry5.commons.util.Stack;
import org.apache.tapestry5.commons.util.UnknownValueException;
-import org.apache.tapestry5.http.services.RequestGlobals;
import org.apache.tapestry5.internal.InternalComponentResources;
import org.apache.tapestry5.internal.InternalConstants;
import org.apache.tapestry5.internal.bindings.LiteralBinding;
-import org.apache.tapestry5.internal.parser.*;
+import org.apache.tapestry5.internal.parser.AttributeToken;
+import org.apache.tapestry5.internal.parser.BlockToken;
+import org.apache.tapestry5.internal.parser.CDATAToken;
+import org.apache.tapestry5.internal.parser.CommentToken;
+import org.apache.tapestry5.internal.parser.ComponentTemplate;
+import org.apache.tapestry5.internal.parser.DTDToken;
+import org.apache.tapestry5.internal.parser.DefineNamespacePrefixToken;
+import org.apache.tapestry5.internal.parser.ExpansionToken;
+import org.apache.tapestry5.internal.parser.ExtensionPointToken;
+import org.apache.tapestry5.internal.parser.ParameterToken;
+import org.apache.tapestry5.internal.parser.StartComponentToken;
+import org.apache.tapestry5.internal.parser.StartElementToken;
+import org.apache.tapestry5.internal.parser.TemplateToken;
+import org.apache.tapestry5.internal.parser.TextToken;
+import org.apache.tapestry5.internal.parser.TokenType;
import org.apache.tapestry5.internal.services.ComponentInstantiatorSource;
import org.apache.tapestry5.internal.services.ComponentTemplateSource;
import org.apache.tapestry5.internal.services.Instantiator;
import org.apache.tapestry5.internal.services.PageElementFactory;
import org.apache.tapestry5.internal.services.PageLoader;
import org.apache.tapestry5.internal.services.PersistentFieldManager;
-import org.apache.tapestry5.internal.structure.*;
+import org.apache.tapestry5.internal.structure.BlockImpl;
+import org.apache.tapestry5.internal.structure.ComponentPageElement;
+import org.apache.tapestry5.internal.structure.ComponentPageElementResources;
+import org.apache.tapestry5.internal.structure.ComponentPageElementResourcesSource;
+import org.apache.tapestry5.internal.structure.Page;
+import org.apache.tapestry5.internal.structure.PageImpl;
import org.apache.tapestry5.ioc.Invokable;
import org.apache.tapestry5.ioc.OperationTracker;
import org.apache.tapestry5.ioc.annotations.ComponentClasses;
@@ -55,10 +77,6 @@ import org.apache.tapestry5.services.MetaDataLocator;
import org.apache.tapestry5.services.pageload.ComponentResourceSelector;
import org.slf4j.Logger;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
/**
* There's still a lot of room to beef up {@link org.apache.tapestry5.internal.pageload.ComponentAssembler} and
* {@link org.apache.tapestry5.internal.pageload.EmbeddedComponentAssembler} to perform more static analysis, but
@@ -157,13 +175,11 @@ public class PageLoaderImpl implements PageLoader, ComponentAssemblerSource
private final MetaDataLocator metaDataLocator;
- private final RequestGlobals requestGlobals;
-
public PageLoaderImpl(ComponentInstantiatorSource instantiatorSource, ComponentTemplateSource templateSource,
PageElementFactory elementFactory, ComponentPageElementResourcesSource resourcesSource,
ComponentClassResolver componentClassResolver, PersistentFieldManager persistentFieldManager,
StringInterner interner, OperationTracker tracker, PerthreadManager perThreadManager,
- Logger logger, MetaDataLocator metaDataLocator, RequestGlobals requestGlobals)
+ Logger logger, MetaDataLocator metaDataLocator)
{
this.instantiatorSource = instantiatorSource;
this.templateSource = templateSource;
@@ -176,7 +192,6 @@ public class PageLoaderImpl implements PageLoader, ComponentAssemblerSource
this.perThreadManager = perThreadManager;
this.logger = logger;
this.metaDataLocator = metaDataLocator;
- this.requestGlobals = requestGlobals;
}
@PostInjection
@@ -184,9 +199,29 @@ public class PageLoaderImpl implements PageLoader, ComponentAssemblerSource
@ComponentTemplates InvalidationEventHub templatesHub,
@ComponentMessages InvalidationEventHub messagesHub)
{
- classesHub.clearOnInvalidation(cache);
- templatesHub.clearOnInvalidation(cache);
- messagesHub.clearOnInvalidation(cache);
+ classesHub.addInvalidationCallback(this::listen);
+ templatesHub.addInvalidationCallback(this::listen);
+ messagesHub.addInvalidationCallback(this::listen);
+ }
+
+ private List<String> listen(List<String> resources)
+ {
+
+ final Iterator<Entry<Key, ComponentAssembler>> iterator = cache.entrySet().iterator();
+
+ while (iterator.hasNext())
+ {
+ final Entry<Key, ComponentAssembler> entry = iterator.next();
+ for (String resource : resources)
+ {
+ if (resource.equals(entry.getKey().className))
+ {
+ iterator.remove();
+ }
+ }
+ }
+
+ return Collections.emptyList();
}
public void clearCache()
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassCacheImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassCacheImpl.java
index 49655e5a3..f8b4f139c 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassCacheImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentClassCacheImpl.java
@@ -24,7 +24,11 @@ import org.apache.tapestry5.ioc.annotations.ComponentClasses;
import org.apache.tapestry5.ioc.annotations.ComponentLayer;
import org.apache.tapestry5.ioc.annotations.PostInjection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
public class ComponentClassCacheImpl implements ComponentClassCache
{
@@ -43,7 +47,25 @@ public class ComponentClassCacheImpl implements ComponentClassCache
@PostInjection
public void setupInvalidation(@ComponentClasses InvalidationEventHub hub) {
- hub.clearOnInvalidation(cache);
+ hub.addInvalidationCallback(this::listen);;
+ }
+
+ @SuppressWarnings("rawtypes")
+ private List<String> listen(List<String> resources)
+ {
+
+ final Iterator<Entry<String, Class>> iterator = cache.entrySet().iterator();
+
+ while (iterator.hasNext())
+ {
+ final Entry<String, Class> entry = iterator.next();
+ if (resources.contains(entry.getKey()))
+ {
+ iterator.remove();
+ }
+ }
+
+ return Collections.emptyList();
}
@SuppressWarnings("unchecked")
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestErrorFilter.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestErrorFilter.java
index 4d87cb5a2..7b5f85cd4 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestErrorFilter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestErrorFilter.java
@@ -5,6 +5,7 @@ import java.util.Arrays;
import org.apache.tapestry5.commons.services.InvalidationEventHub;
import org.apache.tapestry5.commons.util.DifferentClassVersionsException;
+import org.apache.tapestry5.http.Link;
import org.apache.tapestry5.http.services.Request;
import org.apache.tapestry5.http.services.RequestFilter;
import org.apache.tapestry5.http.services.RequestHandler;
@@ -24,6 +25,7 @@ public class RequestErrorFilter implements RequestFilter
private final RequestExceptionHandler exceptionHandler;
private final InvalidationEventHub classesInvalidationHub;
private final ComponentEventLinkEncoder componentEventLinkEncoder;
+ private final static String QUERY_PARAMETER = "RequestErrorFilterRedirected";
public RequestErrorFilter(InternalRequestGlobals internalRequestGlobals, RequestExceptionHandler exceptionHandler,
@ComponentClasses InvalidationEventHub classesInvalidationHub, ComponentEventLinkEncoder componentEventLinkEncoder)
@@ -58,9 +60,11 @@ public class RequestErrorFilter implements RequestFilter
DifferentClassVersionsException dcve = (DifferentClassVersionsException) rootCause;
classesInvalidationHub.fireInvalidationEvent(Arrays.asList(dcve.getClassName()));
final PageRenderRequestParameters pageRenderParameters = componentEventLinkEncoder.decodePageRenderRequest(request);
- if (pageRenderParameters != null)
+ if (request.getParameter(QUERY_PARAMETER) == null && pageRenderParameters != null)
{
- response.sendRedirect(componentEventLinkEncoder.createPageRenderLink(pageRenderParameters));
+ final Link link = componentEventLinkEncoder.createPageRenderLink(pageRenderParameters);
+ link.addParameter(QUERY_PARAMETER, "tue");
+ response.sendRedirect(link);
return true;
}
// final ComponentEventRequestParameters componentEventParameters = componentEventLinkEncoder.decodeComponentEventRequest(request);
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ResourceChangeTrackerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ResourceChangeTrackerImpl.java
index fdd9bf133..a64a02af9 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ResourceChangeTrackerImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ResourceChangeTrackerImpl.java
@@ -16,7 +16,6 @@ package org.apache.tapestry5.internal.services.assets;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@@ -203,9 +202,4 @@ public class ResourceChangeTrackerImpl extends InvalidationEventHubImpl implemen
}
- public final void clearOnInvalidation(final Map<?, ?> map)
- {
- super.clearOnInvalidation(map);
- }
-
}
diff --git a/tapestry-webresources/src/test/resources/GebConfig.groovy b/tapestry-webresources/src/test/resources/GebConfig.groovy
index a45863a02..35515537c 100644
--- a/tapestry-webresources/src/test/resources/GebConfig.groovy
+++ b/tapestry-webresources/src/test/resources/GebConfig.groovy
@@ -1,4 +1,4 @@
-import io.github.bonigarcia.wdm.FirefoxDriverManager
+import io.github.bonigarcia.wdm.managers.FirefoxDriverManager
driver = "firefox"