Lookup caching is working. It's fairly heavy handed in its invalidation

strategy, but seems to give a 10-20% performance boost.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@4426 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Britt Park
2006-11-22 16:14:22 +00:00
parent 5b2edc8b58
commit d12551d5cc
8 changed files with 165 additions and 9 deletions

View File

@@ -51,6 +51,11 @@ public class LookupCache
*/
private AVMNodeDAO fAVMNodeDAO;
/**
* Reference to the Store DAO.
*/
private AVMStoreDAO fAVMStoreDAO;
/**
* Make one up.
*/
@@ -72,6 +77,15 @@ public class LookupCache
fAVMNodeDAO = dao;
}
/**
* Set the store dao.
* @param dao The dao to set.
*/
public void setAvmStoreDAO(AVMStoreDAO dao)
{
fAVMStoreDAO = dao;
}
/**
* Set the maximum cache size.
* @param maxSize
@@ -165,6 +179,38 @@ public class LookupCache
*/
private synchronized Lookup findInCache(LookupKey key)
{
Lookup found = fCache.get(key);
if (found != null)
{
Lookup result = new Lookup(found, fAVMNodeDAO, fAVMStoreDAO);
if (!result.isValid())
{
fgLogger.error("Invalid entry in cache: " + key);
onRollback();
return null;
}
updateCache(key, found);
return result;
}
// Alternatively for a read lookup a write can match.
if (!key.isWrite())
{
LookupKey newKey = new LookupKey(key);
newKey.setWrite(true);
found = fCache.get(newKey);
if (found != null)
{
Lookup result = new Lookup(found, fAVMNodeDAO, fAVMStoreDAO);
if (!result.isValid())
{
fgLogger.error("Invalid entry in cache: " + newKey);
onRollback();
return null;
}
updateCache(newKey, found);
return result;
}
}
return null;
}