]> source.dussan.org Git - archiva.git/commitdiff
[MRM-1732] dynamic configuration of users cache
authorOlivier Lamy <olamy@apache.org>
Fri, 21 Dec 2012 17:53:59 +0000 (17:53 +0000)
committerOlivier Lamy <olamy@apache.org>
Fri, 21 Dec 2012 17:53:59 +0000 (17:53 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1425052 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRedbackRuntimeConfigurationService.java
archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaConfigurableUsersManager.java
archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/general-admin.js
archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/templates/archiva/general-admin.html

index 362f093d8f3e6b2b07d2f10fafadefd35246ccbd..eb2e22383c92873b724ac7c92e534f6e7b65669b 100644 (file)
@@ -28,6 +28,7 @@ import org.apache.archiva.redback.common.ldap.connection.LdapConnection;
 import org.apache.archiva.redback.common.ldap.connection.LdapConnectionConfiguration;
 import org.apache.archiva.redback.common.ldap.connection.LdapConnectionFactory;
 import org.apache.archiva.redback.common.ldap.connection.LdapException;
+import org.apache.archiva.redback.components.cache.Cache;
 import org.apache.archiva.redback.policy.CookieSettings;
 import org.apache.archiva.redback.policy.PasswordRule;
 import org.apache.archiva.redback.users.UserManager;
@@ -71,6 +72,10 @@ public class DefaultRedbackRuntimeConfigurationService
     @Named(value = "ldapConnectionFactory#configurable")
     private LdapConnectionFactory ldapConnectionFactory;
 
+    @Inject
+    @Named( value = "cache#users" )
+    private Cache usersCache;
+
     public RedbackRuntimeConfiguration getRedbackRuntimeConfiguration()
         throws ArchivaRestServiceException
     {
@@ -131,6 +136,10 @@ public class DefaultRedbackRuntimeConfigurationService
                 authenticator.initialize();
             }
 
+            // users cache
+            usersCache.setTimeToIdleSeconds( redbackRuntimeConfiguration.getUseUsersCacheTimeToIdleSeconds() );
+            usersCache.setTimeToLiveSeconds( redbackRuntimeConfiguration.getUseUsersCacheTimeToLiveSeconds() );
+
             return Boolean.TRUE;
         }
         catch ( AuthenticationException e )
index f73785d7fc3890999890c9904d172b894afe8dcd..e601643fca2cdd537db609fbba0de819ad62d7c2 100644 (file)
@@ -261,6 +261,10 @@ public class ArchivaConfigurableUsersManager
                 user = userManager.getGuestUser();
                 if ( user != null )
                 {
+                    if ( useUsersCache() )
+                    {
+                        usersCache.put( user.getUsername(), user );
+                    }
                     return user;
                 }
             }
