1 Reply Latest reply: Oct 25, 2012 7:19 AM by Gazal KA RSS

Embedded hornetq using spring (Chapter 43)

Gazal KA Newbie

We have been trying to use an in-vm hornetq instance in our web applications. Migrating from 2.0.0.GA to 2.2.19.Final, the first blocking issue was https://community.jboss.org/message/767054.

Now I'm trying to follow Chapter 43 of the hornetq manual.

 

My spring configuration file for the embedded hornetq is as follows:

 

  <bean name="remoteConnector" class="java.util.ArrayList">
                    <constructor-arg>
                              <list>
                                        <value>remote-connector</value>
                              </list>
                    </constructor-arg>
          </bean>


          <bean id="nettyConnector" class="org.hornetq.api.core.TransportConfiguration">
                    <constructor-arg
                              value="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory" />
                    <constructor-arg>
                              <map key-type="java.lang.String" value-type="java.lang.Object">
                                        <entry key="host" value="${JMS_HOST}"></entry>
                                        <entry key="port" value="${JMS_CONNECTOR_PORT}"></entry>
                              </map>
                    </constructor-arg>
                    <constructor-arg value="remote-connector" />
          </bean>


          <bean name="fileConfiguration" class="org.hornetq.core.config.impl.FileConfiguration"
                    init-method="start" destroy-method="stop">
                    <property name="connectorConfigurations">
                              <map key-type="java.lang.String" value-type="org.hornetq.api.core.TransportConfiguration">
                                        <entry key="remote-connector" value-ref="nettyConnector" />
                              </map>
                    </property>
                    <property name="bridgeConfigurations" ref="bridgeConfigurations" />
          </bean>


          <bean id="bridgeConfigurations" class="java.util.ArrayList" />


          <bean id="embeddedJms" class="org.hornetq.integration.spring.SpringJmsBootstrap"
                    init-method="start">
                    <property name="configuration" ref="fileConfiguration" />
          </bean>

 

 

 

And in an application context I'm trying to use a 'ConnectionFactory' instance and the destination instance as follows:

 

        <bean id="inVmJmsWriter" class="com.mycompany.utils.jms.JmsWriter">
                    <constructor-arg ref="ConnectionFactory" />
                    <constructor-arg value="false" />
                    <constructor-arg value="#{T(javax.jms.Session).AUTO_ACKNOWLEDGE}" />
                    <constructor-arg ref="/queue/NotificationsQueue" />
                    <constructor-arg value="OBJECT" />
                    <qualifier value="inVmJmsWriter" />
          </bean>

 

 

On context startup I'm getting the following exception:

 


Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'inVmJmsWriter' defined in class path resource : Cannot resolve reference to bean 'ConnectionFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefini

tionException: No bean named 'ConnectionFactory' is defined

        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)

        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)

        at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:630)

        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:148)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1035)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:939)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)

        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)

        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)

        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)

        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)

        at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:876)

        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:818)

        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:735)

        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)

        ... 52 more

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'ConnectionFactory' is defined

        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:553)

        at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1095)

        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:277)

        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)

        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)

        ... 67 more

-


 

 

 

The manual seems to use beans named 'ConnectionFactory' and destinations with their names as defined in hornetq-jms.xml.

And it does say 'The Spring helper class starts the HornetQ server and adds any factories or destinations configured within hornetq-jms.xml directly into the namespace of the Spring context'.

 

So, any ideas what's wrong here?

  • 1. Re: Embedded hornetq using spring (Chapter 43)
    Gazal KA Newbie

    Ok, I think I've figured this out.

     

    First the entry name in my hornetq-jms.xml file was '/ConnectionFactory' (includes a slash character).

    Also the inclusion of depends-on attribute for the bean was necessary.

     

    So the bean declaration is as follows:

     

     

              <bean id="inVmJmsWriter" class="com.mycompany.utils.jms.JmsWriter" depends-on="embeddedJms">
                        <constructor-arg ref="/ConnectionFactory" />
                        <constructor-arg value="false" />
                        <constructor-arg value="#{T(javax.jms.Session).AUTO_ACKNOWLEDGE}" />
                        <constructor-arg ref="/queue/NotificationsQueue" />
                        <constructor-arg value="OBJECT" />
                        <qualifier value="inVmJmsWriter" />
              </bean>