I saw the code fo DefaultCamelContext and I think I can use the method

    public synchronized void addRouteDefinitions(Collection<RouteDefinition>
routeDefinitions) throws Exception {
        for (RouteDefinition routeDefinition : routeDefinitions) {
            removeRouteDefinition(routeDefinition);
        }
        this.routeDefinitions.addAll(routeDefinitions);
        if (shouldStartRoutes()) {
            startRouteDefinitions(routeDefinitions);
        }
    }

   

My   RouteBuilder  will be a spring-groovy  file  , once I change the file   
spring will reload .   I will use a servlet to update  the camel context by
calling addRouteDefinitions to which I will pass
SpringApplicationContext.getBean("myrouteBuilder). getRouteCollection().

what happens to the processor My routebuilder is   this 

public class NearBatchFilesRouteBuilder extends RouteBuilder {

        
    public void configure() {
        from("file:///u01/oracle/artms-near/NEW?delay=60000&move=../PROCESSED")
                        .convertBodyTo(String.class)
        
.aggregate(constant(true)).completionSize(10).completionTimeout(10000L).groupExchanges()
 
                        .process(new 
FileProcessor()).to("jms:queue:gov.hhs.newBatch.queue");
    }

    public static class FileProcessor implements  Processor {
                @Override
                public void process(Exchange exchange) throws Exception {
                        List<BatchFile>  batchFiles=
Lists.newArrayList(Iterables.transform(exchange.getProperty(Exchange.GROUPED_EXCHANGE,
ArrayList.class), new Function&lt;Exchange, BatchFile&gt;() {
                                @Override
                                public BatchFile apply(Exchange input) {
                                        BatchFile  batchFile= new BatchFile();
                                        String 
filename=(String)input.getIn().getHeader(Exchange.FILE_NAME);
                                        
batchFile.setFileName(FilenameUtils.getName(filename));
                                        
batchFile.setFiledata(input.getIn().getBody(String.class).getBytes());
                                        
batchFile.setFileType(StringUtils.contains(filename,
"tblACFReportInfo")? BatchFile.FileType.AUDIT:BatchFile.FileType.FINDING);
                                        return batchFile;
                                }
                        }));
                        Batch 
batch=((BatchService)SpringApplicationContext.getBean("batchService")).createNewBatch(batchFiles);
                        exchange.getIn().setBody(batch.getSysBatchId());
                }
    }
}



above  class is a groovy file and I load this using   <lang:groovy....../>
at runtime  I change   the FileProcessor code    and   spring will reload
this class, now I will access aservlet in the servlet I call 
camelContext.addRouteDefinitions(SpringApplicationContext.getBean("myrouteBuilder).
getRouteCollection())
this will reload the rootdefinitions   but what happens  to processor ?  are
they   also get  updated ?

--
View this message in context: 
http://camel.465427.n5.nabble.com/reload-routebuilder-at-runtime-tp4521292p4532138.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to