On Wed, Dec 17, 2008 at 3:42 PM, watcher <patr...@daly.ws> wrote: > > I'm noticed an intermittent exception be thrown in my application. It usually > happens after uploading a large file. It seems to happen whenever the > fileConsumer is attempting to poll a file that is been written too. > I expected the fileConsumer only to poll the file when it has an > exclusiveReadLock on the file. > > I can replicate the problem by dropping a file into the server and quickly > opening the file with excel. ( This will hold a lock on the file) after 30 > secs or so the exception is thrown. > > <code> > java.io.FileNotFoundException: > c:\temp\File_20081120_17-Dec-2008_14-15-59.txt (The > process cannot access the file because it is being used by another process) > at java.io.RandomAccessFile.open(Native Method) > at java.io.RandomAccessFile.<init>(RandomAccessFile.java:212) > at > org.apache.camel.component.file.FileConsumer.acquireExclusiveReadLock(FileConsumer.java:2 > 04) > at > org.apache.camel.component.file.FileConsumer.pollFile(FileConsumer.java:143) > at > org.apache.camel.component.file.FileConsumer.pollFileOrDirectory(FileConsumer.java:89) > at > org.apache.camel.component.file.FileConsumer.pollFileOrDirectory(FileConsumer.java:99) > at > org.apache.camel.component.file.FileConsumer.poll(FileConsumer.java:65) > at > org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:66) > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) > at > java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) > at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(Scheduled > ThreadPoolExecutor.java:98) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(Schedule > dThreadPoolExecutor.java:181) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadP > oolExecutor.java:205) > at > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) > at java.lang.Thread.run(Thread.java:619) > </code> > > I had hope that after releasing the lock on the file (closing excel) the > fileConsumer would retry the poll. > However the file remains on the c:\\temp directory. Should the file > component not retry up to 6 times from my setup below. The error handle kick is when the file exchange has been created and is processed in the routing. So it's working after the from. However you have configured the file consumer to run again after 30 sec, so the file will be picked up this 2nd time then.
It will retry the .to part in your route up till 6 times, so if the ftp producer can not upload the file it will retry. Can you enable TRACE logging for org.apache.camel.component.file It will spit a bit more out in the log. I would like to see why the NIO lock() throws FileNotFoundException and doesn't wait for the lock to be granted. > > > errorHandler(deadLetterChannel("activemq:queue:errors").maximumRedeliveries(6).initialRedeliveryDelay(5000)); > > from("file://c://temp?delete=true&consumer.delay=30000&consumer.alwaysConsume=true&consumer.exclusiveReadLock=true").to("ftp://usern...@localhost?password=pass;binary=true) > > Camel 1.5.0 > > Many Thanks > -- > View this message in context: > http://www.nabble.com/FileComponent-FileNotFoundException-tp21054406s22882p21054406.html > Sent from the Camel - Users mailing list archive at Nabble.com. > > -- /Claus Ibsen Apache Camel Committer Blog: http://davsclaus.blogspot.com/