Hi, Few small comments inline.
On Fri, Nov 6, 2020 at 7:38 PM <svenme...@apache.org> wrote: > This is an automated email from the ASF dual-hosted git repository. > > svenmeier pushed a commit to branch WICKET-6847-onEndRequest-before-flush > in repository https://gitbox.apache.org/repos/asf/wicket.git > > commit 15a6cedfb8b855c004b2ece201d9eac063ef770e > Author: Sven Meier <svenme...@apache.org> > AuthorDate: Fri Nov 6 18:36:16 2020 +0100 > > WICKET-6847 onEndRequest before flush > > allows RequestPageStore to check for stateful pages > --- > pom.xml | 12 ++++++++++++ > .../src/main/java/org/apache/wicket/Application.java | 6 ++++++ > .../java/org/apache/wicket/page/IPageManager.java | 6 ++++++ > .../java/org/apache/wicket/page/PageManager.java | 6 ++++++ > .../apache/wicket/pageStore/DelegatingPageStore.java | 6 ++++++ > .../java/org/apache/wicket/pageStore/IPageStore.java | 9 +++++++++ > .../apache/wicket/pageStore/RequestPageStore.java | 19 > ++++++++++++++----- > .../apache/wicket/request/cycle/RequestCycle.java | 20 > ++++++++++---------- > 8 files changed, 69 insertions(+), 15 deletions(-) > > diff --git a/pom.xml b/pom.xml > index 0c7cfd5..4e0c912 100644 > --- a/pom.xml > +++ b/pom.xml > @@ -1133,6 +1133,18 @@ > > <comparisonVersion>9.0.0</comparisonVersion> > > <failOnError>true</failOnError> > > <logResults>true</logResults> > + <ignored> > + <difference> > + > <differenceType>7012</differenceType> > + > <className>org/apache/wicket/page/IPageManager</className> > + > <method>void end()</method> > + </difference> > + <difference> > + > <differenceType>7012</differenceType> > + > <className>org/apache/wicket/pageStore/IPageStore</className> > + > <method>void end(org.apache.wicket.pageStore.IPageContext)</method> > + </difference> > + </ignored> > </configuration> > <executions> > <execution> > diff --git a/wicket-core/src/main/java/org/apache/wicket/Application.java > b/wicket-core/src/main/java/org/apache/wicket/Application.java > index 78fd57f..fa4ce29 100644 > --- a/wicket-core/src/main/java/org/apache/wicket/Application.java > +++ b/wicket-core/src/main/java/org/apache/wicket/Application.java > @@ -1567,6 +1567,12 @@ public abstract class Application implements > UnboundListener, IEventSink, IMetad > requestCycle.getListeners().add(new IRequestCycleListener() > { > @Override > + public void onEndRequest(RequestCycle cycle) > + { > + internalGetPageManager().end(); > + } > + > + @Override > public void onDetach(final RequestCycle > requestCycle) > { > internalGetPageManager().detach(); > diff --git > a/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java > b/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java > index c675cd9..ef6094a 100644 > --- a/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java > +++ b/wicket-core/src/main/java/org/apache/wicket/page/IPageManager.java > @@ -73,6 +73,12 @@ public interface IPageManager > void clear(); > > /** > + * End the request. > + */ > + default void end() { > endRequest() ? > + } > + > + /** > * Detach at end of request. > */ > void detach(); > diff --git > a/wicket-core/src/main/java/org/apache/wicket/page/PageManager.java > b/wicket-core/src/main/java/org/apache/wicket/page/PageManager.java > index 642b3c1..02bf13c 100644 > --- a/wicket-core/src/main/java/org/apache/wicket/page/PageManager.java > +++ b/wicket-core/src/main/java/org/apache/wicket/page/PageManager.java > @@ -80,6 +80,12 @@ public class PageManager implements IPageManager > } > > @Override > + public void end() > + { > + store.end(createPageContext()); > + } > + > + @Override > public void detach() > { > store.detach(createPageContext()); > diff --git > a/wicket-core/src/main/java/org/apache/wicket/pageStore/DelegatingPageStore.java > b/wicket-core/src/main/java/org/apache/wicket/pageStore/DelegatingPageStore.java > index 5ec3a79..3402b2c 100644 > --- > a/wicket-core/src/main/java/org/apache/wicket/pageStore/DelegatingPageStore.java > +++ > b/wicket-core/src/main/java/org/apache/wicket/pageStore/DelegatingPageStore.java > @@ -76,6 +76,12 @@ public abstract class DelegatingPageStore implements > IPageStore > } > > @Override > + public void end(IPageContext context) > + { > + delegate.end(context); > + } > + > + @Override > public void detach(IPageContext context) > { > delegate.detach(context); > diff --git > a/wicket-core/src/main/java/org/apache/wicket/pageStore/IPageStore.java > b/wicket-core/src/main/java/org/apache/wicket/pageStore/IPageStore.java > index 3872c8a..19f4079 100644 > --- a/wicket-core/src/main/java/org/apache/wicket/pageStore/IPageStore.java > +++ b/wicket-core/src/main/java/org/apache/wicket/pageStore/IPageStore.java > @@ -94,6 +94,15 @@ public interface IPageStore > IManageablePage getPage(IPageContext context, int id); > > /** > + * End the current context. > + * > + * @param context > + */ > + default void end(IPageContext context) > again endRequest(IPageContext) ? > + { > + } > + > + /** > * Detach from the current context. > * > * @param context > diff --git > a/wicket-core/src/main/java/org/apache/wicket/pageStore/RequestPageStore.java > b/wicket-core/src/main/java/org/apache/wicket/pageStore/RequestPageStore.java > index 54dc9da..d5c4d78 100644 > --- > a/wicket-core/src/main/java/org/apache/wicket/pageStore/RequestPageStore.java > +++ > b/wicket-core/src/main/java/org/apache/wicket/pageStore/RequestPageStore.java > @@ -59,11 +59,6 @@ public class RequestPageStore extends > DelegatingPageStore > @Override > public void addPage(IPageContext context, IManageablePage page) > { > - // make sure an HTTP session is bound before committing > the response > - if (isPageStateless(page) == false) > - { > - context.getSessionId(true); > - } > getRequestData(context).add(page); > } > > @@ -92,6 +87,20 @@ public class RequestPageStore extends > DelegatingPageStore > } > > @Override > + public void end(IPageContext context) > + { > + RequestData requestData = getRequestData(context); > + for (IManageablePage page : requestData.pages()) > + { > + if (isPageStateless(page) == false) > + { > + // last opportunity to create a session > + context.getSessionId(true); > break ? > + } > + } > + } > + > + @Override > public void detach(IPageContext context) > { > RequestData requestData = getRequestData(context); > diff --git > a/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java > b/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java > index b9f9841..d913a92 100644 > --- > a/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java > +++ > b/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java > @@ -261,6 +261,16 @@ public class RequestCycle implements IRequestCycle, > IEventSink, IMetadataContext > } > finally > { > + try > + { > + onEndRequest(); > + listeners.onEndRequest(this); > + } > + catch (RuntimeException e) > + { > + log.error("Exception occurred during > onEndRequest", e); > + } > + > set(null); > } > > @@ -648,16 +658,6 @@ public class RequestCycle implements IRequestCycle, > IEventSink, IMetadataContext > { > try > { > - onEndRequest(); > - listeners.onEndRequest(this); > - } > - catch (RuntimeException e) > - { > - log.error("Exception occurred during > onEndRequest", e); > - } > - > - try > - { > requestHandlerExecutor.detach(); > } > catch (RuntimeException exception) > >