On Tue, Feb 7, 2012 at 4:41 AM, Larry Meadors <larry.mead...@gmail.com> wrote:
> Just had a thought - couldn't I use the file component as a batch consumer,
> then know when it had consumed all of the files and trigger my cleanup code
> based on that, then have that trigger the shutdown?
>

Yes the file consumer is a batch consumer, so it enrich the message
with details.

You can just add add a onWhen predicate to your onCompletion, to only
trigger when the batch is complete.
Exchange.BATCH_COMPLETE == true

Something alike

onCompletion().onWhen(header(Exchange.BATCH_COMPLETE).isEqualTo(true))
  .xxxx
.end();




> Not at my computer at the moment, I'll have to try it in the morning.
>
> Larry
> On Feb 6, 2012 4:22 PM, "Larry Meadors" <larry.mead...@gmail.com> wrote:
>
>> Wow, this thread is growing and what I thought was a simple task is
>> turning into a bit of a mess. :-/
>>
>> Here's what I'm trying to accomplish:
>>  - I have a directory with files in it
>>  - I want to process every file in that directory
>>  - Once I have processed *all* of the files, I want my app to execute
>> some cleanup code and then shut down
>>
>> The original issue was that when I started up the app, it shut down
>> immediately and didn't process any files...so I changed my code to use
>> the Main class to keep it running until it was done.
>>
>> That worked, but then it wouldn't *stop* and I couldn't run my cleanup
>> code.
>>
>> It processed all the files, but stayed running...so I added the
>> shutdown thing in an onCompletion block, thinking (erroneously) that
>> the onCompletion code would run at the end after ALL files were
>> processed.
>>
>> Now I see that the code in onCompletion() is running after every file
>> is processed...so it gets one or two files, then shuts down. Which
>> looks like the expected behavior, now that I'm re-reading that section
>> in the CIA book.
>>
>> Can someone point me to an example that shows how to do what I'm
>> trying to do here?
>>
>> The issue seems to be knowing when I'm done (all the files have been
>> consumed). Is there a way to do that? Is it documented anywhere?
>>
>> Does sendEmptyMessageWhenIdle=true mean that it'll send a null message
>> after processing all of the files or only if there are no files when
>> it starts?
>>
>> Larry
>>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cib...@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to