If it is possible !

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

> 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