Hi,
maybe you can process this by using a bean. Then you can open the stream
at the beginning and close it at the end. I try to show you what I mean:
FileWriterBean fwBean = new FileWriterBean();
public void configure() {
from("file://")
.bean(fwBean, "openFileForProcessing")
.split().tokenize("\n")
// do your enrichment
.bean(fwBean, "writeLine")
.end()
.bean(fwBean, "closeFile");
}
regards, Marco
Am 08.03.2013 12:23, schrieb Jean Francois LE BESCONT:
Thanks Willem for help.
My explaination are sometime to complicate, I will present it differently.
I have a "big" file to process efficiently, for that if I have tried :
Method 1 :
from("file://C:/Temp/camel/input_test/?noop=true")
.split()
.tokenize("\n")
// Business logic with possible reject and enrich
.recipientList(
simple("stream:file?fileName=C:/Temp/camel/output_test/out.csv"))
.end()
.end()
.end();
With this method, my process take 11 seconds but my file is not released
(windows file is locked in windows).
So I try with append :
Method 2 :
from("file://C:/Temp/camel/input_test/?noop=true")
.split()
.tokenize("\n")
// Business logic with possible reject and enrich
.to("file://?fileName=C:/Temp/camel/output_test/out.csv&fileExist=Append")
.end()
.end();
File is not locked after but it take 1,40 minutes ...
I finally try with the aggregate :
Method 3 :
from("file://C:/Temp/camel/input_test/?noop=true")
.split()
.tokenize("\n")
// Business logic with possible reject and enrich
.aggregate(header(Exchange.FILE_NAME_ONLY), new
BodyInAggregatingStrategy())
.completionTimeout(3000)
.to("file://C:/Temp/camel/output_test/")
.end()
.end()
.end();
As the example, but the process never finish, so I try to specify
completionSize(7500) and completionTimeout(15000) but my output file
doesn't contains all my row ( only 1 %). I have not find an example of how
to use these parameters ...
Please, what should I do to have a process efficient and with no lock ?
Thanks
JF