2012-05-04 18 views
9

Java'da çalışma zamanında nasıl bir deve yolu ekleyebilirim? Grails örneğini buldum ama Java'da uyguladım.Java'da çalışma zamanında deve rotası ekleyin

Benim appContext.xml zaten önceden tanımlanmış bazı statik yollara sahiptir ve ben de çalışma zamanında bazı dinamik yollar eklemek istiyorum. Mümkün mü? Dinamik rota eklemenin tek yolu, route.xml dosyasını yazıp, sonra da rota tanımını içeriğe yüklemektir. Mevcut statik yollarda nasıl çalışır? Route at runtime

cevap

14
sadece

context.addRoutes(new MyDynamcRouteBuilder(context, "direct:foo", "mock:foo")); 
.... 
private static final class MyDynamcRouteBuilder extends RouteBuilder { 
    private final String from; 
    private final String to; 

    private MyDynamcRouteBuilder(CamelContext context, String from, String to) { 
     super(context); 
     this.from = from; 
     this.to = to; 
    } 

    @Override 
    public void configure() throws Exception { 
     from(from).to(to); 
    } 
} 

komple örneğin bu birim testi görmek böyle ... şey rotaları eklemek CamelContext üzerinde birkaç farklı API'leri çağırabilir

...

https://svn.apache.org/repos/asf/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/AddRoutesAtRuntimeTest.java

+0

Cevabınız için teşekkürler, ancak bunu daha yapılandırılabilir bir şekilde yapıyorum. Benim durumumda, dışsal bir uygulama benim uygulamamın yollarına karar verebilir, bu problem için daha fazla yapılandırılabilir bir çözüm arıyorum. –

+1

Yukarıdaki çözüm bana oldukça yapılandırılabilir gözüküyor. Tam yolun dinamik olmasını ister misiniz? Sonra sadece xml kullanabilirsiniz. –

+0

Tüm Java kodları, bu yüzden yapılandırma yönteminin içinde kullanabilirsiniz .. else, diğer yöntemleri arayın vb. Yani DSL'i çok dinamik yapabilirsiniz. Ayrıca, kullanacağınız X sınıfı şablon sınıfına da sahip olabilirsiniz. Ayrıca, RouteBuilder'da DSL'i sevmiyorsanız, doğrudan model paketindeki sınıfları kullanarak rotalar oluşturabilirsiniz. –

1

@Himanshu, Lütfen cerro'ya göre farklı 'hedeflere' dinamik olarak yönlendirmenize yardımcı olabilecek dinamik rota seçeneklerine (başka bir deyişle yönlendirme slipine) bakın. tain durumu.

Devel sitesindeki dinamik yönlendirici yardım bağlantısını kontrol edin;

from("direct:start") 
    // use a bean as the dynamic router 
    .dynamicRouter(method(DynamicRouterTest.class, "slip")); 

Ve kayma yöntemi içinde

http://camel.apache.org/dynamic-router.html

;

/** 
* Use this method to compute dynamic where we should route next. 
* 
* @param body the message body 
* @return endpoints to go, or <tt>null</tt> to indicate the end 
*/ 
public String slip(String body) { 
    bodies.add(body); 
    invoked++; 

    if (invoked == 1) { 
     return "mock:a"; 
    } else if (invoked == 2) { 
     return "mock:b,mock:c"; 
    } else if (invoked == 3) { 
     return "direct:foo"; 
    } else if (invoked == 4) { 
     return "mock:result"; 
    } 

    // no more so return null 
    return null; 
} 

... o yardımcı olur

Teşekkür Umut.

İlgili konular