On Fri, May 15, 2015 at 5:15 PM, Christopher Merrill <
[email protected]> wrote:

> Adding an IRequestCycleListener that put a new value into the session at
> the end of each request DOES fix the problem. As you noted, it fixed my
> stripped-down example. I have tested all of the symptoms I have mentioned
> in previous related posts and they are ALL fixed :>
>
> Overriding our session class's equals() method to return false did NOT
> solve the problem in my stripped-down example and I did not investigate
> that approach any further.
>
>
> Thanks so much, Martin, for your help on this!!  I can't properly express
> how grateful I am.  I don't know how long it would have taken for me to
> track that down without your help, but there would have been a lot of
> unhappiness along the way, I am sure :)
>

Welcome!


>
>
> I have a fix that I can proceed with, but I am puzzled why other
> Wicket/AppEngine users do not see this problem. It seems like nearly every
>

I am puzzled why people use AppEngine in first place. It has so many
restrictions. It looks like a pain to me to develop for this platform.


> Wicket app on GAE should be affected. Is there any more investigation you
> can recommend that might shed light on that? I'd like to either (1) figure
> out what we've done to aggravate this problem and fix it...or (2) get an
> appropriate fix into Wicket or GAE-Initializer, if that is the right thing
> to do.
>

We can add IRequestCycleListener to gae-initializer!
But so far you are the only user who complains about this problem ...


