camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bfischer <>
Subject Re: Loading routes from XML files with Camel 2.4.0
Date Fri, 14 Jan 2011 09:53:44 GMT

Hi Ashwin,

thanks for your reply - but it seems I didn't found right words to explain
my use case.

If I understand explanations from the link you mentioned right, all this
different scenarios are somehow "static" which means: routes are loaded
during creation and/or starting of camel context. My test and productive
routes are working well in this scenario.

But now I try to load new and/or to re-load existing routes after camel
context was created and is still running. It's maybe comparable with Camel's
web console ...

Loading routes from xml files after the camel contexts are already up and
running with same content like the route inside of camel context in spring
config worked until I used more complex stuff like "transaction".

The different between loading a route during creation/starting a camel
context (directly inside the camel context tags or with context ref makes no
difference) or loading them from separate xml files seems to be inside that
in first variant the route goes through "bean post processing"
AbstractCamelContextFactoryBean.afterPropertiesSet() changing already loaded
routes. This post processing seems to be necessary like following comment
from this class implies (lines 309 to 314)

		// do special preparation for some concepts such as interceptors and
		// policies
		// this is needed as JAXB does not build exactly the same model definition
		// as Spring DSL would do
		// using route builders. So we have here a little custom code to fix the
		// JAXB gaps

Because this corrections don't happen for loading routes after the camel
context already exists a "transactional routes" fail because inside
"outputs" (an attribute of class RouteDefintion containing a list of
ProcessorDefinition) the lsit of Processorcs seems to be wrong.

In my test case loading the route from camel context in
RouteDefinition.setOutputs() it looks like

[Transacted[ref:null], To[mock:core-route01]]

Later, in RouteDefinition.addRoutes(), it looks like


wrapping the "mock" inside of "Transacted"

Loading a similar route (except naming) if camel context is already up and
running in RouteDefinition.setOutputs() it results in the same behavior

[Transacted[ref:null], To[mock:test01-route01]]

but it stay unchanged (not post processed) if it comes to

[Transacted[ref:null], To[mock:test01-route01]]

Method ProcessorDefinitionHelper.hasOutputs( outputs, true ) now reports a
problem because "Transacted" wrappes or contains nothing ...

I don't know how to add this post processing as additional step after
loading from xml and before adding routes with something like

    Resource rsc = new ClassPathResource( resourceName, clazz );    
    Source   src = new StreamSource     ( rsc.getInputStream() );
    Object   obj = this.unm.unmarshal( src );
     // IMO something should happen here

    camelContext.addRouteDefinitions( routes.getRoutes() );

Camel 2.6 I didn't use right now because company rules forbid usage of
unreleased stuff.

Hopefully I use now the forum editor a little bit better because in my
original post some words are not shown ... I think because I did not quote
xml tags right ..
Sorry for inconvinience ..

Any help is welcome.

Greetings from Germany

Bernd Fischer
GK Software AG
View this message in context:
Sent from the Camel - Users mailing list archive at

View raw message