this question might be too detailed for a general wiki page, but I do
wonder.
With pagemaps gone, how is synchronisation handled?

Do requests for multiple windows block each other (synchronizing on the
session) or is the locking on page level now?  (i.e. a request from tab 1,
right after opening tab 2, waits until page 5 is cloned)

thanks, Frank


On Mon, Oct 18, 2010 at 7:02 PM, Igor Vaynberg <[email protected]>wrote:

> basically pagemaps are gone. this was made possible by changing how
> page versioning works and has resulted in much simpler code to both
> committers and clients.
>
> in 1.4.x a page has both id and version. id is assigned on page
> creation and version is incremented every time the page is tweaked.
> page history is kept as a series of undo objects. problems: undo
> objects are cumbersome to create and maintain. since IChange only has
> undo and not redo once we roll back a version there is no way to go
> back.
>
> lets take a look at how this effected simple things such as multi tab
> browsing:
>
> user loads page id 5 version 3 in browser tab 1.
> right clicks a link and clicks open in new tab.
> without multi tab support enabled
>    link handler executes, creates version 4
>    page id 5 version 4 opens in a new tab
>    user switches to old tab and clicks a link
>    page is reverted to version 3 because that is the version of the
> link in the old tab
>        version 4 that is open in tab 2 is evicted by the undo operation
>        new version 4 is created for the page in tab 1
>   user switches to tab 2, clicks, gets component not present or weird
> effect
> with multi tab support enabled
>    link handler executes, creates version 4
>    wicket detects page id 5 version 4 is opened in a new tab
>    wicket clones page into new pagemap
>    user interacts with new page in the new pagemap, page open in tab
> 1 is not affected.
>
> in 1.5.x there is no version, there is just the page id. whenever a
> user creates a change in a page that previously required a new version
> in 1.5.x we clone the entire page into one with a new page id.
> effectively creating a DAG of versions of a page as it is being
> modified.
>
> lets take a look at how this eliminates the need for complex code like
> multi tab support:
> user loads page id 5 in browser tab 1.
> right clicks a link and clicks open in new tab.
> link handler is invoked, modifies the page, page id is changed to 6
> page 6 renders in tab 2
> user clicks a link in tab 2, handler invoked, page id is changed 7
> user goes back to tab 1 - that has page 5
> clicks a link, handler invoked, page id changed to 8
>
> so the graph of the page diverged and looks like this
> 5<-6<-7 (open in tab 2)
> 5<-8 (open in tab 1)
>
> this change also eliminates the need for nasty undo objects, so where
> as before we had to do:
>
> addStateChange(new IChage() {
>    final int oldValue=value;
>   void undo() {
>        value=oldValue;
>    }
> });
>
> we can now simply say:
>
> getPage().dirty();
>
> pros/cons of new approach:
>
> con: before we had to maintain just the small undo object for each
> change, now we have to clone the entire page. why this doesnt matter
> much? we cloned the page anyways when we stored it to disk, so there
> is not that much overhead in the new scheme.
>
> pro: undo objects gone, they were cumbersome and sometimes complicated
> pro: complexity of versioning is gone
> pro: version manager is gone - the thing that maintained undo objects
> pro: complexity of pagemaps is gone
> pro: overall simplified requirements for handling pages and therefore
> simpler code in the core
>
> hope this sums it up, probably needs to be fixed up some and then it
> can go onto the wiki. looking at you jeremy :)
>
> -igor
>
>
>
> On Sat, Oct 16, 2010 at 8:49 PM, Jeremy Thomerson
> <[email protected]> wrote:
> > Has anyone written up information about the removal of page maps in 1.5?
>  I
> > have had some users asking about whether there is still multi-window
> > support, and what replaced page maps in 1.5, and I couldn't find a page
> to
> > point them to.  I didn't see either of those questions answered on the
> wiki
> > [1], and I have not dug very deeply into the internals of 1.5 myself.
> >
> > [1]- https://cwiki.apache.org/WICKET/migration-to-wicket-15.html
> >
> > --
> > Jeremy Thomerson
> > http://www.wickettraining.com
> >
>



-- 
Hippo
Europe  •  Amsterdam  Oosteinde 11  •  1017 WT Amsterdam  •  +31 (0)20 522
4466
USA  • San Francisco  185 H Street Suite B  •  Petaluma CA 94952-5100 •  +1
(707) 773 4646
Canada    •   Montréal  5369 Boulevard St-Laurent #430 •  Montréal QC H2T
1S5  •  +1 (514) 316 8966
www.onehippo.com  •  www.onehippo.org  •  [email protected]

Reply via email to