On Sat, Apr 28, 2012 at 5:18 AM, Willem Jiang <willem.ji...@gmail.com> wrote:
> The exchange property of the Exchange.BATCH_SIZE will be used when the
> aggregation call the isCompeleted(), So please don't change it dynamically.
>

Yes I told him to not create a new DefaultExchange all the time. But
only mutate the existing oldExchange.
And if he uses a StringBuilder he can append new data to it, instead
of creating a new instance all the time as well.

>
> On 4/27/12 11:25 PM, ebinsingh wrote:
>>
>> Hi All,
>>
>> I am trying to aggregate large number of xml files into files of 50000
>> records.
>> I am getting java.lang.OutOfMemoryError - Java heap space error.
>>
>> I am trying to see if there are any leaks but to my eyes i do not see any.
>>
>> Appreciate your thoughts on this.
>>
>> Aggreation logic:
>>
>> public class GlobalAggrStratergy implements AggregationStrategy {
>>        private static Logger log =
>> Logger.getLogger(GlobalAggrStratergy.class);
>>        int counter = 0;
>>        @Override
>>        public Exchange aggregate(Exchange exchange1, Exchange exchange2) {
>>                try{
>>                        StringBuilder builder;
>>                if (exchange1 == null || null ==
>> exchange1.getIn().getBody()) {
>>                        builder = new StringBuilder();
>>                        exchange1 = new DefaultExchange(new
>> DefaultCamelContext());
>>                    exchange1.getIn().setBody(builder);
>>                }
>>                builder = exchange1.getIn().getBody(StringBuilder.class);
>>                builder.append(exchange2.getIn().getBody()+"\n");
>>                exchange1.getIn().setBody(builder);
>>                exchange1.getIn().setHeader(Exchange.FILE_NAME_ONLY,
>> exchange2.getProperty(Exchange.FILE_NAME_ONLY));
>>                counter++;
>>                }catch(Exception ex){
>>                        log.error("Error aggregating", ex);
>>                }
>>                exchange1.setProperty(Exchange.BATCH_SIZE, counter);
>>                if(counter>= 50000)
>>                        counter = 0;
>>         return exchange1;
>>        }
>>
>>
>> Route configuration:
>>
>>        public void configure() throws Exception
>>        {
>>                from("direct:producerQueue").log("File name:
>> ${in.header.fileName}")
>>                .setProperty(Exchange.FILE_NAME_ONLY,
>> simple("${file:onlyname.noext}"))
>>                .split().tokenizeXML("IPDR").streaming()
>>                .aggregate(header("messageId"), new
>> GlobalAggrStratergy()).completionSize(50000).completionTimeout(20000)
>>                .process(new IPDRHeaderFooterProcessor())
>>                .to(IPDRUtil.getInstance().getProperty("IPDROutputDir"));
>>        }
>>
>> Thanks&  regards,
>>
>> Ebe
>>
>> --
>> View this message in context:
>> http://camel.465427.n5.nabble.com/Java-heap-space-issue-with-Aggregation-tp5670608p5670608.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>
>
> --
> Willem
> ----------------------------------
> CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
> FuseSource
> Web: http://www.fusesource.com
> Blog:    http://willemjiang.blogspot.com (English)
>         http://jnn.javaeye.com (Chinese)
> Twitter: willemjiang
> Weibo: willemjiang



-- 
Claus Ibsen
-----------------
CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
FuseSource
Email: cib...@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to