[java-identity-provider COMMIT] in /trunk/idp-attribute-resolver-spring/src: main/java/net/shibboleth/idp/attribute/r...

noreply at shibboleth.net noreply at shibboleth.net
Sun Sep 29 23:53:23 EDT 2013


Author: dfisher
Date: Sun Sep 29 23:53:22 2013
New Revision: 4809

URL: http://svn.shibboleth.net/view/java-identity-provider?rev=4809&view=rev
Log:
Add support for results caching using a Guava cache.
Add support for deprecated v2 pool size configuration.
See IDP-4.

Added:
    trunk/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/GuavaCache.java   (with props)
Modified:
    trunk/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/LdapDataConnectorParser.java
    trunk/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring.xml
    trunk/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-v2.xml

Modified: trunk/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/LdapDataConnectorParser.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/LdapDataConnectorParser.java?rev=4809&r1=4808&r2=4809&view=diff
==============================================================================
--- trunk/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/LdapDataConnectorParser.java (original)
+++ trunk/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/LdapDataConnectorParser.java Sun Sep 29 23:53:22 2013
@@ -20,6 +20,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 import java.security.PrivateKey;
 import java.security.cert.X509Certificate;
 
@@ -42,7 +43,9 @@
 import org.ldaptive.DefaultConnectionFactory;
 import org.ldaptive.SearchExecutor;
 import org.ldaptive.SearchFilter;
+import org.ldaptive.SearchRequest;
 import org.ldaptive.SearchScope;
+import org.ldaptive.cache.Cache;
 import org.ldaptive.handler.CaseChangeEntryHandler;
 import org.ldaptive.handler.CaseChangeEntryHandler.CaseChange;
 import org.ldaptive.handler.MergeAttributeEntryHandler;
@@ -135,10 +138,6 @@
 
         final V2Parser v2Parser = new V2Parser(config);
 
-        // TODO deprecated, should throw exception?
-        // final String poolInitialSize = config.getAttribute("poolInitialSize");
-        // final String poolMaxIdleSize = config.getAttribute("poolMaxIdleSize");
-
         final Boolean noResultAnError =
                 AttributeSupport.getAttributeValueAsBoolean(AttributeSupport.getAttribute(config, new QName(
                         "noResultIsError")));
@@ -180,7 +179,6 @@
             builder.addPropertyValue("connectionFactory", connectionFactory);
         }
 
-        // TODO add support for cacheResults and ResultCache
         final SearchExecutor searchExecutor = v2Parser.createSearchExecutor();
 
         builder.addPropertyValue("searchExecutor", searchExecutor);
@@ -253,7 +251,7 @@
 
         /**
          * Uses {@link X509CredentialSupport} to read StartTLS trust and authentication credentials.
-         *
+         * 
          * @return credential config
          */
         @Nonnull protected CredentialConfig createCredentialConfig() {
@@ -372,7 +370,40 @@
                 filter = filterElement.getTextContent().trim();
                 searchExecutor.setSearchFilter(new SearchFilter(filter));
             }
+
+            final Cache<SearchRequest> cache = createCache();
+            if (cache != null) {
+                searchExecutor.setSearchCache(cache);
+            }
             return searchExecutor;
+        }
+
+        /**
+         * Creates a new cache from a v2 XML configuration.
+         * 
+         * @return cache
+         */
+        @Nullable protected Cache<SearchRequest> createCache() {
+            final Element cacheElement =
+                    ElementSupport.getFirstChildElement(configElement, new QName(
+                            DataConnectorNamespaceHandler.NAMESPACE, "ResultCache"));
+            if (cacheElement == null) {
+                final Boolean cacheResults =
+                        AttributeSupport.getAttributeValueAsBoolean(AttributeSupport.getAttribute(configElement,
+                                new QName("cacheResults")));
+                if (cacheResults != null && cacheResults.booleanValue()) {
+                    return new GuavaCache(500, 4 * 60 * 60);
+                } else {
+                    return null;
+                }
+            }
+
+            final Long timeToLive =
+                    AttributeSupport.getDurationAttributeValueAsLong(AttributeSupport.getAttribute(cacheElement,
+                            new QName("elementTimeToLive")));
+            final String maximumSize =
+                    AttributeSupport.getAttributeValue(cacheElement, new QName("maximumCachedElements"));
+            return new GuavaCache(Long.parseLong(maximumSize), TimeUnit.MILLISECONDS.toSeconds(timeToLive));
         }

[... 74 lines stripped ...]


More information about the commits mailing list