Hi,

Could you please tell me Claus how to use the addOnCompletion to close the
stream ?

THanks


Jeff


2013/5/16 Jean Francois LE BESCONT <jflebesc...@gmail.com>

> By the way, the problem appears not on if there are two files. It appears
> if the last exchange is not passed to the endpoint.
>
> Example with only one file :
>
> from("file://C:/Temp/camel/rep1/?noop=true")
>      .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", false);
>                     } else {
>                          exchange.setProperty("FILE_1", true);
>                     }
>                }
>           })
>           .choice()
>           .when(property("FILE_1").isEqualTo(Boolean.TRUE))
>
> .to("stream:file?fileName=C:/Temp/camel/rep1/out/out_1.csv&closeOnDone=true")
>           .end()
>      .end()
> .end();
>
>
> Jeff
>
>
> 2013/5/16 Jean Francois LE BESCONT <jflebesc...@gmail.com>
>
>> Hi,
>>
>> Thanks Claus for the answer. I have logged a jira (
>> https://issues.apache.org/jira/browse/CAMEL-6367)
>>
>> I have not really understand how to implements your recommandation about
>> exchange.addOnCompletion. After downloaded the camel code to understand
>> how package org.apache.camel.converter.stream works, I don't know how to
>> access the fileInputStreamCache from the processor :
>>
>>
>> .process(new Processor() {
>>
>> public void process(Exchange exchange) throws Exception {
>>  exchange.addOnCompletion(new SynchronizationAdapter() {
>> @Override
>>  public void onDone(Exchange exchange) {
>>  FileInputStreamCache fileInputStreamCache= ?????????? ;
>>  try {
>> if (fileInputStreamCache != null) {
>> fileInputStreamCache.close();
>>  }
>> close();
>> } catch (Exception e) {
>>  LOG.warn("Error deleting temporary cache file: " + tempFile, e);
>> }
>> }
>>  });
>> }
>>
>> Is it possible  ?
>>
>>
>> Thanks
>>
>> Jeff
>>
>>
>> 2013/5/16 Claus Ibsen <claus.ib...@gmail.com>
>>
>>> 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