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)