Hello list, I'm using Camel 2.4 (inside FUSE ESB 4.3). For a POC (prove of concept) I have to read a file with multiple address lines like this one: {code} 1,Hahnstr,1,60525,Frankfurt ... 10000,Hahnstr,10000,60525,Frankfurt {code}
Afterwards I have to call a web service (which makes the address updates on our customer database). The web service respond with the id (the first number in the input file) and the status (UPDATED). I have to write a result file for each processed record which should looks like (the order of the entries is not relevant): {code} 1,UPDATED ... 10000,UPDATED {code} My first solution which works fine was the following: {code} from("file:src/test/data?noop=true").routeId("POC-main") .split(body().tokenize("\n"), new PocResultAggregationStrategy()).parallelProcessing().streaming() .inOut("direct:addressService") .end() .inOnly(targetFileResourcePath); from("direct:addressUpdateService").routeId("POC-addressUpdateService") .convertBodyTo(UpdateAddress.class) .inOut("cxf:bean:addressService") .convertBodyTo(String.class); {code} After thinking about this solution, it has a few cons: 1) I didn't use a persistent aggregator which could be result in loosing all aggregated messages if someone shutdown the ESB. 2) The Aggregator looks a bit 'overingenieurd' for this requirement because I only append new lines. I tryied to implement a smarter solution and came up with this one: {code} from("file:src/test/data?noop=true").routeId("POC-main") .split(body().tokenize("\n")).parallelProcessing().streaming() .inOut("direct:addressService") .inOnly("file:target/outbox?fileExist=Append") .end(); from("direct:addressUpdateService").routeId("POC-addressUpdateService") .convertBodyTo(UpdateAddress.class) .inOut("cxf:bean:addressService") .convertBodyTo(String.class); {code} But unfortunately, the result file only contained 9897 lines instead of 10000. :-( I couldn't find an option in the file-component to lock the file, so that only one thread can manipulate the file in one time. My question is: Does the Camel file producer has an option for that? If not, should the file producer has an option like: writeLock=fileLock (similar to the readLock option of the file consumer)? Then maybe we also need an option to specify how long Camel should wait for the lock until it fails... What you are thinking? Thanks in advance for your feedback, Christian -- View this message in context: http://camel.465427.n5.nabble.com/Using-Splitter-and-file-producer-with-option-fileExist-Append-failed-tp3353618p3353618.html Sent from the Camel - Users mailing list archive at Nabble.com.