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 >>>> >>> >>> >> >