>
>
> Chris
>
>
>
>
> On Fri, May 15, 2015 at 9:24 AM, Martin Grigorov <[email protected]>
> wrote:
>
> > On Fri, May 15, 2015 at 4:16 PM, Christopher Merrill <
> > [email protected]> wrote:
> >
> > > Wow, that makes sense - and I _think_ it explains the symptoms I've
> seen
> > > with other problems as well. I'll have to re-investigate those.
> > >
> > > The issue you mentioned is marked as resolved in  6.12 and the related
> > > issue (WICKET-5473) was fixed in 6.14. We are running 6.19. So I must
> be
> > > reading those descriptions wrong...or this problem is somehow
> different.
> > >
> >
> > You read it correct. It should be fixed.
> > I don't know which version of Jetty AppEngine uses and what kind of
> checks
> > it does.
> > I just remembered about the symptoms in WICKET-5390 and thought that it
> > could be the same issue.
> >
> >
> > >
> > > Anyway, I'll test your suggestion (or perhaps override
> > > WebSession.equals()?).
> > >
> >
> > Test all of them.
> >
> >
> > >
> > > Chris
> > >
> > > On Fri, May 15, 2015 at 3:50 AM, Martin Grigorov <[email protected]
> >
> > > wrote:
> > >
> > > > Hi,
> > > >
> > > > AppEngine uses Jetty and I remembered about
> > > > https://issues.apache.org/jira/browse/WICKET-5390.
> > > > Here the reporter explains that Jetty won't update its SessionStore
> if
> > it
> > > > believes the http session didn't change.
> > > > Wicket stores both o.a.w.Session and all pages rendered in the last
> > > request
> > > > as attributes in the http session.
> > > > If Jetty doesn't detect the change(s) in the http session it will not
> > > store
> > > > it and later will serve a http session with obsolete data inside.
> > > > By doing "getSession().setAttribute("blah", somethingRandom)" we try
> to
> > > > help Jetty realize that there is a change and make sure it saves the
> > > latest
> > > > state.
> > > > You can move this helper code in IRequestCycleListener#onEndRequest()
> > so
> > > it
> > > > is executed for every request.
> > > > If I am correct then this should workaround the problem.
> > > >
> > > > Martin Grigorov
> > > > Wicket Training and Consulting
> > > > https://twitter.com/mtgrigorov
> > > >
> > > > On Fri, May 15, 2015 at 12:00 AM, Christopher Merrill <
> > > > [email protected]> wrote:
> > > >
> > > > > Oh, and what you probably also wanted to know: When I press refresh
> > on
> > > > the
> > > > > page, the message from the constructor does not appear in the logs
> > > again.
> > > > > Also nothing after pressing the button (which does nothing).
> > > > >
> > > > > On Thu, May 14, 2015 at 4:50 PM, Christopher Merrill <
> > > > > [email protected]> wrote:
> > > > >
> > > > > > I added the getSession().setAttribute() into the page
> constructor.
> > > > When I
> > > > > > hit the page, I see two lines in the AppEngine logs. The first is
> > for
> > > > the
> > > > > > URL I put in the browser (/portal/pages/Test), which indicates a
> > 302
> > > > > > response to the browser and the log entry also contains the debug
> > > > message
> > > > > > that I included along with the setAttribute() line.
> > > > > >
> > > > > > The next line in the logs is for URL /portal/pages/Test?1 and is
> a
> > > 200
> > > > > > response with the page content.
> > > > > >
> > > > > > Does that help?
> > > > > >
> > > > > > Chris
> > > > > >
> > > > > > On Thu, May 14, 2015 at 4:42 PM, Christopher Merrill <
> > > > > > [email protected]> wrote:
> > > > > >
> > > > > >> I added that line, along with
> > > > > >>   Debug.log.out("the test attribute is: " +
> > > > > >> getSession().getAttribute("test"));
> > > > > >> in the onSubmit() method of the AjaxButton.
> > > > > >>
> > > > > >> If I DO NOT refresh the page before pressing the button, then it
> > > > prints
> > > > > >> the message with the date in the logs.
> > > > > >>
> > > > > >> If I do refresh the page, nothing...which I take to mean that
> the
> > > code
> > > > > >> never runs.
> > > > > >>
> > > > > >> I'll try it in the constructor for the page.
> > > > > >>
> > > > > >> Chris
> > > > > >>
> > > > > >>
> > > > > >> On Thu, May 14, 2015 at 4:35 PM, Martin Grigorov <
> > > > [email protected]>
> > > > > >> wrote:
> > > > > >>
> > > > > >>> OK, then also put the same line in some constructor that is
> > > invoked.
> > > > > >>>
> > > > > >>> Martin Grigorov
> > > > > >>> Wicket Training and Consulting
> > > > > >>> https://twitter.com/mtgrigorov
> > > > > >>>
> > > > > >>> On Thu, May 14, 2015 at 11:32 PM, Christopher Merrill <
> > > > > >>> [email protected]> wrote:
> > > > > >>>
> > > > > >>> > I'll do that. It'll take a few minutes to deploy that back up
> > to
> > > > > >>> AppEngine.
> > > > > >>> >
> > > > > >>> > But I don't think that code will be executed - I feel pretty
> > > > > confident
> > > > > >>> that
> > > > > >>> > the event listeners are not being invoked. At least, my debug
> > > > > >>> statements in
> > > > > >>> > the event listener do not get into the AppEngine logs.
> > > > > >>> >
> > > > > >>> > Chris
> > > > > >>> >
> > > > > >>> >
> > > > > >>> > On Thu, May 14, 2015 at 4:23 PM, Martin Grigorov <
> > > > > [email protected]
> > > > > >>> >
> > > > > >>> > wrote:
> > > > > >>> >
> > > > > >>> > > Can you try something else:
> > > > > >>> > > in onClick() add code like: getSession.setAttribute("test",
> > new
> > > > > >>> Date())
> > > > > >>> > >
> > > > > >>> > > Martin Grigorov
> > > > > >>> > > Wicket Training and Consulting
> > > > > >>> > > https://twitter.com/mtgrigorov
> > > > > >>> > >
> > > > > >>> > > On Thu, May 14, 2015 at 11:18 PM, Christopher Merrill <
> > > > > >>> > > [email protected]> wrote:
> > > > > >>> > >
> > > > > >>> > > > Thanks for your help, Martin!
> > > > > >>> > > >
> > > > > >>> > > > I turned off page recreation by adding:
> > > > > >>> > > >
> > > > > >>> > > >
> > getPageSettings().setRecreateMountedPagesAfterExpiry(false);
> > > > > >>> > > >
> > > > > >>> > > > to my Application.init() method.
> > > > > >>> > > >
> > > > > >>> > > > There is no change in the behavior, either locally or in
> > > > > AppEngine
> > > > > >>> --
> > > > > >>> > > i.e.
> > > > > >>> > > > no page expired errors.
> > > > > >>> > > >
> > > > > >>> > > > You can observe the behavior here:
> > > > > >>> > > > http://1.wp-portal-staging.appspot.com/portal/pages/Test
> > > > > >>> > > >
> > > > > >>> > > > by visiting the page, refreshing it and then pressing a
> > > button
> > > > > >>> (which
> > > > > >>> > > will
> > > > > >>> > > > do nothing if you refreshed). I posted the code for that
> > page
> > > > in
> > > > > >>> > another
> > > > > >>> > > > thread ("Model value change lost between
> > > AjaxButton.onSubmit()
> > > > > and
> > > > > >>> > > > form.onSubmit()"), in case that helps.
> > > > > >>> > > >
> > > > > >>> > > > TIA!
> > > > > >>> > > > Chris
> > > > > >>> > > >
> > > > > >>> > > >
> > > > > >>> > > >
> > > > > >>> > > > On Thu, May 14, 2015 at 3:43 PM, Martin Grigorov <
> > > > > >>> [email protected]
> > > > > >>> > >
> > > > > >>> > > > wrote:
> > > > > >>> > > >
> > > > > >>> > > > > Hi,
> > > > > >>> > > > >
> > > > > >>> > > > > My guess is that there is some problem with the saving
> of
> > > the
> > > > > >>> page in
> > > > > >>> > > the
> > > > > >>> > > > > backing stores.
> > > > > >>> > > > > Try by disabling page recreation for expired pages, see
> > > > > >>> > IPageSettings,
> > > > > >>> > > > > If I'm right then you should start seeing
> PageExpiredPage
> > > > after
> > > > > >>> > > clicking
> > > > > >>> > > > > the link.
> > > > > >>> > > > > The next step is will be to find why the pages could
> not
> > be
> > > > > >>> stored.
> > > > > >>> > > > >
> > > > > >>> > > > > Martin Grigorov
> > > > > >>> > > > > Wicket Training and Consulting
> > > > > >>> > > > > https://twitter.com/mtgrigorov
> > > > > >>> > > > >
> > > > > >>> > > > > On Thu, May 14, 2015 at 9:40 PM, Christopher Merrill <
> > > > > >>> > > > > [email protected]> wrote:
> > > > > >>> > > > >
> > > > > >>> > > > > > I'm seeing problems throughout our app where
> refreshing
> > > the
> > > > > >>> page
> > > > > >>> > > causes
> > > > > >>> > > > > > other event listeners to then malfunction. These are
> > > > > trivially
> > > > > >>> > simple
> > > > > >>> > > > > > listeners, like:
> > > > > >>> > > > > >
> > > > > >>> > > > > > Link customer_link = new Link("org_link")
> > > > > >>> > > > > >     {
> > > > > >>> > > > > >     @Override
> > > > > >>> > > > > >     public void onClick()
> > > > > >>> > > > > >         {
> > > > > >>> > > > > >         setResponsePage(new
> > > > > >>> > > > > > OrganizationAdministrationPage(getPageReference(),
> > > > > >>> > > > > > _organization_key));
> > > > > >>> > > > > >         }
> > > > > >>> > > > > >
> > > > > >>> > > > > >     private static final long serialVersionUID =
> > > > > >>> > > -6396556709778260098L;
> > > > > >>> > > > > >     };
> > > > > >>> > > > > >
> > > > > >>> > > > > >
> > > > > >>> > > > > > Instead of returning the response page, the browser
> > > > receives
> > > > > a
> > > > > >>> > > forward
> > > > > >>> > > > > > (302) back to the same page instance...which of
> course
> > > > means
> > > > > >>> that
> > > > > >>> > the
> > > > > >>> > > > > link
> > > > > >>> > > > > > appears to do nothing.
> > > > > >>> > > > > >
> > > > > >>> > > > > > I can only reproduce this behavior when the app is
> > > deployed
> > > > > to
> > > > > >>> > > > AppEngine
> > > > > >>> > > > > --
> > > > > >>> > > > > > it works fine running on my desktop. The problems
> > started
> > > > > when
> > > > > >>> we
> > > > > >>> > > > > upgraded
> > > > > >>> > > > > > the application to Wicket 6. I'm not implying this
> is a
> > > > > Wicket
> > > > > >>> 6
> > > > > >>> > > > > > problem...in fact I assume we have done something
> that
> > is
> > > > > >>> causing
> > > > > >>> > > this
> > > > > >>> > > > > > malfunction. But since it worked under Wicket 5, I'm
> > > hoping
> > > > > >>> someone
> > > > > >>> > > > will
> > > > > >>> > > > > > see a relationship between the symptoms and a change
> > that
> > > > we
> > > > > >>> need
> > > > > >>> > to
> > > > > >>> > > > make
> > > > > >>> > > > > > for compatibility with Wicket 6.
> > > > > >>> > > > > >
> > > > > >>> > > > > > Any hints or debugging ideas (since I can't step
> > through
> > > > the
> > > > > >>> code
> > > > > >>> > > > running
> > > > > >>> > > > > > in AppEngine) would be greatly appreciated!
> > > > > >>> > > > > >
> > > > > >>> > > > > > Chris
> > > > > >>> > > > > >
> > > > > >>> > > > >
> > > > > >>> > > >
> > > > > >>> > >
> > > > > >>> >
> > > > > >>>
> > > > > >>
> > > > > >>
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to