I have the spring file below. It simply creates a couple of beans which are used in a camel route. The camel route is obviously configured in the context section. One of the beans is actually an OSGi service (id camelParameterProvider) which means it's used by multiple service consumer bundles (In this case there are many eclipse views using it to get data). Unfortunately this means all service consumers share the same bean which has the same route! (I assume the same camel context?) This would be fine but I want to filter the incoming data using the parameterFilterer bean. The filtering part works fine except that all the views are sharing the same service provider bean so when one filters the route all the other consumers only receive the filtered messages too.
One way I explored to solve this was to use the bundle scope for the bean. Unfortunately the camel route references only a bean uri (the "to" part of the route) so no messages are routed. I guess camel has no way to know which instance of the bean to route to (and why would it). Is this a symptom of a bad design or is there a way around this. Perhaps creating a bean that provides the OGSi service AND is a routebuilder then trying to use that with bundle or prototype scope... P.S. I'm not sure if this is a Camel, Spring, or OSGi issue! :) I created a diagram here that may explain the overall view better: http://dl.dropbox.com/u/10007025/hbird/pictures/hummingbird%20gui%20parameter%20retrieval.png Spring file: <!-- Acts as a dynamic filter --> <bean id="parameterFilterer" class="org.hbird.rcpgui.camelparameterprovider.ParameterNameFilterer"> </bean> <!-- Create a camel parameter provider bean for use by the services-context.xml (Spring DM). --> <bean id="camelParameterProvider" class="org.hbird.rcpgui.camelparameterprovider.CamelParameterProvider" autowire="autodetect"> </bean> <!-- Create a jms endpoint for the route used by this provider --> <bean id="jms" class="org.apache.camel.component.jms.JmsComponent"> snip! </bean> <camelContext id="camelContextBean" xmlns="http://camel.apache.org/schema/spring"> <route id="fromJmsProcessedParametersOut" autoStartup="false"> <from uri="jms:topic:processedParametersOut" /> <camel:filter> <camel:method bean="parameterFilterer"></camel:method> <to uri="bean:camelParameterProvider?method=parameterIn" /> </camel:filter> </route> </camelContext>
