Hi You can use threads(1) to turn the part of the route onwards into a single threaded route
.threads(1) .inOnly("file:target/outbox?fileExist=Append") On Sun, Jan 23, 2011 at 2:51 PM, Claus Ibsen <claus.ib...@gmail.com> wrote: > Hi > > Try with Camel 2.6 as we have fixed some issues with the splitter. > > > On Sun, Jan 23, 2011 at 2:23 PM, Christian Mueller > <christian.muel...@gmail.com> wrote: >> >> 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. >> > > > > -- > Claus Ibsen > ----------------- > FuseSource > Email: cib...@fusesource.com > Web: http://fusesource.com > Twitter: davsclaus > Blog: http://davsclaus.blogspot.com/ > Author of Camel in Action: http://www.manning.com/ibsen/ > -- Claus Ibsen ----------------- FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/