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