You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2013/01/19 17:38:38 UTC
svn commit: r1435593 - in
/archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main:
java/org/apache/archiva/redback/rbac/ldap/LdapRbacManager.java
resources/META-INF/spring-context.xml
Author: olamy
Date: Sat Jan 19 16:38:38 2013
New Revision: 1435593
URL: http://svn.apache.org/viewvc?rev=1435593&view=rev
Log:
use cache for ldap roles
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/main/resources/META-INF/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=1435593&r1=1435592&r2=1435593&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 Sat Jan 19 16:38:38 2013
@@ -102,8 +102,13 @@ public class LdapRbacManager
@Inject
private LdapController ldapController;
+ @Inject
+ @Named( value = "cache#ldapRoles" )
+ private Cache<String, Role> rolesCache;
+
private boolean writableLdap = false;
+
@PostConstruct
public void initialize()
{
@@ -472,6 +477,11 @@ public class LdapRbacManager
throws RbacManagerException
{
+ Role role = rolesCache.get( roleName );
+ if ( role != null )
+ {
+ return role;
+ }
LdapConnection ldapConnection = null;
DirContext context = null;
//verify it's a ldap group
@@ -492,9 +502,12 @@ public class LdapRbacManager
{
throw new RbacManagerException( e.getMessage(), e );
}
- Role role = this.rbacImpl.getRole( roleName );
- return ( role == null ) ? new RoleImpl( roleName ) : role;
+ role = this.rbacImpl.getRole( roleName );
+ role = ( role == null ) ? new RoleImpl( roleName ) : role;
+
+ rolesCache.put( roleName, role );
+ return role;
}
public Map<String, Role> getRoles( Collection<String> roleNames )
@@ -715,6 +728,7 @@ public class LdapRbacManager
{
throw new RbacPermanentException( "Unable to delete permanent role [" + role.getName() + "]" );
}
+ rolesCache.remove( role.getName() );
if ( writableLdap )
{
LdapConnection ldapConnection = null;
@@ -790,12 +804,20 @@ public class LdapRbacManager
{
return false;
}
+ if ( rolesCache.get( name ) != null )
+ {
+ return true;
+ }
LdapConnection ldapConnection = null;
DirContext context = null;
try
{
ldapConnection = ldapConnectionFactory.getConnection();
context = ldapConnection.getDirContext();
+ if ( rolesCache.hasKey( name ) )
+ {
+ return true;
+ }
return ldapRoleMapper.hasRole( context, name );
}
catch ( MappingException e )
@@ -843,6 +865,7 @@ public class LdapRbacManager
ldapConnection = ldapConnectionFactory.getConnection();
context = ldapConnection.getDirContext();
ldapRoleMapper.saveRole( role.getName(), context );
+
if ( !role.getChildRoleNames().isEmpty() )
{
for ( String roleName : role.getChildRoleNames() )
@@ -861,7 +884,10 @@ public class LdapRbacManager
throw new RbacManagerException( e.getMessage(), e );
}
}
- return this.rbacImpl.saveRole( role );
+ role = this.rbacImpl.saveRole( role );
+ rolesCache.put( role.getName(), role );
+
+ return role;
//return new RoleImpl( role.getName(), role.getPermissions() );
}
Modified: archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main/resources/META-INF/spring-context.xml
URL: http://svn.apache.org/viewvc/archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main/resources/META-INF/spring-context.xml?rev=1435593&r1=1435592&r2=1435593&view=diff
==============================================================================
--- archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main/resources/META-INF/spring-context.xml (original)
+++ archiva/redback/redback-core/trunk/redback-rbac/redback-rbac-providers/redback-rbac-ldap/src/main/resources/META-INF/spring-context.xml Sat Jan 19 16:38:38 2013
@@ -31,4 +31,15 @@
<context:component-scan
base-package="org.apache.archiva.redback.rbac.ldap"/>
+ <bean name="cache#ldapRoles" 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="ldapRoles"/>
+ <property name="timeToIdleSeconds" value="300"/>
+ <property name="timeToLiveSeconds" value="600"/>
+ </bean>
+
</beans>
\ No newline at end of file