This piece of code is a very simplified version of my real code. My application is running on an OSGi container and the different stages in my processing are isolated in different bundles. So when I need to pass a message from one stage to another, I need to use a 'vm' endpoint, a.k.a. a seda queue.
To give you more background, I am processing large files (each file can contain up to 500,000 items) and I receive a lot of those. All of my input is multithreaded, so that I can read many files at the same time. overview of my real route from("file:input....") .threads(5) .bean(ObjectIteratorFactory.class, "createIterator") // this bean creates an iterator that will read 1 item at a time // and it will keep the input file opened until it is done .split(body()).streaming() .process(firstProcessor) .to("vm:secondStageInAnotherBundle") .end() .log("Done processing file ${file:name}") So that seda queue (or vm endpoint in my case) is needed since I don't want to have all of my code inside the same bundle. If I don't use a seda queue, it works fine and the file gets deleted at then end, when ObjectIterator has closed its input stream. If the seda is involved, Camel tries to close the file after processing the first item in the file... -- View this message in context: http://camel.465427.n5.nabble.com/Camel-calling-commit-too-early-when-using-split-seda-file-endpoint-tp2830894p2834071.html Sent from the Camel - Users mailing list archive at Nabble.com.