Saturday, April 13, 2013

No unique bean of type [javax.jms.Queue] is defined

Here is a strange error I ran into, and a even more strange solution in the end.

I created a simple web service that publishes JMS messages to a queue. I used the simple annotations like:

    @Resource(mappedName="foo.jmsprovider.XAConnectionFactory")
    private ConnectionFactory connectionFactory;
    @Resource(mappedName="foo.jms.bar.queue")
    private javax.jms.Queue queue;

when I deployed the project to Weblogic, I got exceptions like:

"Dependency injection failure: can't find the bean definition about class interface javax.jms.Queue; nested exception is com.bea.core.repackaged.springframework.beans.factory.NoSuchBeanDefinitionException:
No unique bean of type [javax.jms.Queue] is defined: No beans of type javax.jms.Queue;"

The error description indicates the 2nd resource has problem. I finessed with various forms of the annotation, and simply couldn't get around it.

At one point, I managed to work around the issue by removing the annotated resource, and hard code the queue like:
               InitialContext ctx = new InitialContext();    
               javax.jms.Queue queue = (Queue) ctx.lookup("foo.jms.bar.queue");

however, I don't like the hard coded work-around. Frustrated, I rebooted Weblogic server. To my surprise, that took care of the problem!

I have no explaination why rebooting would fix the problem. Nor do I know if this may help the same problem for other people.

The moral of the story is - do not always trust those silly error messages. They can lead you to a wild chase. In the end, a mere magic reboot would take care of the problem.

No comments:

Post a Comment