camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From fachhoch <fachh...@gmail.com>
Subject Re: reload routebuilder at runtime
Date Tue, 28 Jun 2011 15:15:36 GMT
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.

Mime
View raw message