I am working on a abstraction library that would allow a bunch of our
web-apps to include that library and
publish and subscribe to JMS destinations (and do other magical things).
Publication works fine (at least on
the POC I have!) but I am having trouble wrapping my head around
subscriptions.

The following method should allow clients to dynamically register for events
from a JMS endpoint. My
current implementation looks like this:

<code>
public void addListener(Event event, Listener listener){
    try {
        camelContext.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from(event.from()).bean(listener);
            }
        });
    } catch (Exception exception) {
        exception.printStackTrace();
    }

}
</code>

event.from() above would identify the endpoint from which the message would
be consumed 
("activemq:topic:market.stocks.update.ibm") and listener would be an
implementation of a Listener 
interface.

I had envisaged a typical invocation as:

<code>
notifications.addListener(updateEvent, new Listener(){
    void listen(){
        System.out.println("Hey! Something got updated");
    }
});
</code>

In theory, I like this approach since this frees me from having to worry
about who is subscribed to which 
queue, on what selectors etc, and I can have Camel automagically route these
messages to the interested 
listeners. 

Except, of course, none of the above works since the camel route seems to
expect a concrete bean as the 
recipient and hence camel context fails to start-up. The actual error:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No matching bean of type
[com.example.Listener] found for dependency: expected at least 1 bean which
qualifies as autowire 
candidate for this dependency. Dependency annotations: {}

Am I shoe-horning Camel into something it was not supposed to do? Though,
the Event Message EIP seems 
to suggest this should work (except that the examples don't seem to address
the dynamic nature of the listeners)

http://camel.apache.org/event-message.html

Being a Camel newbie, there is another aspect of this which I don't
understand. This route even though 
part of a method seems to get started when the Camel context starts up. How
does the route get added 
when the method that is supposed to add it to the context has not been
invoked?

Thanks for your help and pointers.

--
View this message in context: 
http://camel.465427.n5.nabble.com/Observer-Pattern-using-Camel-tp4491726p4491726.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to