camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "james strachan (JIRA)" <>
Subject [jira] Commented: (CAMEL-3563) CamelContext should act like a Component (i.e. a TypeConverter of CamelContext -> CamelContextComponent)
Date Fri, 21 Jan 2011 12:19:45 GMT


james strachan commented on CAMEL-3563:


Right now any bean in the Spring context which is convertable to a Component or Endpoint can
be used directly in Camel, making a new URI scheme on the fly. This has been there for 3 years
and is a great feature.  This is how you can do things like:

<bean id="mqSeries" class="org.apache.camel.jms.JmsComponent">

<bean id="tibco" class="org.apache.camel.jms.JmsComponent">

So you can take a generic component (JMS) and make specific configured instances; which then
act like a separate URI scheme.

Then in code you can refer to **mqSeries:SomeQueue** and **tibco:AnotherQueue**

Are you proposing we go back in time 3 years and avoid doing such a thing because you could
possibly hide one of the standard URI schemes? Hiding URI schemes is another great feature
- it lets you stub out middleware in test cases with mock endpoints by just adding beans to
your context but reusing a route definition as is.

So for this specific issue,  I'm proposing we add a CamelContextComponent which takes a CamelContext
in the constructor which just exposes its endpoints. Then any endpoint can be prefixed by
the ID of the camelContext in which its defined and hey presto - in a nice neat URI naming
scheme - we get an easy way to route between CamelContext instances.

I'm not suggesting making any changes to how Camel URIs work (they've been great for years).

If you really want an explicit URI prefix to make URIs extra long and verbose, we could also
add a "camelContext:" URI scheme which just takes the next name on the path and looks up the
CamelContext in the Spring context and then uses the same CamelContextComponent I mention

In this case both: "camelContext:foo:direct:bar" and "foo:direct:bar" would work.

Though the genie was let out of the bottle 3 years ago with respect to being able to hide
the default URI scheme implementations. Overriding the mapping of URI scheme name to an implementation
is actually a good thing

> CamelContext should act like a Component (i.e. a TypeConverter of CamelContext ->
> --------------------------------------------------------------------------------------------------------
>                 Key: CAMEL-3563
>                 URL:
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core
>            Reporter: james strachan
>             Fix For: 2.6.0
> Imagine you have a camelContext.xml for production use (e.g. you're creating an OSGi
bundle with a camelContext.xml) but you want to create an integration test case that tests
out your route.
> So you want to create a new Camel XML file, testCamel.xml which includes the camelContext.xml
and interacts with it. You now have 2 camelContexts. The test route needs to be able to refer
to any endpoints inside the other camelContext.xml.
> CamelContext has an ID (by default camelContext IIRC).
> so if we have 
> camelContext.xml
> {code}
> <camelContext id="prod" ...>
>   <route> 
>     <from uri="direct:foo">
>      ...
> {code}
> testCamelContext.xml
> {code}
> <camelContext id="test" ...>
>   <route> 
>     <from uri="direct:start">
>     <to uri="prod:direct:foo"/>
>    </route>
>   <route> 
>     <from uri="prod:seda:bar">
>     <to uri="mock:results"/>
>    </route>
> {code}
> i.e. in the test case we are routing from our local CamelContext into the production
camel context's "direct:start" endpoint and consuming from its "seda:bar" endpoint.
> i.e. we use "prod" as a name, look it up in the IoC context (just like any other Component),
but if its a CamelContext we (via TypeConverters) turn it into a Component that resolves the
rest of the name

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message