2013-06-02 3 views
0

У меня есть этот маршрут верблюда, где значения json из URL-адреса вставляются в мою базу данных. код:apache camel hibernate insert

@Override 
public void configure() throws Exception { 
    //voor elke tabel een andere route want bij wijzigingen json formaat crashed enkel 1 routebuilder 
    ObjectMapper objectMapper = new ObjectMapper(); 
    objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
    DataFormat jenkinsConfigFormat = new JacksonDataFormat(objectMapper, JenkinsConfiguration.class); 

    jenkinsConfigurations = configurationService.listJenkinsConfigurations(); 
    logger.info("Starting routes for " + jenkinsConfigurations.size() + " jenkins configurations"); 

    for (JenkinsConfiguration configuration : jenkinsConfigurations) { 
     from("timer://foo?fixedRate=true&period=120s&delay=20s") 
       .to(configuration.getUrl() + "/api/json") 
       .routeId(BUILD_ROUTE) 
       .unmarshal(jenkinsConfigFormat) 
       .enrich("direct:jenkinsconfig", new UseLatestAggregationStrategy()) 
       .split(simple("${body.builds}")) 
       .choice() 
       .when(buildNumberAlreadyExists()) 
       .otherwise() 
       .to("hibernate:be.kdg.teamf.model.Build") 
       .end(); 

     from("timer://foo?fixedRate=true&period=120s&delay=20s") 
       .routeId(HEALTH_ROUTE) 
       .to(configuration.getUrl() + "/api/json") 
       .unmarshal(jenkinsConfigFormat) 
       .enrich("direct:jenkinsconfig", new UseLatestAggregationStrategy()) 
       .split(simple("${body.healthReport}")) 
       .choice() 
       .when(healthReportAlreadyExists()) 
       .otherwise() 
       .to("hibernate:be.kdg.teamf.model.HealthReport") 
       .end(); 

     from("timer://foo?fixedRate=true&period=120s&delay=20s") 
       .routeId(MODULE_ROUTE) 
       .to(configuration.getUrl() + "/api/json") 
       .unmarshal(jenkinsConfigFormat) 
       .enrich("direct:jenkinsconfig", new UseLatestAggregationStrategy()) 
       .split(simple("${body.modules}")) 
       .choice() 
       .when(moduleAlreadyExists()) 
       .otherwise() 
       .to("hibernate:be.kdg.teamf.model.Module") 
       .end(); 

     List<Build> jenkinsBuilds = buildService.getBuildsJenkinsProject(configuration); 
     DataFormat buildConfigFormat = new JacksonDataFormat(objectMapper, BuildDetail.class); 

Как вы можете видеть все jenkinsBuilds загружены в список:

List<Build> jenkinsBuilds = buildService.getBuildsJenkinsProject(configuration); 

В первый раз, когда я запускаю программу список пуст. Во второй раз, когда я запускаю программу, список может получить нужные значения из моей базы данных.

Мой вопрос: как настроить маршруты, чтобы список содержал те же значения, что и при первом запуске?

Возможно ли перезапустить весь метод Configure()?

заранее спасибо

ответ

0

Метод конфигурирования() в RouteBuilder вызывается только один раз при старте верблюд (или, если вы добавите маршруты во время выполнения).

Так что, возможно, вам нужна логика, которая проверяет, есть ли какие-либо данные конфигурации jenkins. А если нет, то подождите или что вам нужно сделать. И когда есть данные, вы можете в этой логике создать новый экземпляр RouteBuilder и добавить эти маршруты к запущенному CamelContext - например, добавить маршруты во время выполнения.