[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