2012-05-04 5 views
9

में कार्यावधि में ऊंट मार्ग जोड़ें मैं कैसे जावा में कार्यावधि में एक ऊंट मार्ग जोड़ सकते हैं? मुझे एक Grails उदाहरण मिला है लेकिन मैंने इसे जावा में कार्यान्वित किया है।जावा

मेरे applicationContext.xml पहले से ही कुछ पूर्वनिर्धारित स्टेटिक रूट है और मैं रन टाइम पर यह करने के लिए कुछ गतिशील मार्गों जोड़ना चाहते हैं। क्या यह संभव है? क्योंकि गतिशील मार्ग को शामिल करने का एकमात्र तरीका मार्ग.एक्सएमएल लिखना है और फिर संदर्भ में मार्ग परिभाषा लोड करना है। मौजूदा स्थिर मार्गों पर यह कैसे काम करेगा? Route at runtime

उत्तर

14

आप बस की तरह इस

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); 
    } 
} 

पूरा उदाहरण के लिए इस इकाई परीक्षण को देखने के मार्गों को जोड़ने के लिए ... कुछ CamelContext पर कुछ अलग एपीआई कॉल कर सकते हैं ...

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

+0

आपकी प्रतिक्रिया के लिए धन्यवाद लेकिन मैं इसे करने का अधिक कॉन्फ़िगर करने योग्य तरीका ढूंढ रहा हूं। मेरे मामले में एक बाहरी आवेदन मेरे आवेदन के मार्गों का निर्धारण कर सकता है, मैं इस समस्या के लिए अधिक विन्यास योग्य समाधान की तलाश कर रहा हूं –

+1

ऊपर दिया गया समाधान मेरे लिए काफी विन्यास योग्य दिखता है। क्या आप पूरा मार्ग गतिशील होना चाहते हैं? फिर आप केवल एक्सएमएल का उपयोग कर सकते हैं। –

+0

इसका सभी जावा कोड, इसलिए कॉन्फ़िगरेशन विधि के अंदर आप इसका उपयोग कर सकते हैं .. अन्यथा, अन्य विधियों आदि को कॉल करें ताकि आप डीएसएल को बहुत गतिशील बना सकें। इसके अलावा आप का उपयोग करने के लिए एक्सएम टेम्पलेट कक्षाओं की संख्या भी हो सकती है और यदि आप रूटबिल्डर में डीएसएल पसंद नहीं करते हैं, तो आप सीधे मॉडल पैकेज में कक्षाओं का उपयोग करके मार्ग बना सकते हैं। –

1

@Himanshu, कृपया dynamicroute विकल्पों पर एक नज़र (दूसरे शब्दों में मार्ग पर्ची) लेने के लिए गतिशील रूप से मार्ग में मदद मिल सकती है कि विभिन्न 'स्थलों' प्रमाणपत्र के आधार पर दाग की स्थिति

चेक ऊंट साइट में गतिशील रूटर मदद लिंक;

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

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

और पर्ची विधि के भीतर;

/** 
* 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; 
} 

आशा है कि यह मदद करता है ...

धन्यवाद।