[java-shib-attribute] branch main updated: IDP-2035 data connectors orphan connections
Daniel Fisher
dfisher at vt.edu
Mon Dec 12 04:39:36 UTC 2022
This is an automated email from the git hooks/post-receive script.
dfisher pushed a commit to branch main
in repository java-shib-attribute.
View the commit online:
http://git.shibboleth.net/view/?p=java-shib-attribute.git;a=commit;h=75126c7a92b503a2eabdcd1479047d4bb1832cbc
The following commit(s) were added to refs/heads/main by this push:
new 75126c7a9 IDP-2035 data connectors orphan connections
75126c7a9 is described below
commit 75126c7a92b503a2eabdcd1479047d4bb1832cbc
Author: Daniel Fisher <dfisher at vt.edu>
AuthorDate: Thu Nov 17 20:12:45 2022 -0500
IDP-2035 data connectors orphan connections
https://shibboleth.atlassian.net/browse/IDP-2035
Change the Validator interface to accept the data connector as a parameter.
Update the LDAP and RDBMS connector parsers to use new validator implementations.
Change the RDBMS and LDAP data connectors to always have validators throw on failure during initialize.
Set LDAP connection factory destroy method.
---
.../resolver/dc/NonFailFastValidator.java | 5 +-
.../idp/attribute/resolver/dc/Validator.java | 12 ++-
.../resolver/dc/http/impl/HTTPDataConnector.java | 3 +-
.../dc/ldap/impl/ConnectionFactoryValidator.java | 43 ++------
.../resolver/dc/ldap/impl/LDAPDataConnector.java | 24 ++---
.../dc/rdbms/impl/DataSourceValidator.java | 108 +++++++--------------
.../resolver/dc/rdbms/impl/RDBMSDataConnector.java | 24 ++---
.../storage/impl/StorageServiceDataConnector.java | 5 +-
.../dc/ldap/impl/LDAPDataConnectorTest.java | 3 -
.../dc/rdbms/impl/RDBMSDataConnectorTest.java | 6 +-
.../dc/ldap/impl/LDAPDataConnectorParser.java | 40 ++------
.../dc/rdbms/impl/RDBMSDataConnectorParser.java | 24 +----
.../dc/ldap/impl/LDAPDataConnectorParserTest.java | 12 +--
.../rdbms/impl/RDBMSDataConnectorParserTest.java | 1 -
.../ldap-attribute-resolver-spring-context.xml | 4 +-
.../rdbms-attribute-resolver-spring-context.xml | 2 +-
16 files changed, 96 insertions(+), 220 deletions(-)
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/NonFailFastValidator.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/NonFailFastValidator.java
index 90340af0a..408a8b218 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/NonFailFastValidator.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/NonFailFastValidator.java
@@ -21,6 +21,7 @@ import javax.annotation.Nullable;
import org.slf4j.LoggerFactory;
+import net.shibboleth.idp.attribute.resolver.DataConnector;
import net.shibboleth.shared.primitive.DeprecationSupport;
import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
@@ -52,10 +53,10 @@ public class NonFailFastValidator implements Validator {
/** {@inheritDoc} */
@Override
- public void validate() throws ValidationException {
+ public void validate(final DataConnector dataConnector) throws ValidationException {
if (embeddedValidator != null) {
try {
- embeddedValidator.validate();
+ embeddedValidator.validate(dataConnector);
} catch (final ValidationException e) {
LoggerFactory.getLogger(NonFailFastValidator.class).warn(
"Non-fail-fast validator trapped an error from its embedded validator", e);
diff --git a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/Validator.java b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/Validator.java
index 13f6adcb8..7dc22cba7 100644
--- a/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/Validator.java
+++ b/shib-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/Validator.java
@@ -17,6 +17,8 @@
package net.shibboleth.idp.attribute.resolver.dc;
+import net.shibboleth.idp.attribute.resolver.DataConnector;
+
/** Used to determine whether a Data Connector initialized properly and continues to be fit for use. */
public interface Validator {
@@ -25,19 +27,19 @@ public interface Validator {
*
* @throws ValidationException thrown if validation fails and {@link #isThrowValidateError()} is true
*/
- void validate() throws ValidationException;
+ void validate(DataConnector dataConnector) throws ValidationException;
/**
- * Sets whether {@link #validate()} should throw or log errors.
+ * Sets whether {@link #validate(DataConnector)} should throw or log errors.
*
- * @param what whether {@link #validate()} should throw or log errors
+ * @param what whether {@link #validate(DataConnector)} should throw or log errors
*/
void setThrowValidateError(final boolean what);
/**
- * Returns whether {@link #validate()} should throw or log errors.
+ * Returns whether {@link #validate(DataConnector)} should throw or log errors.
*
- * @return whether {@link #validate()} should throw or log errors
+ * @return whether {@link #validate(DataConnector)} should throw or log errors
*/
boolean isThrowValidateError();
}
\ No newline at end of file
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
index 3fcd0b87d..31d806f57 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
@@ -31,6 +31,7 @@ import org.apache.http.client.HttpClient;
import org.opensaml.security.httpclient.HttpClientSecurityParameters;
import net.shibboleth.idp.attribute.IdPAttribute;
+import net.shibboleth.idp.attribute.resolver.DataConnector;
import net.shibboleth.idp.attribute.resolver.ResolutionException;
import net.shibboleth.idp.attribute.resolver.dc.ValidationException;
import net.shibboleth.idp.attribute.resolver.dc.Validator;
@@ -56,7 +57,7 @@ public class HTTPDataConnector extends AbstractSearchDataConnector<HTTPSearch,HT
/** Constructor. */
public HTTPDataConnector() {
setValidator(new Validator() {
- public void validate() throws ValidationException {
+ public void validate(final DataConnector dataConnector) throws ValidationException {
}
public void setThrowValidateError(final boolean what) {
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/ConnectionFactoryValidator.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/ConnectionFactoryValidator.java
index 4c37eec95..7c113676c 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/ConnectionFactoryValidator.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/ConnectionFactoryValidator.java
@@ -18,7 +18,6 @@
package net.shibboleth.idp.attribute.resolver.dc.ldap.impl;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.ldaptive.Connection;
import org.ldaptive.ConnectionFactory;
@@ -26,9 +25,9 @@ import org.ldaptive.LdapException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import net.shibboleth.idp.attribute.resolver.DataConnector;
import net.shibboleth.idp.attribute.resolver.dc.ValidationException;
import net.shibboleth.idp.attribute.resolver.dc.Validator;
-import net.shibboleth.shared.logic.Constraint;
/**
* Validator implementation that invokes {@link Connection#open()} to determine if the ConnectionFactory is properly
@@ -39,51 +38,27 @@ public class ConnectionFactoryValidator implements Validator {
/** Class logger. */
@Nonnull private final Logger log = LoggerFactory.getLogger(ConnectionFactoryValidator.class);
- /** Connection factory to validate. */
- @Nullable private ConnectionFactory connectionFactory;
-
- /** Whether validate should throw, default value is <code>true</code>. */
+ /** Whether validate should throw. */
private boolean throwOnValidateError;
-
- /**
- * Constructor.
- *
- */
- public ConnectionFactoryValidator() {
- }
-
- /**
- * Sets the connection factory.
- *
- * @param factory the connection factory
- */
- public void setConnectionFactory(@Nonnull final ConnectionFactory factory) {
- connectionFactory = Constraint.isNotNull(factory, "Connection factory must be non-null");
- }
-
-
- /**
- * Returns the connection factory.
- *
- * @return connection factory
- */
- @Nullable public ConnectionFactory getConnectionFactory() {
- return connectionFactory;
- }
/** {@inheritDoc} */
+ @Override
public void setThrowValidateError(final boolean what) {
throwOnValidateError = what;
}
/** {@inheritDoc} */
+ @Override
public boolean isThrowValidateError() {
return throwOnValidateError;
}
/** {@inheritDoc} */
- @Override public void validate() throws ValidationException {
-
+ @Override public void validate(final DataConnector dataConnector) throws ValidationException {
+ if (!(dataConnector instanceof LDAPDataConnector)) {
+ throw new ValidationException("DataConnector must be of type LDAPDataConnector");
+ }
+ final ConnectionFactory connectionFactory = ((LDAPDataConnector) dataConnector).getConnectionFactory();
if (connectionFactory == null) {
log.error("No connection factory installed");
if (isThrowValidateError()) {
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java
index f786684ad..6d661a86d 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnector.java
@@ -67,12 +67,6 @@ public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSea
/** Whether the default mapping strategy is being used. */
private boolean defaultMappingStrategy = true;
- /**
- * Constructor.
- */
- public LDAPDataConnector() {
- }
-
/**
* Gets the connection factory for retrieving {@link Connection}s.
*
@@ -134,35 +128,30 @@ public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSea
if (defaultValidator) {
final ConnectionFactoryValidator validator = new ConnectionFactoryValidator();
- validator.setConnectionFactory(connectionFactory);
super.setValidator(validator);
}
- getValidator().setThrowValidateError(isFailFastInitialize());
if (defaultMappingStrategy) {
super.setMappingStrategy(new StringAttributeValueMappingStrategy());
}
super.doInitialize();
+ // validator should defer to data connector fail-fast-initialize during #initialize
+ final boolean throwValidateError = getValidator().isThrowValidateError();
try {
- getValidator().validate();
+ getValidator().setThrowValidateError(isFailFastInitialize());
+ getValidator().validate(this);
} catch (final ValidationException e) {
log.error("{} Invalid connector configuration", getLogPrefix(), e);
if (isFailFastInitialize()) {
// Should always follow this leg.
throw new ComponentInitializationException(getLogPrefix() + " Invalid connector configuration", e);
}
+ } finally {
+ getValidator().setThrowValidateError(throwValidateError);
}
policeForJVMTrust();
}
- /** {@inheritDoc} */
- @Override protected void doDestroy() {
- if (connectionFactory != null) {
- log.info("{} Closing LDAP connection factory", getLogPrefix());
- connectionFactory.close();
- }
- }
-
// CheckStyle: CyclomaticComplexity OFF
/** Police TLS for JVM trust.
* @throws ComponentInitializationException if we detect an SSL issue
@@ -215,5 +204,4 @@ public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSea
throw new ResolutionException(getLogPrefix() + " Unable to execute LDAP search", e);
}
}
-
}
\ No newline at end of file
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/DataSourceValidator.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/DataSourceValidator.java
index 13ce2f326..e07c43c0e 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/DataSourceValidator.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/DataSourceValidator.java
@@ -20,114 +20,80 @@ package net.shibboleth.idp.attribute.resolver.dc.rdbms.impl;
import java.sql.Connection;
import java.sql.SQLException;
-import javax.annotation.Nonnull;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import net.shibboleth.idp.attribute.resolver.DataConnector;
import net.shibboleth.idp.attribute.resolver.dc.ValidationException;
import net.shibboleth.idp.attribute.resolver.dc.Validator;
-import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.shared.component.AbstractInitializableComponent;
-import net.shibboleth.shared.component.ComponentInitializationException;
-import net.shibboleth.shared.logic.Constraint;
/**
* Validator implementation that invokes {@link DataSource#getConnection()} to determine if the DataSource is properly
* configured.
*/
-public class DataSourceValidator extends AbstractInitializableComponent implements Validator {
+public class DataSourceValidator implements Validator {
/** Class logger. */
private final Logger log = LoggerFactory.getLogger(DataSourceValidator.class);
- /** JDBC data source to validate. */
- @NonnullAfterInit private DataSource dataSource;
-
/** Whether validate should throw, default value is <code>true</code>. */
private boolean throwOnValidateError;
- /**
- * Constructor.
- *
- */
- public DataSourceValidator() {
- }
-
/** {@inheritDoc} */
@Override
- protected void doInitialize() throws ComponentInitializationException {
- super.doInitialize();
-
- if (null == dataSource) {
- throw new ComponentInitializationException("DataSourceValidator: Data Source should not be null");
- }
- }
-
- /**
- * Sets the data source.
- *
- * @param source the data source
- */
- public void setDataSource(@Nonnull final DataSource source) {
- checkSetterPreconditions();
- dataSource = Constraint.isNotNull(source, "Data Source should not be null");
- }
-
-
- /**
- * Returns the data source.
- *
- * @return data source
- */
- public DataSource getDataSource() {
- return dataSource;
- }
-
- /** {@inheritDoc} */
public void setThrowValidateError(final boolean value) {
- checkSetterPreconditions();
throwOnValidateError = value;
}
-
/** {@inheritDoc} */
+ @Override
public boolean isThrowValidateError() {
return throwOnValidateError;
}
/** {@inheritDoc} */
- @Override public void validate() throws ValidationException {
- checkComponentActive();
-
- Connection connection = null;
- try {
- connection = dataSource.getConnection();
- if (connection == null) {
- log.error("Unable to retrieve connections from configured data source");
- if (isThrowValidateError()) {
- throw new ValidationException("Unable to retrieve connections from configured data source");
- }
- }
- } catch (final SQLException e) {
- if (e.getSQLState() != null) {
- log.error("Datasource validation failed with SQL state: {}, SQL Code: {}",
- new Object[] {e.getSQLState(), e.getErrorCode(), e});
- } else {
- log.error("Datasource validation failed", e);
- }
+ @Override public void validate(final DataConnector dataConnector) throws ValidationException {
+ if (!(dataConnector instanceof RDBMSDataConnector)) {
+ throw new ValidationException("DataConnector must be of type RDBMSDataConnector");
+ }
+ final DataSource dataSource = ((RDBMSDataConnector) dataConnector).getDataSource();
+ if (dataSource == null) {
+ log.error("No datasource installed");
if (isThrowValidateError()) {
- throw new ValidationException("Invalid connector configuration", e);
+ throw new ValidationException("Datasource is not set");
}
- } finally {
+ } else {
+ assert dataSource != null;
+ Connection connection = null;
try {
- if (connection != null && !connection.isClosed()) {
- connection.close();
+ connection = dataSource.getConnection();
+ if (connection == null) {
+ log.error("Unable to retrieve connections from configured data source");
+ if (isThrowValidateError()) {
+ throw new ValidationException("Unable to retrieve connections from configured data source");
+ }
}
} catch (final SQLException e) {
- log.error("Error closing database connection; SQL State: {}, SQL Code: {}",
+ if (e.getSQLState() != null) {
+ log.error("Datasource validation failed with SQL state: {}, SQL Code: {}",
+ new Object[] {e.getSQLState(), e.getErrorCode(), e});
+ } else {
+ log.error("Datasource validation failed", e);
+ }
+ if (isThrowValidateError()) {
+ throw new ValidationException("Invalid connector configuration", e);
+ }
+ } finally {
+ try {
+ if (connection != null && !connection.isClosed()) {
+ connection.close();
+ }
+ } catch (final SQLException e) {
+ log.error("Error closing database connection; SQL State: {}, SQL Code: {}",
new Object[] {e.getSQLState(), e.getErrorCode(), e});
+ }
}
}
}
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java
index 39566950c..dd18da2f4 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java
@@ -54,18 +54,10 @@ public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableSt
@NonnullAfterInit private DataSource dataSource;
/** Whether the default validator is being used. */
- private boolean defaultValidator;
+ private boolean defaultValidator = true;
/** Whether the default mapping strategy is being used. */
- private boolean defaultMappingStrategy;
-
- /**
- * Constructor.
- */
- public RDBMSDataConnector() {
- defaultValidator = true;
- defaultMappingStrategy = true;
- }
+ private boolean defaultMappingStrategy = true;
/**
* Gets the JDBC data source for retrieving {@link Connection}s.
@@ -107,10 +99,6 @@ public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableSt
if (defaultValidator) {
final DataSourceValidator validator = new DataSourceValidator();
- assert dataSource != null;
- validator.setDataSource(dataSource);
- validator.setThrowValidateError(isFailFastInitialize());
- validator.initialize();
super.setValidator(validator);
}
if (defaultMappingStrategy) {
@@ -118,13 +106,18 @@ public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableSt
}
super.doInitialize();
+ // validator should defer to data connector fail-fast-initialize during #initialize
+ final boolean throwValidateError = getValidator().isThrowValidateError();
try {
- getValidator().validate();
+ getValidator().setThrowValidateError(isFailFastInitialize());
+ getValidator().validate(this);
} catch (final ValidationException e) {
log.error("{} Invalid connector configuration", getLogPrefix(), e);
if (isFailFastInitialize()) {
throw new ComponentInitializationException(getLogPrefix() + " Invalid connector configuration", e);
}
+ } finally {
+ getValidator().setThrowValidateError(throwValidateError);
}
}
@@ -167,5 +160,4 @@ public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableSt
}
}
}
-
}
\ No newline at end of file
diff --git a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java
index 21eef1de0..24f4e0c4b 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/storage/impl/StorageServiceDataConnector.java
@@ -32,6 +32,7 @@ import org.opensaml.storage.StorageRecord;
import org.opensaml.storage.StorageService;
import net.shibboleth.idp.attribute.IdPAttribute;
+import net.shibboleth.idp.attribute.resolver.DataConnector;
import net.shibboleth.idp.attribute.resolver.NoResultAnErrorResolutionException;
import net.shibboleth.idp.attribute.resolver.ResolutionException;
import net.shibboleth.idp.attribute.resolver.dc.ValidationException;
@@ -51,7 +52,7 @@ import net.shibboleth.shared.primitive.StringSupport;
* @since 4.1.0
*/
public class StorageServiceDataConnector
- extends AbstractSearchDataConnector<StorageServiceSearch,StorageMappingStrategy> {
+ extends AbstractSearchDataConnector<StorageServiceSearch, StorageMappingStrategy> {
/** The {@link StorageService} to use. */
@NonnullAfterInit private StorageService storageService;
@@ -65,7 +66,7 @@ public class StorageServiceDataConnector
/** Constructor. */
public StorageServiceDataConnector() {
setValidator(new Validator() {
- public void validate() throws ValidationException {
+ public void validate(final DataConnector dataConnector) throws ValidationException {
}
public void setThrowValidateError(final boolean what) {
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java
index 5304b36d4..ac1ae85bc 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/ldap/impl/LDAPDataConnectorTest.java
@@ -549,15 +549,12 @@ public class LDAPDataConnectorTest {
public static ConnectionFactoryValidator newConnectionFactoryValidator(final ConnectionFactory connectionFactory, final boolean throwValidateError) throws ComponentInitializationException {
final ConnectionFactoryValidator validator = new ConnectionFactoryValidator();
-
- validator.setConnectionFactory(connectionFactory);
validator.setThrowValidateError(throwValidateError);
return validator;
}
public static ConnectionFactoryValidator newConnectionFactoryValidator(final ConnectionFactory connectionFactory) throws ComponentInitializationException {
final ConnectionFactoryValidator validator = new ConnectionFactoryValidator();
- validator.setConnectionFactory(connectionFactory);
return validator;
}
}
diff --git a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
index d9121649a..f33531b59 100644
--- a/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
+++ b/shib-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
@@ -180,11 +180,7 @@ public class RDBMSDataConnectorTest {
// OK
}
- final DataSourceValidator validator = new DataSourceValidator();
- validator.setDataSource(datasource);
- validator.setThrowValidateError(false);
- validator.initialize();
- connector.setValidator(validator);
+ connector.setFailFastInitialize(false);
connector.initialize();
}
diff --git a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
index dc75fc2c5..ef3a57301 100644
--- a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
+++ b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
@@ -147,8 +147,8 @@ public class LDAPDataConnectorParser extends AbstractDataConnectorParser {
}
final String connectionFactoryID = v2Parser.getBeanConnectionFactoryID();
- BeanDefinition pooledConnectionFactory = null;
- BeanDefinitionBuilder connectionFactory = null;
+ BeanDefinition pooledConnectionFactory;
+ BeanDefinitionBuilder connectionFactory;
if (connectionFactoryID != null) {
builder.addPropertyReference("connectionFactory", connectionFactoryID);
} else {
@@ -185,14 +185,7 @@ public class LDAPDataConnectorParser extends AbstractDataConnectorParser {
if (validatorID != null) {
builder.addPropertyReference("validator", validatorID);
} else {
- if (connectionFactoryID != null) {
- builder.addPropertyValue("validator", v2Parser.createValidator(connectionFactoryID));
- }
- else if (pooledConnectionFactory != null) {
- builder.addPropertyValue("validator", v2Parser.createValidator(pooledConnectionFactory));
- } else if (connectionFactory != null) {
- builder.addPropertyValue("validator", v2Parser.createValidator(connectionFactory.getBeanDefinition()));
- }
+ builder.addPropertyValue("validator", v2Parser.createValidator());
}
final String resultCacheBeanID = CacheConfigParser.getBeanResultCacheID(config);
@@ -649,6 +642,7 @@ public class LDAPDataConnectorParser extends AbstractDataConnectorParser {
StringSupport.trimOrNull(configElement.getAttributeNS(null, ATTR_FAIL_FAST)));
}
connectionFactory.setInitMethodName("initialize");
+ connectionFactory.setDestroyMethodName("close");
return connectionFactory.getBeanDefinition();
}
@@ -764,32 +758,12 @@ public class LDAPDataConnectorParser extends AbstractDataConnectorParser {
/**
* Create the validator. See {@link net.shibboleth.idp.attribute.resolver.dc.Validator}.
*
- * @param connectionFactoryId reference to provide to the validator
- *
* @return validator
*/
- @Nullable public BeanDefinition createValidator(@Nonnull @NotEmpty final String connectionFactoryId) {
-
+ @Nullable public BeanDefinition createValidator() {
final BeanDefinitionBuilder validator =
- BeanDefinitionBuilder.genericBeanDefinition(ConnectionFactoryValidator.class);
-
- validator.addPropertyReference("connectionFactory", connectionFactoryId);
- return validator.getBeanDefinition();
- }
-
- /**
- * Create the validator. See {@link net.shibboleth.idp.attribute.resolver.dc.Validator}.
- *
- * @param connectionFactory to provide to the validator
- *
- * @return validator
- */
- @Nullable public BeanDefinition createValidator(final BeanDefinition connectionFactory) {
-
- final BeanDefinitionBuilder validator =
- BeanDefinitionBuilder.genericBeanDefinition(ConnectionFactoryValidator.class);
-
- validator.addPropertyValue("connectionFactory", connectionFactory);
+ BeanDefinitionBuilder.genericBeanDefinition(ConnectionFactoryValidator.class);
+ validator.addPropertyValue("throwValidateError", false);
return validator.getBeanDefinition();
}
diff --git a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParser.java b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParser.java
index 17fb12aeb..347442b17 100644
--- a/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParser.java
+++ b/shib-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParser.java
@@ -77,12 +77,9 @@ public class RDBMSDataConnectorParser extends AbstractDataConnectorParser {
}
final String dataSourceID = ManagedConnectionParser.getBeanDataSourceID(config);
- final BeanDefinition dataSource;
if (dataSourceID != null) {
- dataSource = null;
builder.addPropertyReference("DataSource", dataSourceID);
} else {
- dataSource = v2Parser.createManagedDataSource();
builder.addPropertyValue("DataSource", v2Parser.createManagedDataSource());
}
@@ -105,16 +102,12 @@ public class RDBMSDataConnectorParser extends AbstractDataConnectorParser {
builder.addPropertyValue("mappingStrategy", def);
}
}
-
+
final String validatorID = v2Parser.getBeanValidatorID();
if (validatorID != null) {
builder.addPropertyReference("validator", validatorID);
} else {
- if (dataSourceID != null) {
- builder.addPropertyValue("validator", v2Parser.createValidator(dataSourceID));
- } else {
- builder.addPropertyValue("validator", v2Parser.createValidator(dataSource));
- }
+ builder.addPropertyValue("validator", v2Parser.createValidator());
}
final String resultCacheBeanID = CacheConfigParser.getBeanResultCacheID(config);
@@ -276,21 +269,12 @@ public class RDBMSDataConnectorParser extends AbstractDataConnectorParser {
/**
* Create the validator. See {@link net.shibboleth.idp.attribute.resolver.dc.Validator}.
- *
- * @param dataSource to provide to the validator
*
* @return validator
*/
- @Nullable public BeanDefinition createValidator(final Object dataSource) {
+ @Nullable public BeanDefinition createValidator() {
final BeanDefinitionBuilder validator =
- BeanDefinitionBuilder.genericBeanDefinition(DataSourceValidator.class);
- validator.setInitMethodName("initialize");
- validator.setDestroyMethodName("destroy");
- if (dataSource instanceof String) {
- validator.addPropertyReference("dataSource", (String) dataSource);
- } else {
- validator.addPropertyValue("dataSource", dataSource);
- }
+ BeanDefinitionBuilder.genericBeanDefinition(DataSourceValidator.class);
validator.addPropertyValue("throwValidateError", true);
return validator.getBeanDefinition();
}
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParserTest.java
index d1ab8e980..8496ba76f 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParserTest.java
@@ -135,11 +135,14 @@ public class LDAPDataConnectorParserTest {
* Shutdown the in-memory directory server.
* @throws InterruptedException
*/
- @AfterClass public void teardownDirectoryServer() throws InterruptedException {
+ @AfterClass public void teardownDirectoryServer() throws Exception {
if (directoryServer != null) {
+ if (directoryServer.openConnectionCount() > 0) {
+ Thread.sleep(100);
+ }
+ assertEquals(directoryServer.openConnectionCount(), 0);
directoryServer.stop(true);
}
-
System.clearProperty("org.ldaptive.sasl.defaultSaslClient");
}
@@ -225,8 +228,7 @@ public class LDAPDataConnectorParserTest {
final ConnectionFactoryValidator validator = (ConnectionFactoryValidator) dataConnector.getValidator();
assertNotNull(validator);
- assertTrue(validator.isThrowValidateError());
- assertNotNull(validator.getConnectionFactory());
+ assertFalse(validator.isThrowValidateError());
final ExecutableSearchBuilder<?> searchBuilder = dataConnector.getExecutableSearchBuilder();
assertNotNull(searchBuilder);
@@ -295,7 +297,6 @@ public class LDAPDataConnectorParserTest {
final ConnectionFactoryValidator validator = (ConnectionFactoryValidator) dataConnector.getValidator();
assertNotNull(validator);
assertFalse(validator.isThrowValidateError());
- assertNotNull(validator.getConnectionFactory());
final ExecutableSearchBuilder<?> searchBuilder = dataConnector.getExecutableSearchBuilder();
assertNotNull(searchBuilder);
@@ -558,7 +559,6 @@ public class LDAPDataConnectorParserTest {
final ConnectionFactoryValidator validator = (ConnectionFactoryValidator) dataConnector.getValidator();
assertNotNull(validator);
assertFalse(validator.isThrowValidateError());
- assertNotNull(validator.getConnectionFactory());
final ExecutableSearchBuilder<?> searchBuilder = dataConnector.getExecutableSearchBuilder();
assertNotNull(searchBuilder);
diff --git a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParserTest.java b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParserTest.java
index 01c03bcf0..a0241d602 100644
--- a/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParserTest.java
+++ b/shib-attribute-resolver-spring/src/test/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParserTest.java
@@ -184,7 +184,6 @@ public class RDBMSDataConnectorParserTest {
final DataSourceValidator validator = (DataSourceValidator) dataConnector.getValidator();
assertNotNull(validator);
assertTrue(validator.isThrowValidateError());
- assertNotNull(validator.getDataSource());
final ExecutableSearchBuilder<ExecutableStatement> searchBuilder = dataConnector.getExecutableSearchBuilder();
assertNotNull(searchBuilder);
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring-context.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring-context.xml
index f49b24598..adf2409d4 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring-context.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/ldap-attribute-resolver-spring-context.xml
@@ -2,7 +2,7 @@
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
- <bean id="connectionFactory" class="org.ldaptive.PooledConnectionFactory" init-method="initialize"
+ <bean id="connectionFactory" class="org.ldaptive.PooledConnectionFactory" init-method="initialize" destroy-method="close"
p:blockWaitTime="PT5S"
p:failFastInitialize="false"
p:name="resolver-pool"
@@ -62,5 +62,5 @@
</property>
</bean>
<bean id="validator" class="net.shibboleth.idp.attribute.resolver.dc.ldap.impl.ConnectionFactoryValidator"
- p:connectionFactory-ref="connectionFactory" p:throwValidateError="true" />
+ p:throwValidateError="false" />
</beans>
\ No newline at end of file
diff --git a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-context.xml b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-context.xml
index aa78c493f..8218789e9 100644
--- a/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-context.xml
+++ b/shib-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-context.xml
@@ -27,7 +27,7 @@
</map>
</property>
</bean>
- <bean id="validator" class="net.shibboleth.idp.attribute.resolver.dc.rdbms.impl.DataSourceValidator" p:dataSource-ref="dataSource" p:throwValidateError="true" />
+ <bean id="validator" class="net.shibboleth.idp.attribute.resolver.dc.rdbms.impl.DataSourceValidator" p:throwValidateError="true" />
<util:map id="computedIdExceptions">
<entry key="*"> <!-- all users -->
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list