Встраивание HornetQ в весну - PullRequest
       10

Встраивание HornetQ в весну

3 голосов
/ 29 декабря 2010

Я пытаюсь оценить HornetQ и возможность встраивания его в весеннее приложение. Чтобы начать с простой настройки, я просто пытаюсь инициализировать ее следующим образом. Я не нашел много документации о том, как это сделать, кроме того, что «ты можешь».

Я использую Spring 3 и HornetQ 2.1.1GA

Моя конфигурация Spring выглядит следующим образом, однако, если бы была более простая, более чистая конфигурация, она была бы лучше. Сначала я хочу минималистичный подход, а затем основываюсь на нем.

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


<bean name="mbeanServer" class="java.lang.management.ManagementFactory" factory-method="getPlatformMBeanServer" />

<bean name="fileConfiguration" class="org.hornetq.core.config.impl.FileConfiguration" init-method="start" destroy-method="stop" />

<bean name="hornetQSecurityManagerImpl" class="org.hornetq.spi.core.security.HornetQSecurityManagerImpl" />

<!-- The core server -->
<bean name="hornetQServerImpl" class="org.hornetq.core.server.impl.HornetQServerImpl">
 <constructor-arg ref="fileConfiguration" />
 <constructor-arg ref="mbeanServer" />
 <constructor-arg ref="hornetQSecurityManagerImpl" />
</bean>

<!-- The JMS server -->
<bean name="jmsServerManagerImpl" class="org.hornetq.jms.server.impl.JMSServerManagerImpl" init-method="start" destroy-method="stop" >
 <constructor-arg ref="hornetQServerImpl" />
</bean>

    <bean name="connectionFactory" class="org.hornetq.jms.client.HornetQConnectionFactory" >
 <constructor-arg>
  <bean class="org.hornetq.api.core.TransportConfiguration">
   <constructor-arg value="org.hornetq.integration.transports.netty.NettyConnectorFactory" />
   <constructor-arg>
    <map key-type="java.lang.String" value-type="java.lang.Object">
     <entry key="port" value="5445"></entry>
    </map>
   </constructor-arg>
  </bean>
 </constructor-arg>
</bean>

<bean name="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
 <property name="connectionFactory" ref="connectionFactory"></property>
</bean>

</beans>

С этим конфигом я получаю ошибку:

SEVERE: Unable to deploy node [queue: null] DLQ
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
 at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
 at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
...
29-Dec-2010 18:16:34 org.hornetq.core.logging.impl.JULLogDelegate error
SEVERE: Unable to deploy node [queue: null] ExpiryQueue
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
 at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
...
9-Dec-2010 18:16:34 org.hornetq.core.logging.impl.JULLogDelegate error
SEVERE: Unable to deploy node [queue: null] ExampleQueue
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
 at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
 at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
 at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)

Это должно быть что-то очевидное, связанное с JNDI, но я был бы признателен за правильную минималистическую конфигурацию, чтобы начать с нее, а затем расширить ее позже. Файлы конфигурации HornetQ - это файлы по умолчанию, которые поставляются вместе с дистрибутивом (очереди по умолчанию, пользователи по умолчанию и т. Д.)

1 Ответ

2 голосов
/ 18 января 2011

Вам необходимо определить очереди JMS, которые вы хотите добавить на сервер, и указать пустой список привязок JNDI для каждой очереди.Для этого добавьте JMSConfigurationImpl в определение вашего бина JMSServerManagerImpl.Например, если вам нужно определить очередь с именем «testqueue»:

  <bean id="hornetQJmsConfig" class="org.hornetq.jms.server.config.impl.JMSConfigurationImpl">
    <constructor-arg index="0">
      <list/>
    </constructor-arg>
    <!-- Queue configurations -->
    <constructor-arg index="1">
      <list>
        <bean class="org.hornetq.jms.server.config.impl.JMSQueueConfigurationImpl">
          <!-- Name -->
          <constructor-arg index="0" value="testqueue"/>
          <!-- Selector -->
          <constructor-arg index="1"><null/></constructor-arg>
          <!-- Durable queue -->
          <constructor-arg index="2" value="true"/>
          <!-- JNDI bindings, empty list for none -->
          <constructor-arg index="3"><list/></constructor-arg>
        </bean>
      </list>
    </constructor-arg>
    <!-- Topic configurations -->
    <constructor-arg index="2">
      <list/>
    </constructor-arg>
  </bean>

Поскольку второй и третий аргументы конструктора принимают список конфигураций очереди и темы, вы можете добавить столько очередей и тем, сколько вамлайк.Для более чем одного или двух, вероятно, лучше всего создать объект шаблона Spring.

...