camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From alloyer <allo...@gmail.com>
Subject Re: Inconsistency in Camel Java DSL
Date Mon, 08 Jun 2009 07:55:24 GMT

Hi,Christian
I agree with you and I think the builder and model package have a little
inconsistency.
When I implement the groovy route editor today, I found that:
   1. In Xml schema editing mode, a RouteDefinition instance will be
constructed to receive the web console content.
   2. But in Groovy editing mode, a RouteBuilder instance is used because
through groovy mode, a class can generate a set of RouteDefinition
instances.

    RouteDefinition is a concept in model package while RouteBuilder is in
builder, which has a set of RouteDefinition instances in it. So when
executing the update operation, some inconsistent process are brought in.


Christian Schneider wrote:
> 
> Hi all,
> 
> I have looked into the way Camel routes are built and I think I found an 
> inconsistency that gives us a lot of dependency cycles.
> There are two main packages involved: builder and model. I would 
> describe their purpose in the following way.
> The builder package contains classes that help building the camel routes 
> in Java. It is responsible for providing a fluent Java DSL for writing 
> routes and for instantiating the model classes.
> The model package contains classes that form the tree that represents a 
> camel route. While the builder package is java dsl specific the model is 
> language agnostic.
> I would say that builder needs to reference model as it has the 
> responsibility to build the route tree. In the other direction model 
> should not reference builder.
> 
> All the following I write is based on the asumption that above 
> responsibilities are correct so I hope I got it right ;-)
> 
> If I understood the Fluent Builder Pattern correctly then a method of a 
> builder class should return a builder class.
> 
> In camel this seems to be different. The RouteBuilder method from 
> returns a RouteDefinition which extends a ProcessorDefinition. To make 
> the java dsl work
> the ProcessorDefinition also works like a builder. I think this mixes 
> responsibilities and causes many cycles between builder and model.
> 
> My proposal is to remove any builder methods from any model classes and 
> move them to the builder package. This means that RouteBuilder.from 
> should return either a RouteBuilder or a ProcessorBuilder.
> Processorbuilder is already existent but it does not seem to follow the 
> builder pattern. I think it should contain all the builder methods that 
> are currently in ProcessorDefinition (like to or loadBalance).
> ProcessorDefinition should only help to store the static route tree and 
> perhaps help to traverse it and of course it is the base class for all 
> ProcessorDefinitions.
> 
> There remains one other thing I am not so sure about. Where to create 
> for example the Processors? Should this be done in builder or in model 
> or somewhere else?
> 
> What do you think?
> 
> Greetings
> 
> Christian
> 
> -- 
> 
> Christian Schneider
> ---
> http://www.liquid-reality.de
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Inconsistency-in-Camel-Java-DSL-tp23908692p23919790.html
Sent from the Camel Development mailing list archive at Nabble.com.


Mime
View raw message