This is an automated email from the ASF dual-hosted git repository. thiagohp pushed a commit to branch TAP5-2779 in repository https://gitbox.apache.org/repos/asf/tapestry-5.git
commit b46516bedf82d87129981caf2f73a7c9dc09f0be Author: Thiago H. de Paula Figueiredo <[email protected]> AuthorDate: Sun Jul 7 17:46:53 2024 -0300 TAP5-2742: don't invalidate classes when preloading contexts --- .../PageClassLoaderContextManagerImpl.java | 29 ++++++++++++++-------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/PageClassLoaderContextManagerImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/PageClassLoaderContextManagerImpl.java index 123e356b2..83b19cfb9 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/PageClassLoaderContextManagerImpl.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/PageClassLoaderContextManagerImpl.java @@ -73,6 +73,8 @@ public class PageClassLoaderContextManagerImpl implements PageClassLoaderContext private Function<ClassLoader, PlasticProxyFactory> plasticProxyFactoryProvider; private PageClassLoaderContext root; + + private boolean preloadingContexts; public PageClassLoaderContextManagerImpl( final ComponentDependencyRegistry componentDependencyRegistry, @@ -637,7 +639,7 @@ public class PageClassLoaderContextManagerImpl implements PageClassLoaderContext } private void invalidate(Set<String> classesToInvalidate) { - if (!classesToInvalidate.isEmpty()) + if (!classesToInvalidate.isEmpty() && !preloadingContexts) { LOGGER.debug("Invalidating classes {}", classesToInvalidate); markAsInvalidatingContext(); @@ -757,19 +759,26 @@ public class PageClassLoaderContextManagerImpl implements PageClassLoaderContext classNames.sort(ClassNameComparator.INSTANCE); int runs = 0; + preloadingContexts = true; - // The run counter check is to just avoid possible infinite loops, - // although that's very unlikely. - int contexts = -1; - while (runs < 5000 && contexts < CONTEXTS_CREATED.get().get()) + try { - runs++; - contexts = CONTEXTS_CREATED.get().get(); - for (String className : classNames) + // The run counter check is to just avoid possible infinite loops, + // although that's very unlikely. + int contexts = -1; + while (runs < 5000 && contexts < CONTEXTS_CREATED.get().get()) { - get(className); + runs++; + contexts = CONTEXTS_CREATED.get().get(); + for (String className : classNames) + { + get(className); + } } -// Collections.reverse(classNames); + } + finally + { + preloadingContexts = false; } finish = System.currentTimeMillis();
