On Tue, Mar 12, 2013 at 1:43 PM, Martin Grigorov <[email protected]>wrote:
> Everything seems to be OK with this additional patch here. > I've tested our app (which is mostly stateful), and all stateless examples > in wicket-examples. > Additionally I ran 'mvn clean test" on wicketstuff-core. > > I think Martijn will cut 6.7.0 this Friday. Since this improvement is not > something urgent I'll revert it now and apply it again when 6.8.0-SNAPSHOT > is available. This way we will have almost a month to test it before 6.9.0. > I meant "before 6.8.0". > > > On Tue, Mar 12, 2013 at 1:15 PM, Martin Grigorov <[email protected]>wrote: > >> 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/> >> > > > > -- > Martin Grigorov > jWeekend > Training, Consulting, Development > http://jWeekend.com <http://jweekend.com/> > -- Martin Grigorov jWeekend Training, Consulting, Development http://jWeekend.com <http://jweekend.com/>
