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