You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2010/06/04 11:19:56 UTC

svn commit: r951337 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/converter/stream/ test/java/org/apache/camel/converter/stream/ test/java/org/apache/camel/processor/

Author: ningjiang
Date: Fri Jun  4 09:19:55 2010
New Revision: 951337

URL: http://svn.apache.org/viewvc?rev=951337&view=rev
Log:
CAMEL-2496,CAMEL-2776 delete the temp file only after route is completed

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java?rev=951337&r1=951336&r2=951337&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java Fri Jun  4 09:19:55 2010
@@ -30,6 +30,7 @@ import java.util.List;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.StreamCache;
+import org.apache.camel.impl.SynchronizationAdapter;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 import org.apache.commons.logging.Log;
@@ -41,7 +42,8 @@ import org.apache.commons.logging.LogFac
  * can configure it by setting the TEMP_DIR property. If you don't set the TEMP_DIR property,
  * it will choose the directory which is set by the system property of "java.io.tmpdir".
  * You can get a cached input stream of this stream. The temp file which is created with this 
- * output stream will be deleted when you close this output stream or the cached inputStream.
+ * output stream will be deleted when you close this output stream or the all cached 
+ * fileInputStream is closed after the exchange is completed.
  */
 public class CachedOutputStream extends OutputStream {
     public static final String THRESHOLD = "CamelCachedOutputStreamThreshold";
@@ -52,6 +54,7 @@ public class CachedOutputStream extends 
     private boolean inMemory = true;
     private int totalLength;
     private File tempFile;
+    private boolean exchangeOnCompleted;
     
     private List<FileInputStreamCache> fileInputStreamCaches = new ArrayList<FileInputStreamCache>(4);
 
@@ -68,6 +71,27 @@ public class CachedOutputStream extends 
             this.outputDir = exchange.getContext().getTypeConverter().convertTo(File.class, dir);
         }
         
+        // add on completion so we can cleanup after the exchange is done such as deleting temporary files
+        exchange.addOnCompletion(new SynchronizationAdapter() {
+            @Override
+            public void onDone(Exchange exchange) {
+                try {
+                    //set the flag so we can delete the temp file 
+                    exchangeOnCompleted = true;
+                    if (fileInputStreamCaches.size() == 0) {
+                        // there is no open fileInputStream let's close it 
+                        close();
+                    }
+                } catch (Exception e) {
+                    LOG.warn("Error deleting temporary cache file: " + tempFile, e);
+                }
+            }
+
+            @Override
+            public String toString() {
+                return "OnCompletion[CachedOutputStream]";
+            }
+        });
     }
 
     public void flush() throws IOException {
@@ -76,20 +100,7 @@ public class CachedOutputStream extends 
 
     public void close() throws IOException {
         currentStream.close();
-        try {
-            // cleanup temporary file
-            if (tempFile != null) {
-                boolean deleted = tempFile.delete();
-                if (!deleted) {
-                    LOG.warn("Cannot delete temporary cache file: " + tempFile);
-                } else if (LOG.isTraceEnabled()) {
-                    LOG.trace("Deleted temporary cache file: " + tempFile);
-                }
-                tempFile = null;
-            }
-        } catch (Exception e) {
-            LOG.warn("Error deleting temporary cache file: " + tempFile, e);
-        }
+        cleanUpTempFile();
     }
 
     public boolean equals(Object obj) {
@@ -168,6 +179,27 @@ public class CachedOutputStream extends 
             }
         }
     }
