Hi ! Please h o w can I pass by this limitation ? Le 19 mai 2013 22:58, "Jean Francois LE BESCONT" <jflebesc...@gmail.com> a écrit :
> 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 >>>>> >>>> >>>> >>> >> >