camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christian Schneider <>
Subject Re: Camel Osgi Component
Date Thu, 17 Feb 2011 06:07:16 GMT
Hi Roshan,

I may have a solution may have a solution to your problem. Yesterday I 
had a chat with Achim Nierbeck from Karaf and Pax Web. We talked about 
integration on OSGi
and if the NMR is needed or not.

So while using the NMR is one option for you Achim also told me he had 
succesfully used the seda component to talk between bundles. He simply 
published the seda component with interface Component as an
OSGi service. Then he added a service reference to the other bundles. In 
spring having a bean with id seda means for camel that there is a 
component seda. Without spring you can simply
add the component by hand.

So this could be an easy solution. It is quite elegant as it only needs 
to register / reference the component once and then it can be used like 


Am 15.02.2011 17:16, schrieb Roshan A. Punnoose:
> Hi,
> I am looking for an osgi camel component that acts sort of like a "direct/seda" endpoint
between bundles.
> For example,
> Bundle A:
> from("something").to("osgidirect:endpoint")
> Bundle B:
> from("osgidirect:endpoint")...
> Bundle C:
> from("osgidirect:endpoint")...
> I have been able to develop something like this and it is working in the OSGi container,
but I was wondering if there is something already available out there like this.
> If not, I can explain how I did this, and get your advice on how to proceed.
> So the component works by registering and consuming osgi services. The Consumer gets
registered as an OSGi service with property (endpointName="endpoint"), the Producer pulls
all services with an OSGi filter of (endpointName="endpoint"). And all this seems to work.
> My only issue is how I access the BundleContext. To be able to register and consume services,
I need access to the BundleContext of the bundles that are consuming/producing (Bundle A/B/C).
The way I have gotten around this right now, is to make sure that I always define the Consumer
as a Spring Bean, and implement BundleContextAware, so that Spring DM will inject the BundleContext.
However, I don't want to impose this restriction. Looking through the source code, I noticed
that the OsgiCamelContext (or OsgiSpringCamelContext) holds the bundleContext as a private
variable. Is there anyway we could expose that bundleContext somewhere on the context so that
when I create the Consumer/Producer I can pull this from the CamelContext in some way? (Or
is it exposed someway already that I haven't seen?)
> Thanks so much!
> Roshan


View raw message