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