2013-06-02 6 views
0

J'ai cette route camel où les valeurs json d'une URL sont insérées dans ma base de données. Code :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); 

Comme vous pouvez le voir tous les jenkinsBuilds sont chargés dans une liste:

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

La première fois que je lance le programme de la liste est vide. La deuxième fois que j'exécute le programme, la liste est capable d'obtenir les valeurs voulues de ma base de données.

Ma question est: Comment puis-je configurer mes routes afin que la liste contienne les mêmes valeurs que lorsque je l'exécute la deuxième fois?

Est-il possible de redémarrer toute la méthode Configure()?

merci à l'avance

Répondre

0

La méthode configure() dans un RouteBuilder n'est invoqué une fois lors du démarrage Camel (ou si vous ajoutez des itinéraires à l'exécution).

Alors peut-être que vous avez besoin d'avoir une logique qui vérifie s'il y a des données de configuration jenkins du tout. Et sinon, alors attendez ou ce que vous devez faire. Et quand il y a des données, vous pouvez dans cette logique créer une nouvelle instance de RouteBuilder et ajouter ces routes au CamelContext en cours - par exemple ajouter des routes à l'exécution.