Apache Camel 2.12:将bean添加到现有的上下文

时间:2015-08-21 06:44:09

标签: java apache-camel

我需要在app启动时处理文件并从给定信息中创建一些对象,然后将它们作为bean添加到camel上下文中。例如:Mysql DataSource对象。

public static void load(CamelContext context) throws Exception {
    JndiRegistry registry = (JndiRegistry) context.getRegistry();
    PropertiesComponent pc = context.getComponent("properties", PropertiesComponent.class);
    pc.setLocation("classpath:mysql.properties");

    for (String mysql: pc.parseUri("{{mysqlConfigs}}").split(",")) {
        String MYSQL_DB_URL = pc.parseUri("{{" + mysql + ".url}}");
        String MYSQL_DB_USERNAME = pc.parseUri("{{" + mysql + ".username}}");
        String MYSQL_DB_PASSWORD = pc.parseUri("{{" + mysql + ".passwd}}");
        String DB_NAME = pc.parseUri("{{" + mysql + ".name}}");

        MysqlDataSource mysqlDS = new MysqlDataSource();

        mysqlDS.setURL(MYSQL_DB_URL);
        mysqlDS.setUser(MYSQL_DB_USERNAME);
        mysqlDS.setPassword(MYSQL_DB_PASSWORD);

        registry.bind(DB_NAME, (DataSource) mysqlDS);
    }

}

代码抛出异常,

  

org.apache.camel.impl.PropertyPlaceholderDelegateRegistry无法强制转换为org.apache.camel.impl.JndiRegistry

如果我尝试将其强制转换为SimpleRegistry,则会出现同样的错误。是否可以通过这种方式实现这一目标,或者如果不再需要任何其他方法,则应采用任何其他方法。

1 个答案:

答案 0 :(得分:1)

尝试:

JndiRegistry registry = context.getRegistry(JndiRegistry.class);