+    
+    public void releaseFileInputStream(FileInputStreamCache fileInputStreamCache) throws IOException {
+        fileInputStreamCaches.remove(fileInputStreamCache);
+        if (exchangeOnCompleted && fileInputStreamCaches.size() == 0) {
+            // now we can close stream and delete the temp file
+            close();
+        }
+    }
+    
+    private void cleanUpTempFile() {
+        // cleanup temporary file
+        if (tempFile != null) {
+            boolean deleted = tempFile.delete();
+            if (!deleted) {
+                LOG.warn("Cannot delete temporary cache file: " + tempFile);
+            } else if (LOG.isTraceEnabled()) {
+                LOG.trace("Deleted temporary cache file: " + tempFile);
+            }
+            tempFile = null;
+        }
+    }
 
     private void pageToFileStream() throws IOException {
         flush();

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java?rev=951337&r1=951336&r2=951337&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java Fri Jun  4 09:19:55 2010
@@ -44,9 +44,9 @@ public class FileInputStreamCache extend
             if (isSteamOpened()) {
                 getInputStream().close();
             }
-            // when close the FileInputStreamCache we should also close the cachedOutputStream
+            // Just remove the itself from cachedOutputStream
             if (cachedOutputStream != null) {
-                cachedOutputStream.close();
+                cachedOutputStream.releaseFileInputStream(this);
             }
         } catch (Exception e) {
             throw new RuntimeCamelException(e);

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java?rev=951337&r1=951336&r2=951337&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java Fri Jun  4 09:19:55 2010
@@ -76,7 +76,9 @@ public class CachedOutputStreamTest exte
         String temp = toString((InputStream)cache);
 
         ((InputStream)cache).close();
+        assertEquals("we should have a temp file", files.length, 1);
         assertEquals("Cached a wrong file", temp, TEST_STRING);
+        exchange.getUnitOfWork().done(exchange);
 
         try {
             cache.reset();
@@ -91,7 +93,7 @@ public class CachedOutputStreamTest exte
         assertEquals("we should have no temp file", files.length, 0);
     }
     
-    public void testCacheStreamToFileAndNotCloseStream() throws IOException {
+    public void testCacheStreamToFileCloseStreamBeforeDone() throws IOException {
         CachedOutputStream cos = new CachedOutputStream(exchange);
         cos.write(TEST_STRING.getBytes("UTF-8"));
 
@@ -106,8 +108,9 @@ public class CachedOutputStreamTest exte
         assertEquals("Cached a wrong file", temp, TEST_STRING);
         cache.reset();
         temp = toString((InputStream)cache);
-        assertEquals("Cached a wrong file", temp, TEST_STRING);
-        
+        assertEquals("Cached a wrong file", temp, TEST_STRING);        
+        exchange.getUnitOfWork().done(exchange);
+        assertEquals("we should have a temp file", files.length, 1);
         ((InputStream)cache).close();
         
         files = file.list();

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java?rev=951337&r1=951336&r2=951337&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java Fri Jun  4 09:19:55 2010
@@ -43,13 +43,8 @@ public class SplitterStreamCacheTest ext
 
     private static final String TEST_FILE = "org/apache/camel/converter/stream/test.xml";
     protected int numMessages = 1000;
-
-    public void testDummy() {
-        // noop
-    }
-
-    // TODO: Disabled due it fails
-    public void xxxTestSendStreamSource() throws Exception {
+    
+    public void testSendStreamSource() throws Exception {
         MockEndpoint resultEndpoint = getMockEndpoint("mock:result");
         resultEndpoint.expectedMessageCount(numMessages);
     



Re: svn commit: r951337 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/converter/stream/ test/java/org/apache/camel/converter/stream/ test/java/org/apache/camel/processor/

Posted by Willem Jiang <wi...@gmail.com>.
Hi Claus,

Thanks for pointing that out, I just committed the patch as you suggested.

Willem

Claus Ibsen wrote:
> Cool Willem
> 
> You may want to use FileUtil.deleteFile which can work around oddities
> with Windows etc. And have better logging and can retry etc.
> 
> 
> 
> On Fri, Jun 4, 2010 at 11:19 AM,  <ni...@apache.org> wrote:
>> Author: ningjiang
>> Date: Fri Jun  4 09:19:55 2010
>> New Revision: 951337
>>
>> URL: http://svn.apache.org/viewvc?rev=951337&view=rev
>> Log:
>> CAMEL-2496,CAMEL-2776 delete the temp file only after route is completed
>>
>> Modified:
>>    camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java
>>    camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java
>>    camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java
>>    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java
>>
>> Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java
>> URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java?rev=951337&r1=951336&r2=951337&view=diff
>> ==============================================================================
>> --- camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java (original)
>> +++ camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java Fri Jun  4 09:19:55 2010
>> @@ -30,6 +30,7 @@ import java.util.List;
>>
>>  import org.apache.camel.Exchange;
>>  import org.apache.camel.StreamCache;
>> +import org.apache.camel.impl.SynchronizationAdapter;
>>  import org.apache.camel.util.FileUtil;
>>  import org.apache.camel.util.IOHelper;
>>  import org.apache.commons.logging.Log;
>> @@ -41,7 +42,8 @@ import org.apache.commons.logging.LogFac
>>  * can configure it by setting the TEMP_DIR property. If you don't set the TEMP_DIR property,
>>  * it will choose the directory which is set by the system property of "java.io.tmpdir".
>>  * You can get a cached input stream of this stream. The temp file which is created with this
>> - * output stream will be deleted when you close this output stream or the cached inputStream.
>> + * output stream will be deleted when you close this output stream or the all cached
>> + * fileInputStream is closed after the exchange is completed.
>>  */
>>  public class CachedOutputStream extends OutputStream {
>>     public static final String THRESHOLD = "CamelCachedOutputStreamThreshold";
>> @@ -52,6 +54,7 @@ public class CachedOutputStream extends
>>     private boolean inMemory = true;
>>     private int totalLength;
>>     private File tempFile;
>> +    private boolean exchangeOnCompleted;
>>
>>     private List<FileInputStreamCache> fileInputStreamCaches = new ArrayList<FileInputStreamCache>(4);
>>
>> @@ -68,6 +71,27 @@ public class CachedOutputStream extends
>>             this.outputDir = exchange.getContext().getTypeConverter().convertTo(File.class, dir);
>>         }
>>
>> +        // add on completion so we can cleanup after the exchange is done such as deleting temporary files
>> +        exchange.addOnCompletion(new SynchronizationAdapter() {
>> +            @Override
>> +            public void onDone(Exchange exchange) {
>> +                try {
>> +                    //set the flag so we can delete the temp file
>> +                    exchangeOnCompleted = true;
>> +                    if (fileInputStreamCaches.size() == 0) {
>> +                        // there is no open fileInputStream let's close it
>> +                        close();
>> +                    }
>> +                } catch (Exception e) {
>> +                    LOG.warn("Error deleting temporary cache file: " + tempFile, e);
>> +                }
>> +            }
>> +
>> +            @Override
>> +            public String toString() {
>> +                return "OnCompletion[CachedOutputStream]";
>> +            }
>> +        });
>>     }
>>
>>     public void flush() throws IOException {
>> @@ -76,20 +100,7 @@ public class CachedOutputStream extends
>>
>>     public void close() throws IOException {
>>         currentStream.close();
>> -        try {
>> -            // cleanup temporary file
>> -            if (tempFile != null) {
>> -                boolean deleted = tempFile.delete();
>> -                if (!deleted) {
>> -                    LOG.warn("Cannot delete temporary cache file: " + tempFile);
>> -                } else if (LOG.isTraceEnabled()) {
>> -                    LOG.trace("Deleted temporary cache file: " + tempFile);
>> -                }
>> -                tempFile = null;
>> -            }
>> -        } catch (Exception e) {
>> -            LOG.warn("Error deleting temporary cache file: " + tempFile, e);
>> -        }
>> +        cleanUpTempFile();
>>     }
>>
>>     public boolean equals(Object obj) {
>> @@ -168,6 +179,27 @@ public class CachedOutputStream extends
>>             }
>>         }
>>     }
>> +
>> +    public void releaseFileInputStream(FileInputStreamCache fileInputStreamCache) throws IOException {
>> +        fileInputStreamCaches.remove(fileInputStreamCache);
>> +        if (exchangeOnCompleted && fileInputStreamCaches.size() == 0) {
>> +            // now we can close stream and delete the temp file
>> +            close();
>> +        }
>> +    }
>> +
>> +    private void cleanUpTempFile() {
>> +        // cleanup temporary file
>> +        if (tempFile != null) {
>> +            boolean deleted = tempFile.delete();
>> +            if (!deleted) {
>> +                LOG.warn("Cannot delete temporary cache file: " + tempFile);
>> +            } else if (LOG.isTraceEnabled()) {
>> +                LOG.trace("Deleted temporary cache file: " + tempFile);
>> +            }
>> +            tempFile = null;
>> +        }
>> +    }
>>
>>     private void pageToFileStream() throws IOException {
>>         flush();
>>
>> Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java
>> URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java?rev=951337&r1=951336&r2=951337&view=diff
>> ==============================================================================
>> --- camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java (original)
>> +++ camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java Fri Jun  4 09:19:55 2010
>> @@ -44,9 +44,9 @@ public class FileInputStreamCache extend
>>             if (isSteamOpened()) {
>>                 getInputStream().close();
>>             }
>> -            // when close the FileInputStreamCache we should also close the cachedOutputStream
>> +            // Just remove the itself from cachedOutputStream
>>             if (cachedOutputStream != null) {
>> -                cachedOutputStream.close();
>> +                cachedOutputStream.releaseFileInputStream(this);
>>             }
>>         } catch (Exception e) {
>>             throw new RuntimeCamelException(e);
>>
>> Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java
>> URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java?rev=951337&r1=951336&r2=951337&view=diff
>> ==============================================================================
>> --- camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java (original)
>> +++ camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java Fri Jun  4 09:19:55 2010
>> @@ -76,7 +76,9 @@ public class CachedOutputStreamTest exte
>>         String temp = toString((InputStream)cache);
>>
>>         ((InputStream)cache).close();
>> +        assertEquals("we should have a temp file", files.length, 1);
>>         assertEquals("Cached a wrong file", temp, TEST_STRING);
>> +        exchange.getUnitOfWork().done(exchange);
>>
>>         try {
>>             cache.reset();
>> @@ -91,7 +93,7 @@ public class CachedOutputStreamTest exte
>>         assertEquals("we should have no temp file", files.length, 0);
>>     }
>>
>> -    public void testCacheStreamToFileAndNotCloseStream() throws IOException {
>> +    public void testCacheStreamToFileCloseStreamBeforeDone() throws IOException {
>>         CachedOutputStream cos = new CachedOutputStream(exchange);
>>         cos.write(TEST_STRING.getBytes("UTF-8"));
>>
>> @@ -106,8 +108,9 @@ public class CachedOutputStreamTest exte
>>         assertEquals("Cached a wrong file", temp, TEST_STRING);
>>         cache.reset();
>>         temp = toString((InputStream)cache);
>> -        assertEquals("Cached a wrong file", temp, TEST_STRING);
>> -
>> +        assertEquals("Cached a wrong file", temp, TEST_STRING);
>> +        exchange.getUnitOfWork().done(exchange);
>> +        assertEquals("we should have a temp file", files.length, 1);
>>         ((InputStream)cache).close();
>>
>>         files = file.list();
>>
>> Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java
>> URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java?rev=951337&r1=951336&r2=951337&view=diff
>> ==============================================================================
>> --- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java (original)
>> +++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java Fri Jun  4 09:19:55 2010
>> @@ -43,13 +43,8 @@ public class SplitterStreamCacheTest ext
>>
>>     private static final String TEST_FILE = "org/apache/camel/converter/stream/test.xml";
>>     protected int numMessages = 1000;
>> -
>> -    public void testDummy() {
>> -        // noop
>> -    }
>> -
>> -    // TODO: Disabled due it fails
>> -    public void xxxTestSendStreamSource() throws Exception {
>> +
>> +    public void testSendStreamSource() throws Exception {
>>         MockEndpoint resultEndpoint = getMockEndpoint("mock:result");
>>         resultEndpoint.expectedMessageCount(numMessages);
>>
>>
>>
>>
> 
> 
> 


Re: svn commit: r951337 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/converter/stream/ test/java/org/apache/camel/converter/stream/ test/java/org/apache/camel/processor/

Posted by Claus Ibsen <cl...@gmail.com>.
Cool Willem

You may want to use FileUtil.deleteFile which can work around oddities
with Windows etc. And have better logging and can retry etc.



On Fri, Jun 4, 2010 at 11:19 AM,  <ni...@apache.org> wrote:
> Author: ningjiang
> Date: Fri Jun  4 09:19:55 2010
> New Revision: 951337
>
> URL: http://svn.apache.org/viewvc?rev=951337&view=rev
> Log:
> CAMEL-2496,CAMEL-2776 delete the temp file only after route is completed
>
> Modified:
>    camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java
>    camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java
>    camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java
>    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java
>
> Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java
> URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java?rev=951337&r1=951336&r2=951337&view=diff
> ==============================================================================
> --- camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java (original)
> +++ camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/CachedOutputStream.java Fri Jun  4 09:19:55 2010
> @@ -30,6 +30,7 @@ import java.util.List;
>
>  import org.apache.camel.Exchange;
>  import org.apache.camel.StreamCache;
> +import org.apache.camel.impl.SynchronizationAdapter;
>  import org.apache.camel.util.FileUtil;
>  import org.apache.camel.util.IOHelper;
>  import org.apache.commons.logging.Log;
> @@ -41,7 +42,8 @@ import org.apache.commons.logging.LogFac
>  * can configure it by setting the TEMP_DIR property. If you don't set the TEMP_DIR property,
>  * it will choose the directory which is set by the system property of "java.io.tmpdir".
>  * You can get a cached input stream of this stream. The temp file which is created with this
> - * output stream will be deleted when you close this output stream or the cached inputStream.
> + * output stream will be deleted when you close this output stream or the all cached
> + * fileInputStream is closed after the exchange is completed.
>  */
>  public class CachedOutputStream extends OutputStream {
>     public static final String THRESHOLD = "CamelCachedOutputStreamThreshold";
> @@ -52,6 +54,7 @@ public class CachedOutputStream extends
>     private boolean inMemory = true;
>     private int totalLength;
>     private File tempFile;
> +    private boolean exchangeOnCompleted;
>
>     private List<FileInputStreamCache> fileInputStreamCaches = new ArrayList<FileInputStreamCache>(4);
>
> @@ -68,6 +71,27 @@ public class CachedOutputStream extends
>             this.outputDir = exchange.getContext().getTypeConverter().convertTo(File.class, dir);
>         }
>
> +        // add on completion so we can cleanup after the exchange is done such as deleting temporary files
> +        exchange.addOnCompletion(new SynchronizationAdapter() {
> +            @Override
> +            public void onDone(Exchange exchange) {
> +                try {
> +                    //set the flag so we can delete the temp file
> +                    exchangeOnCompleted = true;
> +                    if (fileInputStreamCaches.size() == 0) {
> +                        // there is no open fileInputStream let's close it
> +                        close();
> +                    }
> +                } catch (Exception e) {
> +                    LOG.warn("Error deleting temporary cache file: " + tempFile, e);
> +                }
> +            }
> +
> +            @Override
> +            public String toString() {
> +                return "OnCompletion[CachedOutputStream]";
> +            }
> +        });
>     }
>
>     public void flush() throws IOException {
> @@ -76,20 +100,7 @@ public class CachedOutputStream extends
>
>     public void close() throws IOException {
>         currentStream.close();
> -        try {
> -            // cleanup temporary file
> -            if (tempFile != null) {
> -                boolean deleted = tempFile.delete();
> -                if (!deleted) {
> -                    LOG.warn("Cannot delete temporary cache file: " + tempFile);
> -                } else if (LOG.isTraceEnabled()) {
> -                    LOG.trace("Deleted temporary cache file: " + tempFile);
> -                }
> -                tempFile = null;
> -            }
> -        } catch (Exception e) {
> -            LOG.warn("Error deleting temporary cache file: " + tempFile, e);
> -        }
> +        cleanUpTempFile();
>     }
>
>     public boolean equals(Object obj) {
> @@ -168,6 +179,27 @@ public class CachedOutputStream extends
>             }
>         }
>     }
> +
> +    public void releaseFileInputStream(FileInputStreamCache fileInputStreamCache) throws IOException {
> +        fileInputStreamCaches.remove(fileInputStreamCache);
> +        if (exchangeOnCompleted && fileInputStreamCaches.size() == 0) {
> +            // now we can close stream and delete the temp file
> +            close();
> +        }
> +    }
> +
> +    private void cleanUpTempFile() {
> +        // cleanup temporary file
> +        if (tempFile != null) {
> +            boolean deleted = tempFile.delete();
> +            if (!deleted) {
> +                LOG.warn("Cannot delete temporary cache file: " + tempFile);
> +            } else if (LOG.isTraceEnabled()) {
> +                LOG.trace("Deleted temporary cache file: " + tempFile);
> +            }
> +            tempFile = null;
> +        }
> +    }
>
>     private void pageToFileStream() throws IOException {
>         flush();
>
> Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java
> URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java?rev=951337&r1=951336&r2=951337&view=diff
> ==============================================================================
> --- camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java (original)
> +++ camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java Fri Jun  4 09:19:55 2010
> @@ -44,9 +44,9 @@ public class FileInputStreamCache extend
>             if (isSteamOpened()) {
>                 getInputStream().close();
>             }
> -            // when close the FileInputStreamCache we should also close the cachedOutputStream
> +            // Just remove the itself from cachedOutputStream
>             if (cachedOutputStream != null) {
> -                cachedOutputStream.close();
> +                cachedOutputStream.releaseFileInputStream(this);
>             }
>         } catch (Exception e) {
>             throw new RuntimeCamelException(e);
>
> Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java
> URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java?rev=951337&r1=951336&r2=951337&view=diff
> ==============================================================================
> --- camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java (original)
> +++ camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java Fri Jun  4 09:19:55 2010
> @@ -76,7 +76,9 @@ public class CachedOutputStreamTest exte
>         String temp = toString((InputStream)cache);
>
>         ((InputStream)cache).close();
> +        assertEquals("we should have a temp file", files.length, 1);
>         assertEquals("Cached a wrong file", temp, TEST_STRING);
> +        exchange.getUnitOfWork().done(exchange);
>
>         try {
>             cache.reset();
> @@ -91,7 +93,7 @@ public class CachedOutputStreamTest exte
>         assertEquals("we should have no temp file", files.length, 0);
>     }
>
> -    public void testCacheStreamToFileAndNotCloseStream() throws IOException {
> +    public void testCacheStreamToFileCloseStreamBeforeDone() throws IOException {
>         CachedOutputStream cos = new CachedOutputStream(exchange);
>         cos.write(TEST_STRING.getBytes("UTF-8"));
>
> @@ -106,8 +108,9 @@ public class CachedOutputStreamTest exte
>         assertEquals("Cached a wrong file", temp, TEST_STRING);
>         cache.reset();
>         temp = toString((InputStream)cache);
> -        assertEquals("Cached a wrong file", temp, TEST_STRING);
> -
> +        assertEquals("Cached a wrong file", temp, TEST_STRING);
> +        exchange.getUnitOfWork().done(exchange);
> +        assertEquals("we should have a temp file", files.length, 1);
>         ((InputStream)cache).close();
>
>         files = file.list();
>
> Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java
> URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java?rev=951337&r1=951336&r2=951337&view=diff
> ==============================================================================
> --- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java (original)
> +++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterStreamCacheTest.java Fri Jun  4 09:19:55 2010
> @@ -43,13 +43,8 @@ public class SplitterStreamCacheTest ext
>
>     private static final String TEST_FILE = "org/apache/camel/converter/stream/test.xml";
>     protected int numMessages = 1000;
> -
> -    public void testDummy() {
> -        // noop
> -    }
> -
> -    // TODO: Disabled due it fails
> -    public void xxxTestSendStreamSource() throws Exception {
> +
> +    public void testSendStreamSource() throws Exception {
>         MockEndpoint resultEndpoint = getMockEndpoint("mock:result");
>         resultEndpoint.expectedMessageCount(numMessages);
>
>
>
>



-- 
Claus Ibsen
Apache Camel Committer

Author of Camel in Action: http://www.manning.com/ibsen/
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus