Where is the serialization part?
I just see that you cache the page instance and nothing more.
Thats a bit wrong. Because the SessionPageKey stores a version number
But the page instance increments that version number everytime. So you can't
assume
that getPage() will return the one with the right version.

This one should be pretty performand! No serialization and no saving? :)

johan

On 2/15/07, Matej Knopp <[EMAIL PROTECTED]> wrote:

I've already replaced that implementation. I can paste here one from my
local history. Beware, this might not be the right version and I don't
know ehcache very well, I'm pretty sure there are ways to do this better.

Of course i've played with the cache configuration, this is probably not
something that works best.

-Matej

public class TestFilePageStore implements IPageStore
{
        /** log. */
        protected static Log log = LogFactory.getLog(
TestFilePageStore.class);

        private Cache cache;

        public TestFilePageStore()
        {
                CacheManager manager = CacheManager.create();
                String path =
((WebApplication)Application.get()).getServletContext().getAttribute(
                                "javax.servlet.context.tempdir
").toString();

                cache = new Cache("cache1", 50, true, true, 0, 0);
                manager.addCache(cache);
        }

        public void destroy()
        {
        }

        private static class SessionPageKey implements Serializable
        {
                private static final long serialVersionUID = 1L;

                private final String sessionId;
                private final int id;
                private final int versionNumber;
                private final int ajaxVersionNumber;
                private final String pageMap;

                SessionPageKey(String sessionId, Page page)
                {
                        this(sessionId, page.getNumericId(),
page.getCurrentVersionNumber(), page
                                        .getAjaxVersionNumber(),
page.getPageMap().getName());
                }

                SessionPageKey(String sessionId, int id, int
versionNumber, int
ajaxVersionNumber,
                                String pagemap)
                {
                        this.sessionId = sessionId;
                        this.id = id;
                        this.versionNumber = versionNumber;
                        this.ajaxVersionNumber = ajaxVersionNumber;
                        this.pageMap = pagemap;
                }

                /**
                 * @see java.lang.Object#hashCode()
                 */
                public int hashCode()
                {
                        return sessionId.hashCode() + id * 13 +
versionNumber;
                }

                /**
                 * @see java.lang.Object#equals(java.lang.Object)
                 */
                public boolean equals(Object obj)
                {
                        if (obj instanceof SessionPageKey)
                        {
                                SessionPageKey key = (SessionPageKey)obj;
                                return id == key.id
                                                && versionNumber ==
key.versionNumber
                                                && ajaxVersionNumber ==
key.ajaxVersionNumber
                                                && ((pageMap != null &&
pageMap.equals(key.pageMap)) || (pageMap
== null && key.pageMap == null))
                                                && sessionId.equals(
key.sessionId);
                        }
                        return false;
                }

                /**
                 * @see java.lang.Object#toString()
                 */
                public String toString()
                {
                        return "SessionPageKey[" + sessionId + "," + id +
"," + versionNumber
+ ","
                                        + ajaxVersionNumber + ", " +
pageMap + "]";
                }
        }


        public Page getPage(String sessionId, String pagemap, int id, int
versionNumber, int ajaxVersionNumber)
        {
                SessionPageKey key = new SessionPageKey(sessionId, id,
versionNumber,
ajaxVersionNumber, pagemap);
                return (Page) cache.get(key).getValue();

        }

        public void pageAccessed(String sessionId, Page page)
        {
        }

        public void removePage(String sessionId, Page page)
        {
        }

        public void storePage(String sessionId, Page page)
        {
                SessionPageKey key = new SessionPageKey(sessionId, page);
                cache.put(new Element(key, page));
        }

        public void unbind(String sessionId)
        {
                List keys = cache.getKeys();
                for (Iterator i = keys.iterator(); i.hasNext(); ) {
                        SessionPageKey key = (SessionPageKey) i.next();
                        if (key.sessionId.equals(sessionId))
                                cache.remove(key);
                }
        }


Andrew Klochkov wrote:
> Johan Compagner wrote:
>> and i am completely not suprised that ehcache was not performing
better.
>> How could it do that?? Where should the gain come from?
>> The current impl really grows directly with the hardware you have.
>> ehcache need to be tweaked exactly
>> what your system can handle. What do you say then? 200 page? 2000
>> pages? What does that cost?
> Although I don't know all details of wicket needs for caching yet but
> I'll try to explain my idea.
>
> I think that storing every page on the disk is not good. With ehcache we
> can create a cache with limited in-memory size and unlimited on-disk
> size. Then we'll put every page in the cache, and when we'll access
> frequently used pages - they'll be got from memory, others will be read
> from the disk. That's where it can perform better - working with the
> file system only when it's really needed. And also there threading
> issues which are solved and tested in ehcache.
>
> Matej, can you share you ehcache impl?
>


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share
your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Wicket-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-user

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Wicket-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to