Author: toad
Date: 2007-09-05 16:55:56 +0000 (Wed, 05 Sep 2007)
New Revision: 14976

Modified:
   trunk/plugins/XMLSpider/XMLSpider.java
Log:
Save some file descriptors by feeding FileOutputStream's to StreamResult and 
closing them manually. (They seem to be closed lazily if we pass in a File).

Modified: trunk/plugins/XMLSpider/XMLSpider.java
===================================================================
--- trunk/plugins/XMLSpider/XMLSpider.java      2007-09-05 16:32:29 UTC (rev 
14975)
+++ trunk/plugins/XMLSpider/XMLSpider.java      2007-09-05 16:55:56 UTC (rev 
14976)
@@ -3,7 +3,10 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package plugins.XMLSpider;

+import java.io.BufferedOutputStream;
 import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
@@ -323,9 +326,12 @@
                }
                //the main index file 
                File outputFile = new File(DEFAULT_INDEX_DIR+"index.xml");
+               // Use a stream so we can explicitly close - minimise number of 
filehandles used.
+               BufferedOutputStream fos = new BufferedOutputStream(new 
FileOutputStream(outputFile));
                StreamResult resultStream;
-               resultStream = new StreamResult(outputFile);
+               resultStream = new StreamResult(fos);

+               try {
                /* Initialize xml builder */
                Document xmlDoc = null;
                DocumentBuilderFactory xmlFactory = null;
@@ -415,6 +421,9 @@
                        Logger.error(this, "Spider: Error while serializing XML 
(transform()): "+e.toString(), e);
                        return;
                }
+               } finally {
+                       fos.close();
+               }

                if(Logger.shouldLog(Logger.MINOR, this))
                        Logger.minor(this, "Spider: indexes regenerated - 
tProducedIndex="+(System.currentTimeMillis()-tProducedIndex)+"ms ago time 
taken="+time_taken+"ms");
@@ -518,9 +527,11 @@
                String p = ((String) list.elementAt(0)).substring(0, prefix);
                indices.add(p);
                File outputFile = new File(DEFAULT_INDEX_DIR+"index_"+p+".xml");
+               BufferedOutputStream fos = new BufferedOutputStream(new 
FileOutputStream(outputFile));
                StreamResult resultStream;
-               resultStream = new StreamResult(outputFile);
+               resultStream = new StreamResult(fos);

+               try {
                /* Initialize xml builder */
                Document xmlDoc = null;
                DocumentBuilderFactory xmlFactory = null;
@@ -631,6 +642,9 @@
                        Logger.error(this, "Spider: Error while serializing XML 
(transform()): "+e.toString(), e);
                        return;
                }
+               } finally {
+                       fos.close();
+               }

                if(Logger.shouldLog(Logger.MINOR, this))
                        Logger.minor(this, "Spider: indexes regenerated.");
@@ -735,8 +749,16 @@
        public void generateSubIndex(String filename){
 //             generates the new subIndex
                File outputFile = new File(filename);
+               BufferedOutputStream fos;
+               try {
+                       fos = new BufferedOutputStream(new 
FileOutputStream(outputFile));
+               } catch (FileNotFoundException e1) {
+                       Logger.error(this, "Cannot open "+filename+" writing 
index : "+e1, e1);
+                       return;
+               }
+               try {
                StreamResult resultStream;
-               resultStream = new StreamResult(outputFile);
+               resultStream = new StreamResult(fos);

                /* Initialize xml builder */
                Document xmlDoc = null;
@@ -829,6 +851,13 @@
                        Logger.error(this, "Spider: Error while serializing XML 
(transform()): "+e.toString(), e);
                        return;
                }
+               } finally {
+                       try {
+                               fos.close();
+                       } catch (IOException e) {
+                               // Ignore
+                       }
+               }

                if(Logger.shouldLog(Logger.MINOR, this))
                        Logger.minor(this, "Spider: indexes regenerated.");


Reply via email to