Fix for CONNECTORS-333. Use the CloseHook API to free connections. We still get a warning message, but that's going to happen since the connection manager creates a static thread.
git-svn-id: https://svn.apache.org/repos/asf/incubator/lcf/integration/solr-3.x/trunk@1230078 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 9915aca..133b75b 100644
--- a/mcf/src/java/org/apache/solr/mcf/ManifoldCFQParserPlugin.java
+++ b/mcf/src/java/org/apache/solr/mcf/ManifoldCFQParserPlugin.java
@@ -76,6 +76,7 @@
String fieldAllowShare = null;
String fieldDenyShare = null;
int socketTimeOut;
+ Integer connectionManagerSynchronizer = new Integer(0);
MultiThreadedHttpConnectionManager httpConnectionManager = null;
HttpClient client = null;
int poolSize;
@@ -104,29 +105,35 @@
fieldDenyShare = denyAttributePrefix+"share";
Integer connectionPoolSize = (Integer)args.get("ConnectionPoolSize");
poolSize = (connectionPoolSize==null)?50:connectionPoolSize.intValue();
-
- // Initialize the connection pool
- HttpConnectionManagerParams params = new HttpConnectionManagerParams();
- params.setTcpNoDelay(true);
- params.setStaleCheckingEnabled(false);
- params.setDefaultMaxConnectionsPerHost(poolSize);
- params.setMaxTotalConnections(poolSize);
- httpConnectionManager = new MultiThreadedHttpConnectionManager();
- httpConnectionManager.setParams(params);
- client = new HttpClient(httpConnectionManager);
+ }
+
+ protected void initializeClient(SolrCore core)
+ {
+ synchronized (connectionManagerSynchronizer)
+ {
+ if (client == null)
+ {
+ // Initialize the connection pool
+ HttpConnectionManagerParams params = new HttpConnectionManagerParams();
+ params.setTcpNoDelay(true);
+ params.setStaleCheckingEnabled(false);
+ params.setDefaultMaxConnectionsPerHost(poolSize);
+ params.setMaxTotalConnections(poolSize);
+ httpConnectionManager = new MultiThreadedHttpConnectionManager();
+ httpConnectionManager.setParams(params);
+ client = new HttpClient(httpConnectionManager);
+ core.addCloseHook(new CloseHandler());
+ }
+ }
}
@Override
public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req)
{
+ initializeClient(req.getCore());
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)