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() {
+       }
+       
+       /**
         * 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)
+       {
+       }
+
+       /**
         * 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);
+                       }
+               }
+       }
+       
+       @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)

Reply via email to