[java-identity-provider COMMIT] in /trunk/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingp...
noreply at shibboleth.net
noreply at shibboleth.net
Mon Dec 15 17:41:00 EST 2014
Author: putmanb
Date: Mon Dec 15 17:40:59 2014
New Revision: 7104
URL: http://svn.shibboleth.net/view/java-identity-provider?rev=7104&view=rev
Log:
Beans produced by a FactoryBean aren't subject to Spring lifecycle.
So make our file caching HttpClient FactoryBean keep a reference to the beans it produces and have it manage their lifecycle.
Remove setting of init and destory methods on the factory in the parsers, it doesn't work as intended.
Modified:
trunk/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/AbstractDynamicHTTPMetadataProviderParser.java
trunk/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/FileCachingHttpClientFactoryBean.java
trunk/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/HTTPMetadataProviderParser.java
Modified: trunk/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/AbstractDynamicHTTPMetadataProviderParser.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/AbstractDynamicHTTPMetadataProviderParser.java?rev=7104&r1=7103&r2=7104&view=diff
==============================================================================
--- trunk/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/AbstractDynamicHTTPMetadataProviderParser.java (original)
+++ trunk/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/AbstractDynamicHTTPMetadataProviderParser.java Mon Dec 15 17:40:59 2014
@@ -111,8 +111,6 @@
break;
case "file":
clientBuilder = BeanDefinitionBuilder.genericBeanDefinition(FileCachingHttpClientFactoryBean.class);
- clientBuilder.setInitMethodName("initialize");
- clientBuilder.setDestroyMethodName("destroy");
if (element.hasAttributeNS(null, "cacheDirectory")) {
clientBuilder.addPropertyValue("cacheDirectory", element.getAttributeNS(null, "cacheDirectory"));
}
Modified: trunk/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/FileCachingHttpClientFactoryBean.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/FileCachingHttpClientFactoryBean.java?rev=7104&r1=7103&r2=7104&view=diff
==============================================================================
--- trunk/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/FileCachingHttpClientFactoryBean.java (original)
+++ trunk/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/FileCachingHttpClientFactoryBean.java Mon Dec 15 17:40:59 2014
@@ -17,6 +17,14 @@
package net.shibboleth.idp.profile.spring.relyingparty.metadata;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.http.client.HttpClient;
+import org.springframework.beans.factory.DisposableBean;
+
+import net.shibboleth.utilities.java.support.component.DestructableComponent;
+import net.shibboleth.utilities.java.support.component.InitializableComponent;
import net.shibboleth.utilities.java.support.httpclient.FileCachingHttpClientBuilder;
import net.shibboleth.utilities.java.support.httpclient.HttpClientBuilder;
@@ -24,11 +32,16 @@
* Factory bean to accumulate the parameters into a {@link FileCachingHttpClientBuilder}
* and to then emit a {@link org.apache.http.client.HttpClient}.
*/
-public class FileCachingHttpClientFactoryBean extends HttpClientFactoryBean {
+public class FileCachingHttpClientFactoryBean extends HttpClientFactoryBean implements DisposableBean {
+
+ /** List of HttpClients produced by this factory, used to invoke their destroy()
+ * when this factory instances is destroy()-ed. */
+ private List<HttpClient> clientRefs;
/** Constructor. */
public FileCachingHttpClientFactoryBean() {
super();
+ clientRefs = new ArrayList<>();
}
/**
@@ -63,4 +76,29 @@
return new FileCachingHttpClientBuilder();
}
+ /** {@inheritDoc} */
+ protected HttpClient createInstance() throws Exception {
+ HttpClient client = super.createInstance();
+ synchronized(this) {
+ if (client instanceof InitializableComponent) {
+ ((InitializableComponent)client).initialize();
+ }
+ clientRefs.add(client);
+ }
+ return client;
+ }
+
+ /** {@inheritDoc} */
+ public void destroy() throws Exception {
+ synchronized (this) {
+ for (HttpClient client : clientRefs) {
+ if (client instanceof DestructableComponent) {
+ ((DestructableComponent)client).destroy();
+ }
+ }
+ clientRefs.clear();
+ }
+ super.destroy();
+ }
+
}
[... 15 lines stripped ...]
More information about the commits
mailing list