Index: contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/JdbcDataSource.java
===================================================================
--- contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/JdbcDataSource.java	(revision 806273)
+++ contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/JdbcDataSource.java	(working copy)
@@ -373,16 +373,23 @@
 
   protected void finalize() throws Throwable {
     try {
-      conn.close();
+      if(!isClosed){
+        LOG.error("JdbcDataSource was not closed prior to finalize(), indicates a bug -- POSSIBLE RESOURCE LEAK!!!");
+        close();
+      }
     } finally {
       super.finalize();
     }
   }
 
+  private boolean isClosed = false;
   public void close() {
     try {
       conn.close();
     } catch (Exception e) {
+      LOG.error("Ignoring Error when closing connection", e);
+    } finally{
+      isClosed = true;
     }
 
   }
Index: src/java/org/apache/solr/update/SolrIndexWriter.java
===================================================================
--- src/java/org/apache/solr/update/SolrIndexWriter.java	(revision 806273)
+++ src/java/org/apache/solr/update/SolrIndexWriter.java	(working copy)
@@ -213,19 +213,26 @@
    * }
    * ****
    */
-
+  private boolean isClosed = false;
   public void close() throws IOException {
     log.debug("Closing Writer " + name);
-    super.close();
-    if(infoStream != null) {
-      infoStream.close();
+    try {
+      super.close();
+      if(infoStream != null) {
+        infoStream.close();
+      }
+    } finally {
+      isClosed = true;
     }
   }
 
   @Override
   protected void finalize() throws Throwable {
     try {
-      super.close();
+      if(!isClosed){
+        log.error("SolrIndexWriter was not closed prior to finalize(), indicates a bug -- POSSIBLE RESOURCE LEAK!!!");
+        close();
+      }
     } finally { 
       super.finalize();
     }
Index: src/java/org/apache/solr/core/CoreContainer.java
===================================================================
--- src/java/org/apache/solr/core/CoreContainer.java	(revision 806273)
+++ src/java/org/apache/solr/core/CoreContainer.java	(working copy)
@@ -271,24 +271,31 @@
     }
     return properties;
   }
-
+  private boolean isShutDown = false;
   /**
    * Stops all cores.
    */
   public void shutdown() {
     synchronized(cores) {
-      for(SolrCore core : cores.values()) {
-        core.close();
+      try {
+        for(SolrCore core : cores.values()) {
+          core.close();
+        }
+        cores.clear();
+      } finally {
+        isShutDown = true;
       }
-      cores.clear();
     }
   }
   
   @Override
   protected void finalize() throws Throwable {
-    try { 
-      shutdown();
-    } finally { 
+    try {
+      if(!isShutDown){
+        log.error("CoreContainer was not shutdown prior to finalize(), indicates a bug -- POSSIBLE RESOURCE LEAK!!!");
+        shutdown();
+      }
+    } finally {
       super.finalize();
     }
   }
Index: src/common/org/apache/solr/common/util/ConcurrentLRUCache.java
===================================================================
--- src/common/org/apache/solr/common/util/ConcurrentLRUCache.java	(revision 806273)
+++ src/common/org/apache/solr/common/util/ConcurrentLRUCache.java	(working copy)
@@ -17,6 +17,8 @@
  */
 
 import org.apache.lucene.util.PriorityQueue;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -40,6 +42,7 @@
  * @since solr 1.4
  */
 public class ConcurrentLRUCache<K,V> {
+  private static Logger log = LoggerFactory.getLogger(ConcurrentLRUCache.class);
 
   private final ConcurrentHashMap<Object, CacheEntry> map;
   private final int upperWaterMark, lowerWaterMark;
@@ -490,10 +493,14 @@
     }
   }
 
-
+ private boolean isDestroyed =  false;
   public void destroy() {
-    if(cleanupThread != null){
-      cleanupThread.stopThread();
+    try {
+      if(cleanupThread != null){
+        cleanupThread.stopThread();
+      }
+    } finally {
+      isDestroyed = true;
     }
   }
 
@@ -583,8 +590,11 @@
 
   protected void finalize() throws Throwable {
     try {
-      destroy();
-    } finally { 
+      if(!isDestroyed){
+        log.error("ConcurrentLRUCache was not destroyed prior to finalize(), indicates a bug -- POSSIBLE RESOURCE LEAK!!!");
+        destroy();
+      }
+    } finally {
       super.finalize();
     }
   }
