2016-11-09 54 views
1

有時我必須添加一個對象駱駝註冊表(當然與Java)。在大多數情況下,它是一個數據源。駱駝如何添加註冊表的東西 - 用java,一般

我的問題是我找不出一個一般的工作方式。

我總是開始獲得註冊表:

getContext().getRegistry(); 

但「註冊表」沒有任何方法來添加一個對象。所以,我必須嘗試(使用調試器)在使用

getContext().getRegistry(some.class)<some method to add something>; 

例如,在一個項目(駱駝藍圖)什麼樣的註冊表我要叫

SimpleRegistry registry = new SimpleRegistry(); 
registry.put("some", bean); 
getContext().getRegistry(CompositeRegistry.class).addRegistry(registry); 

現在,我創建了一個項目,同結構(也是相同的母版父),但現在上面的代碼停止工作,因爲由於某種原因,現在駱駝使用PropertyPlaceholderDelegateRegistry我相信會有代碼來添加我的bean,但;

是否有代碼可以與每個設置一起爲駱駝註冊表添加內容?

回答

4

這是一種將東西添加到RouteBuilder類的註冊表中的方法。下面我添加一個TCPServerInitializerFactory,稍後會使用它。我總是使用camel-blueprint archetype,但是使用java dsl創建路線。這對我來說很好。

TCPServerInitializerFactory serverFactory = new TCPServerInitializerFactory(null); 
final CamelContext camelContext = getContext(); 
     final org.apache.camel.impl.SimpleRegistry registry = new org.apache.camel.impl.SimpleRegistry(); 
     final org.apache.camel.impl.CompositeRegistry compositeRegistry = new org.apache.camel.impl.CompositeRegistry(); 
     compositeRegistry.addRegistry(camelContext.getRegistry()); 
     compositeRegistry.addRegistry(registry); 
     ((org.apache.camel.impl.DefaultCamelContext) camelContext).setRegistry(compositeRegistry); 
    registry.put("spf", serverFactory); 
+0

不漂亮,但應該適用於所有情況 - 感謝 – dermoritz

+0

相信有一個整潔的方式,但我發現大多數方法是爲純Java的方法,而不是藍圖/ OSGi的一個和我一起工作。 –

+0

什麼是純java方法? – dermoritz