oops. by "so totally sure" i meant "not totally sure", of course ;-)
Jonathan Locke wrote: > > > the original idea was that you might want to version pages some other way. > for example if you want to capture every last change to the page for sure > at the cost of some extra memory, you could do a deep clone. i have no > problem > with getting rid of the interface and making the entire implementation > private. > when i wrote this, it seemed there might be other ways to do this. in > hindsight, i > think this is a job for the framework alone and not something we want > people > mucking with. given that, i don't think it matters how ugly the > implementation > is so long as it writes out just the diffs (retrievals of disk stored > pages accessed > with the back button will be quite rare so a greater cost of > reconstructing is easily > offset by a cheaper cost of writing the diffs). conceptually it now seems > like the > design has shifted indeed and that the logical place to put all the > versioning is > down inside the pagemap implementation such that it shares that > information > with whatever session store is in use. the session store would use the > change > information however it wants. in that manner someone could write their > own > versioning code if they really wanted to. but it would be a private > implementation > detail of the session store that nobody should ever see. so page would > forward > info to pagemap and pagemap to session store impl. so totally sure if > that works > out completely, but it's a thought. > > btw, SecondLevelCacheSessionStore seems a little fuzzy to me as a name. > it presumes someone knows what a "second level cache" is. what about > something a little more direct like maybe FileBackedSessionStore? not > sure > i love that either, but it's maybe a little more obvious. > > > igor.vaynberg wrote: >> >> i dont even see the point of having an IPageVersionManager. it is tied to >> Change which has an undo() method, so what other kind of manager can you >> write except the undo one? >> >> -igor >> >> >> On 1/8/07, Eelco Hillenius <[EMAIL PROTECTED]> wrote: >>> >>> Hi, >>> >>> Currently, pages and versions of pages are stored separately. Pages >>> are stored in IPageMaps, and each page has a IPageVersionManager. By >>> default (and I wonder how many users actually ever did override this) >>> the IPageVersionManager is UndoPageVersionManager, which keeps a list >>> of changes in the instance. As the instance is kept as a reference of >>> the page, the size of a page in a session is the sum of the size of >>> the actual page at that time + the size of the list of all the >>> changes. This is regardless of how the PageMap/ session store works >>> unfortunately, and by default, you can have Integer.MAX versions. That >>> potentially fills up memory pretty badly if you do a lot of component >>> replacement. And Integer.MAX isn't the best guarantee to keep memory >>> down either. Furthermore, it works pretty lousy with the new session >>> store. That store saves every page/ version combination to disk, but >>> including the whole version manager (all versions), which is >>> inefficient. With this way of saving, you really don't need more than >>> one. Anyway, to make a long story short here is what I think we should >>> do: >>> >>> - Align pagemaps and version management so that pages and versions are >>> stored in, and retrieved from the same entity. >>> - Change the SecondLevelCacheSessionStore so that it either saves >>> pages without the version manager but rather exactly as they are at >>> that moment or save the first version as a full page, and subsequent >>> versions as changes. This would be my choice as it is more efficient >>> in especially storing it, and storing is the part having a greater >>> impact than retrieving. >>> - Page should only use a temporary instance of IPageVersionManager and >>> the newVersionManager method could be private imo as I don't see much >>> use now users being able to provide their own (in fact, we could get >>> rid of the IPageVersionManager interface). When endVersion is called, >>> the changes would be flushed and saved to the pagemap and the version >>> manager instance should be nulled. >>> >>> WDYT? >>> >>> Eelco >>> >> >> > > -- View this message in context: http://www.nabble.com/refactor-storing-pages-and-versions-tf2943670.html#a8232968 Sent from the Wicket - Dev mailing list archive at Nabble.com.