Thanks, Sven !
I'm investigating what will break if the check for stateless is removed
from org.apache.wicket.page.AbstractPageManager#touchPage:
---
i/wicket-core/src/main/java/org/apache/wicket/page/AbstractPageManager.java
+++
w/wicket-core/src/main/java/org/apache/wicket/page/AbstractPageManager.java
@@ -127,10 +127,6 @@ public abstract class AbstractPageManager implements
IPageManager
@Override
public void touchPage(IManageablePage page)
{
- if (!page.isPageStateless())
- {
- getContext().bind();
- }
getRequestAdapter().touch(page);
The session is being bound at org.apache.wicket.Page#onAfterRender when
needed.
So far with this additional patch no tests fail and wicket-examples seems
to work.
I'll test our application with this change and then I'll either commit this
change or revert the previous one.
On Tue, Mar 12, 2013 at 12:41 PM, Sven Meier <[email protected]> wrote:
> Hi Martin,
>
>
> --- a/wicket-core/src/main/java/**org/apache/wicket/Page.java
> +++ b/wicket-core/src/main/java/**org/apache/wicket/Page.java
> @@ -450,6 +450,8 @@ public abstract class Page extends MarkupContainer
> implements IRedirectListener,
> if (stateless == null)
> {
> + internalInitialize();
> +
> if (isStateless() == false)
> {
> stateless = Boolean.FALSE;
>
> problem is that calling internaltInitialize() here will trigger
> initialization of the page from the constructor:
>
> Thread [qtp400269449-16] (Suspended)
> OtherPage.onInitialize() line: 23
> OtherPage(Component).**fireInitialize() line: 863
> OtherPage(MarkupContainer).**internalInitialize() line: 955
> OtherPage(Page).**isPageStateless() line: 453
> PageStoreManager(**AbstractPageManager).**touchPage(IManageablePage)
> line: 130
> PageAccessSynchronizer$2(**PageManagerDecorator).**touchPage(IManageablePage)
> line: 59
> PageAccessSynchronizer$2.**touchPage(IManageablePage) line: 273
> OtherPage(Page).dirty(boolean) line: 289
> OtherPage(WebPage).dirty(**boolean) line: 324
> OtherPage(Page).init() line: 713
> OtherPage(Page).<init>(**PageParameters, IModel<?>) line: 178
> OtherPage(Page).<init>() line: 132
> OtherPage(WebPage).<init>() line: 75
> OtherPage.<init>() line: 13
>
> #onInitialize() is assumed to be called *after* the constructor :(.
>
> Regards
> Sven
>
>
>
> On 03/12/2013 11:46 AM, [email protected] wrote:
>
>> Updated Branches:
>> refs/heads/master 62fe0a96e -> beee594d9
>>
>>
>> WICKET-5083 Page#isPageStateless() may return wrong value
>>
>>
>> Project:
>> http://git-wip-us.apache.org/**repos/asf/wicket/repo<http://git-wip-us.apache.org/repos/asf/wicket/repo>
>> Commit:
>> http://git-wip-us.apache.org/**repos/asf/wicket/commit/**beee594d<http://git-wip-us.apache.org/repos/asf/wicket/commit/beee594d>
>> Tree:
>> http://git-wip-us.apache.org/**repos/asf/wicket/tree/beee594d<http://git-wip-us.apache.org/repos/asf/wicket/tree/beee594d>
>> Diff:
>> http://git-wip-us.apache.org/**repos/asf/wicket/diff/beee594d<http://git-wip-us.apache.org/repos/asf/wicket/diff/beee594d>
>>
>> Branch: refs/heads/master
>> Commit: beee594d98f82d1bf8b59c3c69dbe3**3eb1743091
>> Parents: 62fe0a9
>> Author: Martin Tzvetanov Grigorov <[email protected]>
>> Authored: Tue Mar 12 11:45:55 2013 +0100
>> Committer: Martin Tzvetanov Grigorov <[email protected]>
>> Committed: Tue Mar 12 11:45:55 2013 +0100
>>
>> ------------------------------**------------------------------**
>> ----------
>> .../src/main/java/org/apache/**wicket/Page.java | 2 +
>> .../html/ajaxLink/**AjaxLinkPageExpectedResult.**html | 2 +-
>> .../**AjaxLinkWithBorderPageExpected**Result.html | 2 +-
>> .../html/ajaxLink/AjaxPage2_**ExpectedResult.html | 2 +-
>> .../html/basic/**SimplePageExpectedResult_13.**html | 2 +-
>> .../border/HideableBorderPage_**ExpectedResult.html | 2 +-
>> .../panel/**InlinePanelPageExpectedResult_**7.html | 2 +-
>> .../panel/**InlinePanelPageExpectedResult_**8.html | 2 +-
>> .../apache/wicket/page/**PageStatelessnessTest.java | 54
>> +++++++++++++++
>> 9 files changed, 63 insertions(+), 7 deletions(-)
>> ------------------------------**------------------------------**
>> ----------
>>
>>
>> http://git-wip-us.apache.org/**repos/asf/wicket/blob/**
>> beee594d/wicket-core/src/main/**java/org/apache/wicket/Page.**java<http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/main/java/org/apache/wicket/Page.java>
>> ------------------------------**------------------------------**
>> ----------
>> diff --git a/wicket-core/src/main/java/**org/apache/wicket/Page.java
>> b/wicket-core/src/main/java/**org/apache/wicket/Page.java
>> index 1467798..86c0472 100644
>> --- a/wicket-core/src/main/java/**org/apache/wicket/Page.java
>> +++ b/wicket-core/src/main/java/**org/apache/wicket/Page.java
>> @@ -450,6 +450,8 @@ public abstract class Page extends MarkupContainer
>> implements IRedirectListener,
>> if (stateless == null)
>> {
>> + internalInitialize();
>> +
>> if (isStateless() == false)
>> {
>> stateless = Boolean.FALSE;
>>
>> http://git-wip-us.apache.org/**repos/asf/wicket/blob/**
>> beee594d/wicket-core/src/test/**java/org/apache/wicket/ajax/**
>> markup/html/ajaxLink/**AjaxLinkPageExpectedResult.**html<http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkPageExpectedResult.html>
>> ------------------------------**------------------------------**
>> ----------
>> diff --git a/wicket-core/src/test/java/**org/apache/wicket/ajax/markup/**
>> html/ajaxLink/**AjaxLinkPageExpectedResult.**html
>> b/wicket-core/src/test/java/**org/apache/wicket/ajax/markup/**
>> html/ajaxLink/**AjaxLinkPageExpectedResult.**html
>> index 147a640..5cae1da 100644
>> --- a/wicket-core/src/test/java/**org/apache/wicket/ajax/markup/**
>> html/ajaxLink/**AjaxLinkPageExpectedResult.**html
>> +++ b/wicket-core/src/test/java/**org/apache/wicket/ajax/markup/**
>> html/ajaxLink/**AjaxLinkPageExpectedResult.**html
>> @@ -10,7 +10,7 @@ Wicket.Ajax.DebugWindow.**enabled=true;
>> </script>
>> <script type="text/javascript" id="wicket-ajax-base-url">
>> /*<![CDATA[*/
>> -Wicket.Ajax.baseUrl="wicket/**bookmarkable/org.apache.**
>> wicket.ajax.markup.html.**ajaxLink.AjaxLinkPage";
>> +Wicket.Ajax.baseUrl="wicket/**bookmarkable/org.apache.**
>> wicket.ajax.markup.html.**ajaxLink.AjaxLinkPage?0";
>> /*]]>*/
>> </script>
>> <script type="text/javascript" >
>>
>> http://git-wip-us.apache.org/**repos/asf/wicket/blob/**
>> beee594d/wicket-core/src/test/**java/org/apache/wicket/ajax/**
>> markup/html/ajaxLink/**AjaxLinkWithBorderPageExpected**Result.html<http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkWithBorderPageExpectedResult.html>
>> ------------------------------**------------------------------**
>> ----------
>> diff --git a/wicket-core/src/test/java/**org/apache/wicket/ajax/markup/**
>> html/ajaxLink/**AjaxLinkWithBorderPageExpected**Result.html
>> b/wicket-core/src/test/java/**org/apache/wicket/ajax/markup/**
>> html/ajaxLink/**AjaxLinkWithBorderPageExpected**Result.html
>> index 1316cbc..aed0fb7 100644
>> --- a/wicket-core/src/test/java/**org/apache/wicket/ajax/markup/**
>> html/ajaxLink/**AjaxLinkWithBorderPageExpected**Result.html
>> +++ b/wicket-core/src/test/java/**org/apache/wicket/ajax/markup/**
>> html/ajaxLink/**AjaxLinkWithBorderPageExpected**Result.html
>> @@ -10,7 +10,7 @@ Wicket.Ajax.DebugWindow.**enabled=true;
>> </script>
>> <script type="text/javascript" id="wicket-ajax-base-url">
>> /*<![CDATA[*/
>> -Wicket.Ajax.baseUrl="wicket/**bookmarkable/org.apache.**
>> wicket.ajax.markup.html.**ajaxLink.**AjaxLinkWithBorderPage";
>> +Wicket.Ajax.baseUrl="wicket/**bookmarkable/org.apache.**
>> wicket.ajax.markup.html.**ajaxLink.**AjaxLinkWithBorderPage?0";
>> /*]]>*/
>> </script>
>> <script type="text/javascript" >
>>
>> http://git-wip-us.apache.org/**repos/asf/wicket/blob/**
>> beee594d/wicket-core/src/test/**java/org/apache/wicket/ajax/**
>> markup/html/ajaxLink/**AjaxPage2_ExpectedResult.html<http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxPage2_ExpectedResult.html>
>> ------------------------------**------------------------------**
>> ----------
>> diff --git a/wicket-core/src/test/java/**org/apache/wicket/ajax/markup/**
>> html/ajaxLink/AjaxPage2_**ExpectedResult.html
>> b/wicket-core/src/test/java/**org/apache/wicket/ajax/markup/**
>> html/ajaxLink/AjaxPage2_**ExpectedResult.html
>> index 1d0a909..1a0da1e 100644
>> --- a/wicket-core/src/test/java/**org/apache/wicket/ajax/markup/**
>> html/ajaxLink/AjaxPage2_**ExpectedResult.html
>> +++ b/wicket-core/src/test/java/**org/apache/wicket/ajax/markup/**
>> html/ajaxLink/AjaxPage2_**ExpectedResult.html
>> @@ -10,7 +10,7 @@ Wicket.Ajax.DebugWindow.**enabled=true;
>> </script>
>> <script type="text/javascript" id="wicket-ajax-base-url">
>> /*<![CDATA[*/
>> -Wicket.Ajax.baseUrl="wicket/**bookmarkable/org.apache.**
>> wicket.ajax.markup.html.**ajaxLink.AjaxPage2";
>> +Wicket.Ajax.baseUrl="wicket/**bookmarkable/org.apache.**
>> wicket.ajax.markup.html.**ajaxLink.AjaxPage2?0";
>> /*]]>*/
>> </script>
>> <script type="text/javascript" >
>>
>> http://git-wip-us.apache.org/**repos/asf/wicket/blob/**
>> beee594d/wicket-core/src/test/**java/org/apache/wicket/markup/**
>> html/basic/**SimplePageExpectedResult_13.**html<http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/markup/html/basic/SimplePageExpectedResult_13.html>
>> ------------------------------**------------------------------**
>> ----------
>> diff --git a/wicket-core/src/test/java/**org/apache/wicket/markup/html/**
>> basic/**SimplePageExpectedResult_13.**html b/wicket-core/src/test/java/**
>> org/apache/wicket/markup/html/**basic/**SimplePageExpectedResult_13.**
>> html
>> index 15cea8a..0639e2e 100644
>> --- a/wicket-core/src/test/java/**org/apache/wicket/markup/html/**basic/*
>> *SimplePageExpectedResult_13.**html
>> +++ b/wicket-core/src/test/java/**org/apache/wicket/markup/html/**basic/*
>> *SimplePageExpectedResult_13.**html
>> @@ -13,7 +13,7 @@ Wicket.Ajax.DebugWindow.**enabled=true;
>> </script>
>> <script type="text/javascript" id="wicket-ajax-base-url">
>> /*<![CDATA[*/
>> -Wicket.Ajax.baseUrl="wicket/**bookmarkable/org.apache.**
>> wicket.markup.html.basic.**SimplePage_13";
>> +Wicket.Ajax.baseUrl="wicket/**bookmarkable/org.apache.**
>> wicket.markup.html.basic.**SimplePage_13?0";
>> /*]]>*/
>> </script>
>> <link rel="stylesheet" type="text/css" href="../../BasePage.css" />
>>
>> http://git-wip-us.apache.org/**repos/asf/wicket/blob/**
>> beee594d/wicket-core/src/test/**java/org/apache/wicket/markup/**
>> html/border/**HideableBorderPage_**ExpectedResult.html<http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/markup/html/border/HideableBorderPage_ExpectedResult.html>
>> ------------------------------**------------------------------**
>> ----------
>> diff --git a/wicket-core/src/test/java/**org/apache/wicket/markup/html/**
>> border/HideableBorderPage_**ExpectedResult.html
>> b/wicket-core/src/test/java/**org/apache/wicket/markup/html/**
>> border/HideableBorderPage_**ExpectedResult.html
>> index b227b6e..4745897 100644
>> --- a/wicket-core/src/test/java/**org/apache/wicket/markup/html/**
>> border/HideableBorderPage_**ExpectedResult.html
>> +++ b/wicket-core/src/test/java/**org/apache/wicket/markup/html/**
>> border/HideableBorderPage_**ExpectedResult.html
>> @@ -10,7 +10,7 @@ Wicket.Ajax.DebugWindow.**enabled=true;
>> </script>
>> <script type="text/javascript" id="wicket-ajax-base-url">
>> /*<![CDATA[*/
>> -Wicket.Ajax.baseUrl="wicket/**bookmarkable/org.apache.**
>> wicket.markup.html.border.**HideableBorderPage";
>> +Wicket.Ajax.baseUrl="wicket/**bookmarkable/org.apache.**
>> wicket.markup.html.border.**HideableBorderPage?0";
>> /*]]>*/
>> </script>
>> <script type="text/javascript" >
>>
>> http://git-wip-us.apache.org/**repos/asf/wicket/blob/**
>> beee594d/wicket-core/src/test/**java/org/apache/wicket/markup/**
>> html/panel/**InlinePanelPageExpectedResult_**7.html<http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPageExpectedResult_7.html>
>> ------------------------------**------------------------------**
>> ----------
>> diff --git a/wicket-core/src/test/java/**org/apache/wicket/markup/html/**
>> panel/**InlinePanelPageExpectedResult_**7.html
>> b/wicket-core/src/test/java/**org/apache/wicket/markup/html/**panel/**
>> InlinePanelPageExpectedResult_**7.html
>> index 26eb4e7..76e3382 100644
>> --- a/wicket-core/src/test/java/**org/apache/wicket/markup/html/**panel/*
>> *InlinePanelPageExpectedResult_**7.html
>> +++ b/wicket-core/src/test/java/**org/apache/wicket/markup/html/**panel/*
>> *InlinePanelPageExpectedResult_**7.html
>> @@ -10,7 +10,7 @@ Wicket.Ajax.DebugWindow.**enabled=true;
>> </script>
>> <script type="text/javascript" id="wicket-ajax-base-url">
>> /*<![CDATA[*/
>> -Wicket.Ajax.baseUrl="wicket/**bookmarkable/org.apache.**
>> wicket.markup.html.panel.**InlinePanelPage_7";
>> +Wicket.Ajax.baseUrl="wicket/**bookmarkable/org.apache.**
>> wicket.markup.html.panel.**InlinePanelPage_7?0";
>> /*]]>*/
>> </script>
>> <script type="text/javascript" >
>>
>> http://git-wip-us.apache.org/**repos/asf/wicket/blob/**
>> beee594d/wicket-core/src/test/**java/org/apache/wicket/markup/**
>> html/panel/**InlinePanelPageExpectedResult_**8.html<http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPageExpectedResult_8.html>
>> ------------------------------**------------------------------**
>> ----------
>> diff --git a/wicket-core/src/test/java/**org/apache/wicket/markup/html/**
>> panel/**InlinePanelPageExpectedResult_**8.html
>> b/wicket-core/src/test/java/**org/apache/wicket/markup/html/**panel/**
>> InlinePanelPageExpectedResult_**8.html
>> index b6d33ec..6c6238f 100644
>> --- a/wicket-core/src/test/java/**org/apache/wicket/markup/html/**panel/*
>> *InlinePanelPageExpectedResult_**8.html
>> +++ b/wicket-core/src/test/java/**org/apache/wicket/markup/html/**panel/*
>> *InlinePanelPageExpectedResult_**8.html
>> @@ -10,7 +10,7 @@ Wicket.Ajax.DebugWindow.**enabled=true;
>> </script>
>> <script type="text/javascript" id="wicket-ajax-base-url">
>> /*<![CDATA[*/
>> -Wicket.Ajax.baseUrl="wicket/**bookmarkable/org.apache.**
>> wicket.markup.html.panel.**InlinePanelPage_8";
>> +Wicket.Ajax.baseUrl="wicket/**bookmarkable/org.apache.**
>> wicket.markup.html.panel.**InlinePanelPage_8?0";
>> /*]]>*/
>> </script>
>> <script type="text/javascript" >
>>
>> http://git-wip-us.apache.org/**repos/asf/wicket/blob/**
>> beee594d/wicket-core/src/test/**java/org/apache/wicket/page/**
>> PageStatelessnessTest.java<http://git-wip-us.apache.org/repos/asf/wicket/blob/beee594d/wicket-core/src/test/java/org/apache/wicket/page/PageStatelessnessTest.java>
>> ------------------------------**------------------------------**
>> ----------
>> diff --git
>> a/wicket-core/src/test/java/**org/apache/wicket/page/**PageStatelessnessTest.java
>> b/wicket-core/src/test/java/**org/apache/wicket/page/**
>> PageStatelessnessTest.java
>> new file mode 100644
>> index 0000000..0340a95
>> --- /dev/null
>> +++ b/wicket-core/src/test/java/**org/apache/wicket/page/**
>> PageStatelessnessTest.java
>> @@ -0,0 +1,54 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>> + * contributor license agreements. See the NOTICE file distributed with
>> + * this work for additional information regarding copyright ownership.
>> + * The ASF licenses this file to You under the Apache License, Version
>> 2.0
>> + * (the "License"); you may not use this file except in compliance with
>> + * the License. You may obtain a copy of the License at
>> + *
>> + *
>> http://www.apache.org/**licenses/LICENSE-2.0<http://www.apache.org/licenses/LICENSE-2.0>
>> + *
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +package org.apache.wicket.page;
>> +
>> +import org.apache.wicket.Page;
>> +import org.apache.wicket.**WicketTestCase;
>> +import org.apache.wicket.markup.html.**WebPage;
>> +import org.junit.Test;
>> +
>> +/**
>> + * Tests for Page#isPageStateless
>> + */
>> +public class PageStatelessnessTest extends WicketTestCase
>> +{
>> + /**
>> + * Tests that a page is not stateless if it adds stateful
>> components in #onInitialize()
>> + *
>> https://issues.apache.org/**jira/browse/WICKET-5083<https://issues.apache.org/jira/browse/WICKET-5083>
>> + */
>> + @Test
>> + public void isPageStatelessWithOnInitializ**e()
>> + {
>> + Page page = new TestPage();
>> + assertFalse(page.**isPageStateless());
>> + }
>> +
>> + public static class TestPage extends WebPage
>> + {
>> +
>> + public TestPage()
>> + {
>> + }
>> +
>> + @Override
>> + protected void onInitialize() {
>> + super.onInitialize();
>> +
>> + setStatelessHint(false);
>> + }
>> + }
>> +}
>>
>>
>
--
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>