Thanks,

+                       if (isPageStateless(page) == false)
+                       {
+                               // last opportunity to create a session
+                               context.getSessionId(true);

break ?

good point.


+        * End the current context.
+        *
+        * @param context
+        */
+       default void end(IPageContext context)

again endRequest(IPageContext) ?

I thought about that, but IMHO this method name fits better with the other methods.
But I don't care too much about the name either.

Regards
Sven



On 09.11.20 07:15, Martin Grigorov wrote:
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)


Reply via email to