Hi, I created a project, I want that the route stops when the Camel Batch are
complete, I used
SimpleScheduledRoutePolicy but you have to define a start an end date, and
always stop the route before the route finish to process. I did this, works
fine, but I think there is a better way
//Creamos una ruta adicional en el contexto
context.addRoutes(new RouteBuilder() {
public void configure() {
onException(Exception.class).setRedeliveryPolicy(redeliveryPolicy);
from("smb://"+ inputXrtSmbDomain +";"+ inputXrtSmbUser +"@"+
inputXrtSmbServer +"/"+ inputXrtSmbFolder +"?password="+ inputXrtSmbPassword
+ "&delete=false&delay=60000")
.routeId("sap-xrt-connect-interface-receive-" + fileNameOnly)
.setProperty("CamelBatchComplete").simple("${property.CamelBatchComplete}")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws
Exception {
CamelBatchComplete =
exchange.getProperty("CamelBatchComplete").toString();
}
})
.filter().method(new GenericFileFilter<T> (){
@Override
public boolean accept(GenericFile<T> file) {
Date fileNameLastModified = new
Date(file.getLastModified());
//Se realiza la comprobacion de fechas
if(fileNameLastModified.after(documentDateBefore) &&
fileNameLastModified.before(documentDateAfter)){
return true;
}else{
return false;
}
}
}).process(new Processor() {
@Override
public void process(Exchange exchange) throws
Exception {
GenericFileMessage<File> msg =
exchange.getIn(GenericFileMessage.class);
String fileName []=
msg.getGenericFile().getFileNameOnly().split("\\.");
// Se realiza la validacion de cuando el fichero
tiene extension o no
String destinationPath = String.format("%s%s_%s",
fileNameOnly,fileName[0], 2 <= fileName.length ? fileName[1] : "");
exchange.getOut().setBody(msg.getBody());
exchange.getOut().setHeader(Exchange.FILE_NAME,
destinationPath);
}
})
.to("sftp://"+ outputSapFtpUser +"@"+ outputSapFtpServer
+"/"+ outputSapFtpPFolder +"?flatten=true&password="+ outputSapFtpPassword
+"&passiveMode="+ outputSapFtpPassiveMode +"&binary=true&autoCreate=false")
.log("sent file ${file:name} to SAP");
}
});
The Stop Code
if(context.getRouteStatus("sap-xrt-connect-interface-receive-" +
fileNameOnly).isStarted()){ // Se verifica si se inicio la ruta
int CamelBatchValidator = 0;
do{
Thread.sleep(10000); // Se realiza la verificacion cada
10
segundos si la interfaz culmino su procesamiento
if (CamelBatchComplete=="true"){
Thread.sleep(20000); // Tiempo adicional para
verificar que
todo ha culminado
context.stopRoute("sap-xrt-connect-interface-receive-" +
fileNameOnly);
Thread.sleep(10000);
context.removeRoute("sap-xrt-connect-interface-receive-" +
fileNameOnly);
CamelBatchValidator=1;
CamelBatchComplete = null;
}else{
//Si la ruta esta vacia o hay error al conectar
, esto hara que
entre en el IF de arriba y elimine la ruta
if(CamelBatchComplete == null){
CamelBatchComplete="true";
}
}
}while(CamelBatchValidator==0);
--
View this message in context:
http://camel.465427.n5.nabble.com/How-to-stop-a-dynamic-route-tp5783385.html
Sent from the Camel - Users mailing list archive at Nabble.com.