Doing it that way is actually a pain. It would be nice if you could just
attach a processor definition inline.
from("direct:my route").setHeader("a", constant("b").attach(partialRoute)
The attach would attach another processor definition to the process. I am
just trying to find ways to shorten our routes. They use 2 or three
different variants of the same exception handling logic, the same header
set logic and so on. Processors and beans only get you so far before you
are out of the DSL flow and things become tough to manage. I have some huge
routes with 30+ lines of DSL and would like to trim them down.
*Robert Simmons Jr. MSc. - Lead Java Architect @ EA*
*Author of: Hardcore Java (2003) and Maintainable Java (2012)*
*LinkedIn: **http://www.linkedin.com/pub/robert-simmons/40/852/a39
<http://www.linkedin.com/pub/robert-simmons/40/852/a39>*
On Mon, Mar 24, 2014 at 3:31 PM, Claus Ibsen <[email protected]> wrote:
> Hi
>
> The Java DSL is just java code, so you can call other methods to
> append to the route model, eg ProcessorDefintion etc.
>
> But you will likely have to break your route. Something a long the lines of
>
> // define route as a foo variable
> ProcessorDef foo = from().to();
>
> // call method with foo
> appendStuff(foo);
>
> // continue routing on foo
> foo.to(x).to(y);
>
>
> On Mon, Mar 24, 2014 at 8:41 PM, kraythe . <[email protected]> wrote:
> > I have a number of situations where i have different parts of a route
> that
> > repeat consistently but Id rather not create separate routes or direct
> > calls because I want avoid a bottleneck. If i create 50 routes
> concurrently
> > consuming off of one queue and route them all through the same direct,
> the
> > direct itself would become a bottleneck. What I would like to do is to
> > create the route parts in a helper method and then attach them to the
> > route. For example:
> >
> > .setHeader("X", simple("${header.url}")
> > .setHeader("y", simple("${header.something_else}")
> > ... and so on for 10 headers.
> > .to("http:myendpoint.com")
> >
> > What I would like to do is declare a method that contains all of that and
> > then do something like:
> >
> > from("...") // so on and rest of non-common route
> > .attach(myRoutePartBuilder())
> > .to(" ... ") // and so on.
> >
> > One example of how this effects me is that I have a number of different
> > handlers that resemble the following:
> >
> >
> >
> .onException(Exception.class).useOriginalMessage().handled(true).maximumRedeliveries(0)
> > // catch exceptions
> > .setHeader(Exchange.FAILURE_ROUTE_ID,
> > property(Exchange.FAILURE_ROUTE_ID)) // set route that failed
> > .setHeader(Exchange.EXCEPTION_CAUGHT,
> > simple("${exception.stacktrace}")) // Store reason for error
> > .to(ExchangePattern.InOnly,
> > endpointAMQ(QUEUE_CASE_AUTOMATION_DEAD)).end() // to DLQ
> >
> > I have about 3 versions of this that are slightly different and used in
> > over 2 dozen routes. I have to copy paste that part all over.
> Furthermore I
> > cant do this as a global handler because the variants are handling the
> same
> > exceptions in slightly different ways. What I want is:
> >
> > .onException(buildExceptionHandler1())
> > .to("...") // so on
> >
> > and
> >
> > .onException(buildExceptionHandler2())
> > .to("...") // so on
> >
> > So any ideas how this could be accomplished with 2.12.x? If not, any
> advice
> > on how to handle these issues without creating performance bottlenecks?
> >
> > TIA
> >
> > *Robert Simmons Jr. MSc. - Lead Java Architect @ EA*
> > *Author of: Hardcore Java (2003) and Maintainable Java (2012)*
> > *LinkedIn: **http://www.linkedin.com/pub/robert-simmons/40/852/a39
> > <http://www.linkedin.com/pub/robert-simmons/40/852/a39>*
>
>
>
> --
> Claus Ibsen
> -----------------
> Red Hat, Inc.
> Email: [email protected]
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen
> Make your Camel applications look hawt, try: http://hawt.io
>