I have updated the wiki docs.

Though we could improve the stream component to auto close the stream
when the exchange is done at the end of routing as a fallback. Then
your use-case with writing to 2+ files can be supported, as all the
streams is closed when the routing is done at the end.

This requires to add an onCompletion to the exchange

exchange.addOnCompletion

And then add logic there to close the stream

Though a little challenge could be concurrency if you close the
stream, and then another exchange is using it currently.

Seems like the logic in stream producer should sync (lock) and not per
method which is wrong.
Or maybe better yet do not have a shared output stream.

Fell free to log a JIRA ticket





On Thu, May 16, 2013 at 8:07 AM, Claus Ibsen <claus.ib...@gmail.com> wrote:
> Hi
>
> That is because you do write to 2 files. The option was intended for
> writing to the same file.
>
>
>
>
> On Thu, May 16, 2013 at 7:43 AM, Jean Francois LE BESCONT
> <jflebesc...@gmail.com> wrote:
>> Hi,
>>
>> what should I do ?
>>
>> Thanks
>>
>> Jeff
>>
>>
>> 2013/5/15 Jean Francois LE BESCONT <jflebesc...@gmail.com>
>>
>>> Hey !
>>>
>>> A new option is available for the stream:file to close it when done
>>> (closeOnDone). This option is appeared in 2.11 after my jira (
>>> https://issues.apache.org/jira/browse/CAMEL-6147)
>>>
>>> File unlock (or released or closed) looks to doesn't works fine if last
>>> line is not passed to the endpoint
>>>
>>> Example :
>>>
>>> We have a CSV with X line. We want to write a part of it in a file
>>> out_1.csv and a second part in a file out_2.csv according to a business
>>> rule, in my example the rule is after two lines readed.
>>>
>>> An example is :
>>>
>>> from("file://C:/Temp/camel/rep1/?noop=true")
>>>     .log("start process file => ${file:name}")
>>>     .split()
>>>     .tokenize("\n")
>>>         .streaming()
>>>         .process(new Processor() {
>>>
>>>             public void process(Exchange exchange) throws Exception {
>>>                // After 2 lines, next lines are rejected via an exchange
>>> property
>>>                i++ ;
>>>                if( i  > 2)  {
>>>                    exchange.setProperty("FILE_1", true );
>>>                } else {
>>>                    exchange.setProperty("FILE_1", false);
>>>                }
>>>             }
>>>        })
>>>        .choice()
>>>        .when(property("FILE_1").isEqualTo(Boolean.TRUE))
>>>
>>>  
>>> .to("stream:file?fileName=C:/Temp/camel/rep1/out/out_1.csv&closeOnDone=true")
>>>        .when(property("FILE_2").isEqualTo(Boolean.TRUE))
>>>
>>> .to("stream:file?fileName=C:/Temp/camel/rep1/out/out_2.csv&closeOnDone=true")
>>>        .end()
>>>     .end()
>>> .log("end process file => ${file:name}")
>>> .end()
>>> ;
>>>
>>> It create two files, and out_1.csv is still locked.
>>>
>>> Should I update the jira or open a new ?
>>>
>>> Thanks
>>>
>>> Jeff
>>>
>>>
>
>
>
> --
> Claus Ibsen
> -----------------
> www.camelone.org: The open source integration conference.
>
> Red Hat, Inc.
> FuseSource is now part of Red Hat
> Email: cib...@redhat.com
> Web: http://fusesource.com
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen



-- 
Claus Ibsen
-----------------
www.camelone.org: The open source integration conference.

Red Hat, Inc.
FuseSource is now part of Red Hat
Email: cib...@redhat.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen

Reply via email to