Hi Johan,

I've seen the code in WebPage.onNewBrowserWindow().  The thing I'm having a
problem figuring out is where to hook in this code.  I can't see that I can
do this in the constructor of a page as you suggest.  In the constructor the
page hasn't been fully constructed yet so I can't see that I could clone the
page and redirect to it in the way that onNewBrowserWindow does.  I've also
had a look in wicket.Session to see if there's a place that I can hook in
this extra check but I can't see how.  Partly because all the relevant
methods are final so can't be overridden...

I tried to patch our version of Wicket to get a workaround for this.  I
added the following to Session.newPageMap(String name):

    public final IPageMap newPageMap(String name)
    {
        if (name == PageMap.DEFAULT_NAME) {
            name = createAutoPageMapName();
            log.debug("Allocated new page map name: " + name);
        }
       <...the rest as before...>
    }

This seems to solve the problem, but I don't know if this as other side
effects.  If this is basically a sensible fix, would it be reasonable to add
a hook for doing this in a cleaner way, e.g. adding a call in newPageMap()
to a new method "getPageMapName(name)", that in the default implementation
just returns the argument, but could be overridden to do the above?

Regards,
Jan


2008/9/1 Johan Compagner <[EMAIL PROTECTED]>

> First try to look at the newbrowser window check that we have in webpage.
> Dont know if you can all do those things (clone the page and set
> another pagemap)
>
> What you could do is int the page const check pagemap, if default then
> create the same page as you are on but then with a different pagemap
> and throw a restartresponse exception.
>
> Johan
>
> On 9/1/08, Jan Stette <[EMAIL PROTECTED]> wrote:
> > Johan,
> >
> > I've had a look at doing the workaround you suggest, but I don't know
> > Wicket's internals enough to fully understand where to plug it in.  In
> the
> > constructor of a page, I can check the page map name, but how would I do
> the
> > redirect here?  Conversely, I can override onBeginRequest() in the
> request
> > cycle, but in this case, how would I check the page map name and access
> > other page details in order to redirect to the same page?  Sorry if I'm
> > being dim here, but some more details would be greatly appreciated.
> >
> > And yes, pages shouldn't take a long time to load, it's just that in some
> > applications it's hard to guarantee that it will never happen, and we'd
> like
> > to handle all cases to make our application as robust as possible.
> >
> > Regards,
> > Jan
> >
> >
> > 2008/8/29 Johan Compagner <[EMAIL PROTECTED]>
> >
> >> Yes your observation is exactly what i described.
> >>
> >> What you can do is for example check in the constructor (with pagemap
> >> param) or in onbegin request (before render) of a page, if the pagemap
> >> is the default, if it is create the same page with a new  pagemap and
> >> redicect to that one.
> >>
> >> Whay you want is that the default pagemap is never used, by defaul all
> >> pages are going into that
> >>
> >> But you should check if you really want long running processes like
> that!
> >>
> >> Jihan
> >>
> >> On 8/29/08, Jan Stette <[EMAIL PROTECTED]> wrote:
> >> > Thanks for your answers, Matej and Johan.
> >> >
> >> > Matej: we are running with multi-window support on, and store
> per-window
> >> > related navigation in the session keyed on page map name.  This works
> >> fine
> >> > most of the time.
> >> >
> >> > Johan: I've been stepping through the Wicket code and studying the
> docs
> >> to
> >> > understand how it deals with new windows, and I think I'm starting to
> >> > understand what's happening, and your comments about default page
> maps.
> >> >
> >> > Basically what seems to be the case is that the inital window in a
> >> session
> >> > never receives its own page map name, it stays on the default one.
>  This
> >> > means that this initial window is indistinguishable from a brand new
> >> window
> >> > that hasn't yet had a page map name allocated and been redirected to a
> >> page
> >> > with this set.  I've done some tests which seem to confirm this
> >> hypothesis:
> >> >
> >> > - I open an initial browser window on my application (window 1)
> >> > - I open a second window in the same session (window 2)
> >> >
> >> > If a start a long-running operation in window 1, any new windows
> created
> >> > will lock until window 1's operation has been completed.
> >> > However, if I start the long-running operation in window 2, I can open
> >> new
> >> > windows to my heart's content and they will not block.
> >> >
> >> > Does that make sense, is this an accurate description of the problem?
> >> >
> >> > It seems odd that the initial window is never allocated a page map
> name,
> >> > which leads to this assymtry between windows.  Is this something that
> >> > can
> >> be
> >> > fixed?  Or even better, can I do something my side in order to force
> any
> >> > window/page map opened against a session to have a unique name
> >> > allocated?
> >> >
> >> > Regards,
> >> > Jan
> >> >
> >> >
> >> > 2008/8/29 Johan Compagner <[EMAIL PROTECTED]>
> >> >
> >> >> And even with that check it will not work.
> >> >> If you open a new tab then the first page wicket will render when you
> >> >> type in an url will be the defaul pagemap. Only on the first page
> >> >> rendered we know that we have to redirect. So that first page will be
> >> >> blocked. The only thing that could maybe help is never use the defaul
> >> >> pagemap. So always use from the first page on a differnt one. And if
> >> >> you then see that a defaul pagemap request is done in your page,
> >> >> create a new pagemap and redirect again.
> >> >>
> >> >> On 8/29/08, Matej Knopp <[EMAIL PROTECTED]> wrote:
> >> >> > Only if multi window support is on (which is off by default with
> >> >> > secondlevelcachesessionstore). The multiwindow support is more or
> >> >> > less
> >> >> > a hack, because HTTP doesn't really provide any means to detect
> >> >> > browser windows/tabs.
> >> >> >
> >> >> > -Matej
> >> >> >
> >> >> > On Fri, Aug 29, 2008 at 2:28 AM, Jan Stette <[EMAIL PROTECTED]>
> >> >> wrote:
> >> >> >> I agree, that's a better long-term fix.  Even so, isn't it wrong
> >> >> >> that
> >> >> the
> >> >> >> request from a new window is locked waiting on the other window's
> >> page
> >> >> map
> >> >> >> -
> >> >> >> I would have thought the new window should have ended up with its
> >> >> >> own
> >> >> page
> >> >> >> map?
> >> >> >>
> >> >> >> Regards,
> >> >> >> Jan
> >> >> >>
> >> >> >>
> >> >> >> 2008/8/29 Matej Knopp <[EMAIL PROTECTED]>
> >> >> >>
> >> >> >>> Hi,
> >> >> >>>
> >> >> >>> the long running process should be executed in separate thread.
> You
> >> >> >>> can make wicket periodically poll for result (via ajax). It is
> >> >> >>> generally not a good idea to run action that potentially can take
> >> long
> >> >> >>> time to complete from a request thread.
> >> >> >>>
> >> >> >>> -Matej
> >> >> >>>
> >> >> >>> On Thu, Aug 28, 2008 at 8:42 PM, Jan Stette <
> [EMAIL PROTECTED]>
> >> >> wrote:
> >> >> >>> > I'm having a problem with the following scenario:
> >> >> >>> >
> >> >> >>> > 1.  A user logs into our Wicket application and starts using
> it.
> >> >> >>> > 2.  The user clicks on a link which kicks off a potentially
> >> >> >>> > long-running
> >> >> >>> > operation.
> >> >> >>> > 3.  While getting bored with waiting for this to complete, the
> >> user
> >> >> >>> copies
> >> >> >>> > the URL from her browser into another tab or window.
> >> >> >>> >
> >> >> >>> > Unfortunately, at this stage, the second window is locked and
> >> times
> >> >> out
> >> >> >>> with
> >> >> >>> > a message "pagemap is still locked after one minute".
> >> >> >>> > Should this work?  Stepping through the second request in the
> >> >> debugger,
> >> >> >>> it
> >> >> >>> > appears that it this request has a page map name = null, as has
> >> the
> >> >> >>> previous
> >> >> >>> > request ( in the long running thread).  So they seem to pick up
> >> the
> >> >> >>> > same
> >> >> >>> > page map.  Presumably this is wrong; multiple windows should
> each
> >> >> have
> >> >> >>> their
> >> >> >>> > unique page map?  Or does the magic that detects new windows
> >> >> >>> > hence
> >> >> new
> >> >> >>> page
> >> >> >>> > maps to be created break down in cases like this?
> >> >> >>> >
> >> >> >>> > Regards,
> >> >> >>> > Jan
> >> >> >>> >
> >> >> >>>
> >> >> >>>
> >> ---------------------------------------------------------------------
> >> >> >>> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> >> >>> For additional commands, e-mail: [EMAIL PROTECTED]
> >> >> >>>
> >> >> >>>
> >> >> >>
> >> >> >
> >> >> >
> ---------------------------------------------------------------------
> >> >> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> >> > For additional commands, e-mail: [EMAIL PROTECTED]
> >> >> >
> >> >> >
> >> >>
> >> >> ---------------------------------------------------------------------
> >> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> >> For additional commands, e-mail: [EMAIL PROTECTED]
> >> >>
> >> >>
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> For additional commands, e-mail: [EMAIL PROTECTED]
> >>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to