Fix for ALF-3952 - Search/Read Permissions Evaluation Performance

Includes read permission evaluation optimisation, bulk loading of aspects

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@21406 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Steven Glover
2010-07-26 12:44:30 +00:00
parent c5e0bf79ab
commit 5791f1e7fb
38 changed files with 3095 additions and 1774 deletions

View File

@@ -24,10 +24,12 @@
*/
package org.alfresco.repo.domain.permissions;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.alfresco.repo.cache.SimpleCache;
import org.alfresco.repo.domain.qname.QNameDAO;
@@ -72,6 +74,8 @@ public class AclDAOImpl implements AclDAO
/** a transactionally-safe cache to be injected */
private SimpleCache<Long, AccessControlList> aclCache;
private SimpleCache<Serializable, Set<String>> readersCache;
private enum WriteMode
{
/**
@@ -123,7 +127,15 @@ public class AclDAOImpl implements AclDAO
{
this.aclCache = aclCache;
}
/**
* @param readersCache the readersCache to set
*/
public void setReadersCache(SimpleCache<Serializable, Set<String>> readersCache)
{
this.readersCache = readersCache;
}
/* (non-Javadoc)
* @see org.alfresco.repo.domain.permissions.AclDAO#createAccessControlList()
*/
@@ -738,6 +750,8 @@ public class AclDAOImpl implements AclDAO
Long aceId = member.getAceId();
aclCache.remove(aclId);
readersCache.remove(aclId);
Acl list = aclCrudDAO.getAcl(aclId);
acls.add(new AclChangeImpl(aclId, aclId, list.getAclType(), list.getAclType()));
membersToDelete.add(aclMemberId);