骆驼如何添加一些东西到注册表 - 一般用java

der*_*itz 5 apache-camel

有时我必须向camel注册表添加一个对象(当然还有java).在大多数情况下,它是一个dataSource.

我的问题是我无法弄清楚一般的工作方式.

我总是开始获得注册表:

getContext().getRegistry();
Run Code Online (Sandbox Code Playgroud)

但"注册表"没有任何添加对象的方法.所以我必须尝试(使用调试器)正在使用哪种注册表

getContext().getRegistry(some.class)<some method to add something>;
Run Code Online (Sandbox Code Playgroud)

例如,在一个项目(骆驼蓝图)中,我必须打电话

SimpleRegistry registry = new SimpleRegistry();
registry.put("some", bean);
getContext().getRegistry(CompositeRegistry.class).addRegistry(registry);
Run Code Online (Sandbox Code Playgroud)

现在我创建了一个具有相同结构的项目(也是相同的maven父项),但现在上面的代码停止工作,因为由于某种原因现在camel使用了PropertyPlaceholderDelegateRegistry我确信会有代码来添加我的bean但是;

是否有适用于每个设置的代码可以为camels注册表添加内容?

Sou*_*hti 8

这是在RouteBuilder类中向注册表添加内容的一种方法.下面我将添加一个TCPServerInitializerFactory,稍后将使用它.我总是使用camel-blueprint原型,但是使用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);
Run Code Online (Sandbox Code Playgroud)

  • 请参阅此处的示例:http://www.programcreek.com/java-api-examples/index.php?api = org.apache.camel.impl.SimpleRegistry (2认同)