Add CloseHook support. This fixes the problem for the search component, but not for the query parser plugin. Part of CONNECTORS-333.
git-svn-id: https://svn.apache.org/repos/asf/incubator/lcf/integration/solr-4.x/trunk@1226451 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/mcf/src/java/org/apache/solr/mcf/ManifoldCFQParserPlugin.java b/mcf/src/java/org/apache/solr/mcf/ManifoldCFQParserPlugin.java
index 222bbea..7680204 100644
--- a/mcf/src/java/org/apache/solr/mcf/ManifoldCFQParserPlugin.java
+++ b/mcf/src/java/org/apache/solr/mcf/ManifoldCFQParserPlugin.java
@@ -35,6 +35,9 @@
import org.apache.solr.common.util.NamedList;
import org.apache.solr.handler.component.ResponseBuilder;
import org.apache.solr.handler.component.SearchComponent;
+import org.apache.solr.core.CloseHook;
+import org.apache.solr.util.plugin.SolrCoreAware;
+import org.apache.solr.core.SolrCore;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.params.*;
@@ -74,26 +77,12 @@
String fieldAllowShare = null;
String fieldDenyShare = null;
int socketTimeOut;
- MultiThreadedHttpConnectionManager httpConnectionManager;
- HttpClient client;
+ MultiThreadedHttpConnectionManager httpConnectionManager = null;
+ HttpClient client = null;
public ManifoldCFQParserPlugin()
{
super();
- HttpConnectionManagerParams params = new HttpConnectionManagerParams();
- params.setTcpNoDelay(true);
- params.setStaleCheckingEnabled(false);
- httpConnectionManager = new MultiThreadedHttpConnectionManager();
- httpConnectionManager.setParams(params);
- client = new HttpClient(httpConnectionManager);
- }
-
- @Override
- protected void finalize()
- throws Throwable
- {
- super.finalize();
- httpConnectionManager.shutdown();
}
@Override
@@ -114,6 +103,15 @@
fieldDenyDocument = denyAttributePrefix+"document";
fieldAllowShare = allowAttributePrefix+"share";
fieldDenyShare = denyAttributePrefix+"share";
+
+ // Initialize the connection pool
+ HttpConnectionManagerParams params = new HttpConnectionManagerParams();
+ params.setTcpNoDelay(true);
+ params.setStaleCheckingEnabled(false);
+ httpConnectionManager = new MultiThreadedHttpConnectionManager();
+ httpConnectionManager.setParams(params);
+ // MHL to set the pool size
+ client = new HttpClient(httpConnectionManager);
}
@Override
@@ -122,6 +120,11 @@
return new ManifoldCFQueryParser(qstr,localParams,params,req);
}
+ public void inform(SolrCore core)
+ {
+ core.addCloseHook(new CloseHandler());
+ }
+
protected class ManifoldCFQueryParser extends QParser
{
public ManifoldCFQueryParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req)
@@ -307,5 +310,32 @@
}
}
}
-
+
+ /** CloseHook implementation.
+ */
+ protected class CloseHandler extends CloseHook
+ {
+ public CloseHandler()
+ {
+ }
+
+ @Override
+ public void preClose(SolrCore core)
+ {
+ }
+
+ @Override
+ public void postClose(SolrCore core)
+ {
+ // Close the connection pool
+ if (httpConnectionManager != null)
+ {
+ httpConnectionManager.shutdown();
+ httpConnectionManager = null;
+ client = null;
+ }
+ }
+
+ }
+
}
\ No newline at end of file
diff --git a/mcf/src/java/org/apache/solr/mcf/ManifoldCFSearchComponent.java b/mcf/src/java/org/apache/solr/mcf/ManifoldCFSearchComponent.java
index 78e38b7..1156512 100644
--- a/mcf/src/java/org/apache/solr/mcf/ManifoldCFSearchComponent.java
+++ b/mcf/src/java/org/apache/solr/mcf/ManifoldCFSearchComponent.java
@@ -26,6 +26,9 @@
import org.apache.solr.common.util.NamedList;
import org.apache.solr.handler.component.ResponseBuilder;
import org.apache.solr.handler.component.SearchComponent;
+import org.apache.solr.core.CloseHook;
+import org.apache.solr.util.plugin.SolrCoreAware;
+import org.apache.solr.core.SolrCore;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.params.*;
@@ -39,7 +42,7 @@
* SearchComponent plugin for ManifoldCF-specific document-level access control.
* Configuration is under the SolrACLSecurity name.
*/
-public class ManifoldCFSearchComponent extends SearchComponent
+public class ManifoldCFSearchComponent extends SearchComponent implements SolrCoreAware
{
/** The component name */
static final public String COMPONENT_NAME = "mcf";
@@ -66,26 +69,12 @@
String fieldAllowShare = null;
String fieldDenyShare = null;
int socketTimeOut;
- MultiThreadedHttpConnectionManager httpConnectionManager;
- HttpClient client;
+ MultiThreadedHttpConnectionManager httpConnectionManager = null;
+ HttpClient client = null;
public ManifoldCFSearchComponent()
{
super();
- HttpConnectionManagerParams params = new HttpConnectionManagerParams();
- params.setTcpNoDelay(true);
- params.setStaleCheckingEnabled(false);
- httpConnectionManager = new MultiThreadedHttpConnectionManager();
- httpConnectionManager.setParams(params);
- client = new HttpClient(httpConnectionManager);
- }
-
- @Override
- protected void finalize()
- throws Throwable
- {
- super.finalize();
- httpConnectionManager.shutdown();
}
@Override
@@ -107,6 +96,16 @@
fieldDenyDocument = denyAttributePrefix+"document";
fieldAllowShare = allowAttributePrefix+"share";
fieldDenyShare = denyAttributePrefix+"share";
+
+ // Initialize the connection pool
+ HttpConnectionManagerParams params = new HttpConnectionManagerParams();
+ params.setTcpNoDelay(true);
+ params.setStaleCheckingEnabled(false);
+ httpConnectionManager = new MultiThreadedHttpConnectionManager();
+ httpConnectionManager.setParams(params);
+ // MHL to set the pool size
+ client = new HttpClient(httpConnectionManager);
+
}
@Override
@@ -263,7 +262,12 @@
{
return "$URL$";
}
-
+
+ public void inform(SolrCore core)
+ {
+ core.addCloseHook(new CloseHandler());
+ }
+
// Protected methods
/** Get access tokens given a username */
@@ -333,4 +337,31 @@
}
}
+ /** CloseHook implementation.
+ */
+ protected class CloseHandler extends CloseHook
+ {
+ public CloseHandler()
+ {
+ }
+
+ @Override
+ public void preClose(SolrCore core)
+ {
+ }
+
+ @Override
+ public void postClose(SolrCore core)
+ {
+ // Close the connection pool
+ if (httpConnectionManager != null)
+ {
+ httpConnectionManager.shutdown();
+ httpConnectionManager = null;
+ client = null;
+ }
+ }
+
+ }
+
}
\ No newline at end of file