Author: olamy
Date: Wed Jan 23 10:31:19 2013
New Revision: 1437326
URL: http://svn.apache.org/viewvc?rev=1437326&view=rev
Log:
add some caching for userAssignement in LdapRbacManager
Modified:
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main/java/org/apache/archiva/redback/rbac/ldap/LdapRbacManager.java
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/test/resources/spring-context.xml
Modified:
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main/java/org/apache/archiva/redback/rbac/ldap/LdapRbacManager.java
URL:
http://svn.apache.org/viewvc/archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main/java/org/apache/archiva/redback/rbac/ldap/LdapRbacManager.java?rev=1437326&r1=1437325&r2=1437326&view=diff
==============================================================================
---
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main/java/org/apache/archiva/redback/rbac/ldap/LdapRbacManager.java
(original)
+++
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main/java/org/apache/archiva/redback/rbac/ldap/LdapRbacManager.java
Wed Jan 23 10:31:19 2013
@@ -106,8 +106,11 @@ public class LdapRbacManager
@Named( value = "cache#ldapRoles" )
private Cache<String, Role> rolesCache;
- private boolean writableLdap = false;
+ @Inject
+ @Named( value = "cache#userAssignments" )
+ private Cache<String, UserAssignment> userAssignmentsCache;
+ private boolean writableLdap = false;
@PostConstruct
public void initialize()
@@ -191,6 +194,7 @@ public class LdapRbacManager
}
}
this.rolesCache.clear();
+ this.userAssignmentsCache.clear();
this.rbacImpl.eraseDatabase();
}
@@ -286,6 +290,7 @@ public class LdapRbacManager
{
UserAssignment userAssignment = new UserAssignmentImpl(
entry.getKey(), entry.getValue() );
userAssignments.add( userAssignment );
+ userAssignmentsCache.put( userAssignment.getPrincipal(),
userAssignment );
}
return userAssignments;
@@ -575,6 +580,11 @@ public class LdapRbacManager
public UserAssignment getUserAssignment( String username )
throws RbacManagerException
{
+ UserAssignment ua = userAssignmentsCache.get( username );
+ if ( ua != null )
+ {
+ return ua;
+ }
LdapConnection ldapConnection = null;
DirContext context = null;
try
@@ -583,7 +593,11 @@ public class LdapRbacManager
context = ldapConnection.getDirContext();
List<String> roles = ldapRoleMapper.getRoles( username, context,
getRealRoles() );
- return new UserAssignmentImpl( username, roles );
+ ua = new UserAssignmentImpl( username, roles );
+
+ userAssignmentsCache.put( username, ua );
+
+ return ua;
}
catch ( MappingException e )
{
@@ -778,12 +792,17 @@ public class LdapRbacManager
throws RbacManagerException
{
// TODO ldap cannot or isWritable ldap ?
+ userAssignmentsCache.remove( username );
this.rbacImpl.removeUserAssignment( username );
}
public void removeUserAssignment( UserAssignment userAssignment )
throws RbacManagerException
{
+ if ( userAssignment != null )
+ {
+ userAssignmentsCache.remove( userAssignment.getPrincipal() );
+ }
// TODO ldap cannot or isWritable ldap ?
this.rbacImpl.removeUserAssignment( userAssignment );
}
@@ -977,6 +996,7 @@ public class LdapRbacManager
}
}
+ userAssignmentsCache.put( userAssignment.getPrincipal(),
userAssignment );
return userAssignment;
}
catch ( UserManagerException e )
@@ -1000,6 +1020,10 @@ public class LdapRbacManager
public boolean userAssignmentExists( String principal )
{
+ if ( userAssignmentsCache.hasKey( principal ) )
+ {
+ return true;
+ }
LdapConnection ldapConnection = null;
DirContext context = null;
try
Modified:
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/test/resources/spring-context.xml
URL:
http://svn.apache.org/viewvc/archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/test/resources/spring-context.xml?rev=1437326&r1=1437325&r2=1437326&view=diff
==============================================================================
---
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/test/resources/spring-context.xml
(original)
+++
archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/test/resources/spring-context.xml
Wed Jan 23 10:31:19 2013
@@ -108,15 +108,7 @@
<property name="userPermissionsCache" ref="cache#userPermissions"/>
</bean>
- <bean name="cache#userAssignments"
class="org.apache.archiva.redback.components.cache.ehcache.EhcacheCache"
- init-method="initialize">
- <property name="diskPersistent" value="false"/>
- <property name="eternal" value="false"/>
- <property name="maxElementsInMemory" value="1000"/>
- <property name="memoryEvictionPolicy" value="LRU"/>
- <property name="name" value="userAssignments"/>
- <property name="timeToIdleSeconds" value="300"/>
- <property name="timeToLiveSeconds" value="600"/>
+ <bean name="cache#userAssignments"
class="org.apache.archiva.redback.components.cache.impl.NoCacheCache">
</bean>
<bean name="cache#userPermissions"
class="org.apache.archiva.redback.components.cache.ehcache.EhcacheCache"