2010-12-29 3 views
3

J'essaye d'évaluer HornetQ et la possibilité de l'incorporer dans une application de ressort. Pour commencer avec une configuration simple, j'essaie juste de l'initialiser comme suit. Je n'ai pas trouvé beaucoup de documentation sur la façon de le faire, à part le fait que «tu peux».Enrobage HornetQ au printemps

J'utilise Spring 3 et HornetQ 2.1.1GA

Ma configuration Spring ressemble à ceci, mais s'il y a une configuration plus propre plus simple, il serait mieux. Je veux l'approche d'abord, puis minimalistes construire là-dessus .:

<?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> 

Avec cette config je reçois l'erreur:

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) 

Son doit être quelque chose évidente liée à JNDI, mais je vous serais reconnaissant la configuration minimaliste appropriée pour commencer et ensuite développer ensuite. Les fichiers de configuration HornetQ sont ceux par défaut fournis avec la distribution (files d'attente par défaut, utilisateurs par défaut, etc.)

Répondre

2

Vous devez définir les files d'attente JMS que vous souhaitez ajouter au serveur et spécifier une liste vide de liaisons JNDI pour chaque file d'attente. Pour ce faire, ajoutez un JMSConfigurationImpl à votre définition de bean JMSServerManagerImpl. Par exemple, si vous devez définir une file d'attente appelée « 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> 

Depuis les deuxième et troisième args constructeur prennent une liste de file d'attente et des configurations sujet, vous pouvez ajouter autant de files d'attente et des sujets que vous le souhaitez. Pour plus d'un ou deux, il est probablement préférable de créer un objet modèle Spring.