如何使用Main class standalone

时间:2015-05-20 15:55:27

标签: apache-camel

我尝试将EventNotifier添加到使用Camel的Main类的Apache Camel独立应用程序中。

http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html

public void boot() throws Exception {
    Main main = new Main();
    main.addRouteBuilder(new MyRouteBuilder());
    System.out.println("Starting Camel. Use ctrl + c to terminate the JVM.\n");
    main.run();
}

我想添加一个类似于本食谱示例中的EventNotifier:

http://camel.apache.org/eventnotifier-to-log-details-about-all-sent-exchanges.html

这是我简单的EventNotifier

@Override
public void notify(EventObject event) throws Exception {
    logger.info(event.toString());
}

@Override
public boolean isEnabled(EventObject event) {
    logger.info("Checked if enabled");
    return true;
}

使用Java DSL,我想做类似的事情:

context.getManagementStrategy().addEventNotifier(new MyEventNotifier());

Main上有一些方法似乎有用:main.getOrCreateCamelContext()和main.getCamelContexts()。

getOrCreateCamelContext 将创建一个上下文,但是当调用main.run()时,该上下文消失了(Camel-1并且是唯一的上下文但是在main.run()之后,Camel-2是唯一的背景)。

在调用main.run()之前,

getCamelContexts 为空。

我尝试在Main创建上下文后在另一个线程中添加EventNotifier,但我的日志中没有显示任何内容,所以我怀疑在上下文启动之前需要添加EventNotifier。

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:0)

我找到了一种方法:创建一个匿名内部类并覆盖postProcessCamelContext方法。

    Main main = new Main() {
        @Override
        protected void postProcessCamelContext(CamelContext camelContext) throws Exception {
            super.postProcessCamelContext(camelContext);
            camelContext.getManagementStrategy().addEventNotifier(new MyEventNotifier());
        }
    };