index 9b5fd25eb9c6b51395ff87c01860e334c83743d4..aa80ffb3bc2729dcc1e77ba1b054e97337e75856 100644 (file)
@@ -1152,7 +1152,7 @@ define("archiva.general-admin",["jquery","i18n","utils","jquery.tmpl","knockout"
 
 
   RedbackRuntimeConfiguration=function(userManagerImpls,ldapConfiguration,migratedFromRedbackConfiguration,configurationPropertiesEntries
-                                      ,useUsersCache){
+                                      ,useUsersCache,useUsersCacheTimeToIdleSeconds,useUsersCacheTimeToLiveSeconds){
     $.log("new RedbackRuntimeConfiguration");
     var self=this;
     this.modified=ko.observable(false);
@@ -1188,6 +1188,13 @@ define("archiva.general-admin",["jquery","i18n","utils","jquery.tmpl","knockout"
 
     this.useUsersCache=ko.observable(useUsersCache);
     this.useUsersCache.subscribe(function(newValue){self.modified(true)});
+
+    this.useUsersCacheTimeToIdleSeconds=ko.observable(useUsersCacheTimeToIdleSeconds);
+    this.useUsersCacheTimeToIdleSeconds.subscribe(function(newValue){self.modified(true)});
+
+    this.useUsersCacheTimeToLiveSeconds=ko.observable(useUsersCacheTimeToLiveSeconds);
+    this.useUsersCacheTimeToLiveSeconds.subscribe(function(newValue){self.modified(true)});
+
   }
 
   mapRedbackRuntimeConfiguration=function(data){
@@ -1196,7 +1203,8 @@ define("archiva.general-admin",["jquery","i18n","utils","jquery.tmpl","knockout"
     $.log("mapLdapConfiguration done for ");
 
     var redbackRuntimeConfiguration =
-            new RedbackRuntimeConfiguration(data.userManagerImpls,ldapConfiguration,data.migratedFromRedbackConfiguration,[],data.useUsersCache);
+            new RedbackRuntimeConfiguration(data.userManagerImpls,ldapConfiguration,data.migratedFromRedbackConfiguration,[]
+                    ,data.useUsersCache,data.useUsersCacheTimeToIdleSeconds,data.useUsersCacheTimeToLiveSeconds);
 
     $.log("mapRedbackRuntimeConfiguration done");
     var configurationPropertiesEntries = data.configurationPropertiesEntries == null ? []: $.each(data.configurationPropertiesEntries,function(item){
index f49127623f45ff048b0eac6aaa1e604dd57347aa..bc6caebd74d057a73aef82ecdcc02094cae55dd9 100644 (file)
     <li class="active" id="redback-runtime-general-li"><a href="#redback-runtime-general-content" data-toggle="tab">${$.i18n.prop('redback.runtime.general.title')}</a></li>
     <li id="redback-runtime-ldap-li"><a href="#redback-runtime-ldap-content" data-toggle="tab">${$.i18n.prop('redback.runtime.ldap.title')}</a></li>
     <li id="redback-runtime-properties-li"><a href="#redback-runtime-properties-content" data-toggle="tab">${$.i18n.prop('redback.runtime.properties.title')}</a></li>
+    <li id="redback-runtime-users-cache-li"><a href="#redback-runtime-users-cache-content" data-toggle="tab">${$.i18n.prop('redback.runtime.users.cache.title')}</a></li>
   </ul>
 
   <div class="tab-content">
     <div class="tab-pane active" id="redback-runtime-general-content">
       <div class="well">
-        <div class="row-fluid">
-          <form class="form-horizontal" id="redback-runtime-general-form-id">
-            <div class="control-group">
-              <label for="redback-runtime-useUsersCache" class="control-label">
-                ${$.i18n.prop('redback.runtime.useUsersCache.label')}
-              </label>
-              <div class="controls">
-                <input type="checkbox" id="redback-runtime-useUsersCache" name="redback-runtime-useUsersCache"
-                       data-bind="checked: redbackRuntimeConfiguration().useUsersCache"/>
-              </div>
-            </div>
-          </form>
-        </div>
-        <hr/>
         <div class="row-fluid">
           <div class="span4 dotted">
             <h5>${$.i18n.prop('redback.runtime.user-managers.impls.choosed')}</h5>
         </table>
         <div id="properties-grid-pagination"></div>
       </div>
-  </div>
+    </div>
+
+    <div class="tab-pane" id="redback-runtime-users-cache-content">
+
+      <div class="well">
+
+
+          <form class="form-horizontal" id="redback-runtime-general-form-id">
+            <div class="control-group">
+              <label for="redback-runtime-useUsersCache" class="control-label">${$.i18n.prop('redback.runtime.useUsersCache.label')}</label>
+              <div class="controls">
+                <input type="checkbox" id="redback-runtime-useUsersCache" name="redback-runtime-useUsersCache"
+                       data-bind="checked: redbackRuntimeConfiguration().useUsersCache"/>
+              </div>
+            </div>
+
+            <div class="control-group">
+              <label class="control-label" for="useUsersCacheTimeToLiveSeconds">${$.i18n.prop('redback.runtime.useUsersCacheTimeToLiveSeconds.label')}</label>
+              <div class="controls">
+                <input type="text" class="xlarge required numeric" data-bind="value: redbackRuntimeConfiguration().useUsersCacheTimeToLiveSeconds"
+                       id="useUsersCacheTimeToLiveSeconds" name="useUsersCacheTimeToLiveSeconds" />
+              </div>
+            </div>
+
+            <div class="control-group">
+              <label class="control-label" for="useUsersCacheTimeToIdleSeconds">${$.i18n.prop('redback.runtime.useUsersCacheTimeToIdleSeconds.label')}</label>
+              <div class="controls">
+                <input type="text" class="xlarge required numeric" data-bind="value: redbackRuntimeConfiguration().useUsersCacheTimeToIdleSeconds"
+                       id="useUsersCacheTimeToIdleSeconds" name="useUsersCacheTimeToIdleSeconds" />
+              </div>
+            </div>
+
+          </form>
+
+
+      </div>
+    </div>
 
   <div>
     <button data-bind="click: saveRedbackRuntimeConfiguration,css:{ 'btn-warning': redbackRuntimeConfiguration().modified() | redbackRuntimeConfiguration().ldapConfiguration().modified()  }"