[java-shib-attribute] 01/01: IDP-2035 data connectors orphan connections
Daniel Fisher
dfisher at vt.edu
Fri Nov 18 01:53:32 UTC 2022
This is an automated email from the git hooks/post-receive script.
dfisher pushed a commit to branch dev/IDP-2035
in repository java-shib-attribute.
View the commit online:
http://git.shibboleth.net/view/?p=java-shib-attribute.git;a=commit;h=318ae6d7d6a0fe2fc2f78c5cbd8833cb0465c335
commit 318ae6d7d6a0fe2fc2f78c5cbd8833cb0465c335
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.
Set LDAP connection factory destory method.
---
.../resolver/dc/NonFailFastValidator.java | 9 +-
.../idp/attribute/resolver/dc/Validator.java | 14 +--
.../resolver/dc/http/impl/HTTPDataConnector.java | 7 +-
.../dc/impl/AbstractSearchDataConnector.java | 9 +-
.../dc/ldap/impl/ConnectionFactoryValidator.java | 41 ++------
.../resolver/dc/ldap/impl/LDAPDataConnector.java | 15 +--
.../dc/rdbms/impl/DataSourceValidator.java | 104 +++++++--------------
.../resolver/dc/rdbms/impl/RDBMSDataConnector.java | 9 +-
.../storage/impl/StorageServiceDataConnector.java | 6 +-
.../dc/ldap/impl/LDAPDataConnectorTest.java | 3 -
.../dc/rdbms/impl/RDBMSDataConnectorTest.java | 2 -
.../dc/ldap/impl/LDAPDataConnectorParser.java | 40 ++------
.../dc/rdbms/impl/RDBMSDataConnectorParser.java | 21 +----
.../dc/ldap/impl/LDAPDataConnectorParserTest.java | 10 +-
.../rdbms/impl/RDBMSDataConnectorParserTest.java | 1 -
.../ldap-attribute-resolver-spring-context.xml | 4 +-
.../rdbms-attribute-resolver-spring-context.xml | 2 +-
17 files changed, 89 insertions(+), 208 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..503008fb3 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
@@ -19,13 +19,14 @@ package net.shibboleth.idp.attribute.resolver.dc;
import javax.annotation.Nullable;
+import net.shibboleth.idp.attribute.resolver.DataConnector;
import org.slf4j.LoggerFactory;
import net.shibboleth.shared.primitive.DeprecationSupport;
import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
/** Used to determine whether a Data Connector initialized properly and continues to be fit for use. */
-public class NonFailFastValidator implements Validator {
+public class NonFailFastValidator<T extends DataConnector> implements Validator<T> {
/** Embedded validator to run. */
@Nullable private final Validator embeddedValidator;
@@ -40,7 +41,7 @@ public class NonFailFastValidator implements Validator {
*
* @param validator validator to run but trap exceptions from
*/
- public NonFailFastValidator(@Nullable final Validator validator) {
+ public NonFailFastValidator(@Nullable final Validator<T> validator) {
// V4 deprecation. Remove the class in V5
DeprecationSupport.warnOnce(ObjectType.CLASS, "NonFailFastValidator", null,
"failFastInitialize on DataConnector or p:throwValidateError on the contained Validator");
@@ -52,10 +53,10 @@ public class NonFailFastValidator implements Validator {
/** {@inheritDoc} */
@Override
- public void validate() throws ValidationException {
+ public void validate(final T 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..9f9599d2e 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,27 +17,29 @@
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 {
+public interface Validator<T extends DataConnector> {
/**
* Probe the data connector and conditionally fails if it is not valid and ready for use.
*
* @throws ValidationException thrown if validation fails and {@link #isThrowValidateError()} is true
*/
- void validate() throws ValidationException;
+ void validate(T 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..06b16c38b 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
@@ -45,7 +45,8 @@ import net.shibboleth.shared.logic.Constraint;
* This class implements a {@link net.shibboleth.idp.attribute.resolver.DataConnector}
* that obtains data from an HTTP service.
*/
-public class HTTPDataConnector extends AbstractSearchDataConnector<HTTPSearch,HTTPResponseMappingStrategy> {
+public class HTTPDataConnector
+ extends AbstractSearchDataConnector<HTTPSearch, HTTPResponseMappingStrategy, HTTPDataConnector> {
/** The {@link HttpClient} to use. */
@NonnullAfterInit private HttpClient httpClient;
@@ -55,8 +56,8 @@ public class HTTPDataConnector extends AbstractSearchDataConnector<HTTPSearch,HT
/** Constructor. */
public HTTPDataConnector() {
- setValidator(new Validator() {
- public void validate() throws ValidationException {
+ setValidator(new Validator<>() {
+ public void validate(final HTTPDataConnector 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/impl/AbstractSearchDataConnector.java b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
index b4c9abe37..c5d955ab9 100644
--- a/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
+++ b/shib-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/AbstractSearchDataConnector.java
@@ -24,6 +24,7 @@ import java.util.Map;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+import net.shibboleth.idp.attribute.resolver.DataConnector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -51,7 +52,7 @@ import net.shibboleth.shared.logic.Constraint;
* @param <T1> type of executable search
* @param <T2> type of mapping strategy
*/
-public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2 extends MappingStrategy<?>>
+public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2 extends MappingStrategy<?>, T3 extends DataConnector>
extends AbstractDataConnector {
/** Class logger. */
@@ -61,7 +62,7 @@ public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2
@NonnullAfterInit private ExecutableSearchBuilder<T1> searchBuilder;
/** Validator for validating this data connector. */
- @NonnullAfterInit private Validator connectorValidator;
+ @NonnullAfterInit private Validator<T3> connectorValidator;
/** Strategy for mapping search results to a collection of {@link IdPAttribute}s. */
@NonnullAfterInit private T2 mappingStrategy;
@@ -96,7 +97,7 @@ public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2
*
* @return validator used to validate this connector
*/
- @NonnullAfterInit public Validator getValidator() {
+ @NonnullAfterInit public Validator<T3> getValidator() {
return connectorValidator;
}
@@ -105,7 +106,7 @@ public abstract class AbstractSearchDataConnector<T1 extends ExecutableSearch,T2
*
* @param validator used to validate this connector
*/
- public void setValidator(@Nonnull final Validator validator) {
+ public void setValidator(@Nonnull final Validator<T3> validator) {
checkSetterPreconditions();
connectorValidator = Constraint.isNotNull(validator, "Validator cannot be null");
}
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..78d7d34d4 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;
@@ -28,62 +27,34 @@ import org.slf4j.LoggerFactory;
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
* configured.
*/
-public class ConnectionFactoryValidator implements Validator {
+public class ConnectionFactoryValidator implements Validator<LDAPDataConnector> {
/** 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 LDAPDataConnector dataConnector) throws ValidationException {
+ final ConnectionFactory connectionFactory = 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..d5f05a08a 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
@@ -50,7 +50,7 @@ import net.shibboleth.shared.logic.Constraint;
* A {@link net.shibboleth.idp.attribute.resolver.DataConnector} that queries an LDAP in order to retrieve attribute
* data.
*/
-public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSearchFilter,SearchResultMappingStrategy> {
+public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSearchFilter,SearchResultMappingStrategy, LDAPDataConnector> {
/** Class logger. */
@Nonnull private final Logger log = LoggerFactory.getLogger(LDAPDataConnector.class);
@@ -134,9 +134,9 @@ public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSea
if (defaultValidator) {
final ConnectionFactoryValidator validator = new ConnectionFactoryValidator();
- validator.setConnectionFactory(connectionFactory);
super.setValidator(validator);
}
+ // TODO should the LDAP validator always default to this?
getValidator().setThrowValidateError(isFailFastInitialize());
if (defaultMappingStrategy) {
super.setMappingStrategy(new StringAttributeValueMappingStrategy());
@@ -144,7 +144,7 @@ public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSea
super.doInitialize();
try {
- getValidator().validate();
+ getValidator().validate(this);
} catch (final ValidationException e) {
log.error("{} Invalid connector configuration", getLogPrefix(), e);
if (isFailFastInitialize()) {
@@ -155,14 +155,6 @@ public class LDAPDataConnector extends AbstractSearchDataConnector<ExecutableSea
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 +207,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..ae4e3c649 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,7 +20,6 @@ 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;
@@ -28,106 +27,69 @@ import org.slf4j.LoggerFactory;
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<RDBMSDataConnector> {
/** 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 RDBMSDataConnector dataConnector) throws ValidationException {
+ final DataSource dataSource = 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..2ce31b865 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
@@ -45,7 +45,7 @@ import net.shibboleth.shared.logic.Constraint;
* A {@link net.shibboleth.idp.attribute.resolver.DataConnector} that queries a relation database in order to retrieve
* attribute data.
*/
-public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableStatement,ResultMappingStrategy> {
+public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableStatement,ResultMappingStrategy, RDBMSDataConnector> {
/** Class logger. */
@Nonnull private final Logger log = LoggerFactory.getLogger(RDBMSDataConnector.class);
@@ -107,10 +107,8 @@ public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableSt
if (defaultValidator) {
final DataSourceValidator validator = new DataSourceValidator();
- assert dataSource != null;
- validator.setDataSource(dataSource);
+ // TODO should the default RDBMS validator always default to this?
validator.setThrowValidateError(isFailFastInitialize());
- validator.initialize();
super.setValidator(validator);
}
if (defaultMappingStrategy) {
@@ -119,7 +117,7 @@ public class RDBMSDataConnector extends AbstractSearchDataConnector<ExecutableSt
super.doInitialize();
try {
- getValidator().validate();
+ getValidator().validate(this);
} catch (final ValidationException e) {
log.error("{} Invalid connector configuration", getLogPrefix(), e);
if (isFailFastInitialize()) {
@@ -167,5 +165,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..382cec30d 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
@@ -51,7 +51,7 @@ import net.shibboleth.shared.primitive.StringSupport;
* @since 4.1.0
*/
public class StorageServiceDataConnector
- extends AbstractSearchDataConnector<StorageServiceSearch,StorageMappingStrategy> {
+ extends AbstractSearchDataConnector<StorageServiceSearch, StorageMappingStrategy, StorageServiceDataConnector> {
/** The {@link StorageService} to use. */
@NonnullAfterInit private StorageService storageService;
@@ -64,8 +64,8 @@ public class StorageServiceDataConnector
/** Constructor. */
public StorageServiceDataConnector() {
- setValidator(new Validator() {
- public void validate() throws ValidationException {
+ setValidator(new Validator<>() {
+ public void validate(final StorageServiceDataConnector 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 3d954f48f..8faa93340 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
@@ -581,15 +581,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 8d1218d3d..2d52ec082 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
@@ -192,9 +192,7 @@ public class RDBMSDataConnectorTest {
}
final DataSourceValidator validator = new DataSourceValidator();
- validator.setDataSource(datasource);
validator.setThrowValidateError(false);
- validator.initialize();
connector.setValidator(validator);
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 facd9b633..3b8c64636 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
@@ -164,8 +164,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 {
@@ -202,14 +202,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);
@@ -696,6 +689,7 @@ public class LDAPDataConnectorParser extends AbstractDataConnectorParser {
StringSupport.trimOrNull(configElement.getAttributeNS(null, ATTR_FAIL_FAST)));
}
connectionFactory.setInitMethodName("initialize");
+ connectionFactory.setDestroyMethodName("close");
return connectionFactory.getBeanDefinition();
}
@@ -811,32 +805,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 f545a5714..93b61be75 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
@@ -114,16 +114,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);
@@ -294,21 +290,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 7e8ac5ab0..136b23e6a 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");
}
@@ -226,7 +229,6 @@ public class LDAPDataConnectorParserTest {
final ConnectionFactoryValidator validator = (ConnectionFactoryValidator) dataConnector.getValidator();
assertNotNull(validator);
assertTrue(validator.isThrowValidateError());
- assertNotNull(validator.getConnectionFactory());
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);
@@ -582,7 +583,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..c86c4af71 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="true" />
</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