Spring 使用Tomcat 7和嵌入式HornetQ进行JNDI访问

Spring 使用Tomcat 7和嵌入式HornetQ进行JNDI访问,spring,tomcat,jndi,hornetq,Spring,Tomcat,Jndi,Hornetq,我用Tomcat7.0和嵌入式HornetQJMS服务器建立了一个新项目。 我使用以下两个教程来帮助我: <!-- enable autowire --> <context:annotation-config /> <!-- enable transaction demarcation with annotations --> <tx:annotation-driven transaction-manager="transactionManager"

我用Tomcat7.0和嵌入式HornetQJMS服务器建立了一个新项目。 我使用以下两个教程来帮助我:

<!-- enable autowire -->
<context:annotation-config />

<!-- enable transaction demarcation with annotations -->
<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">
    <property name="driverClassName" value="com.informix.jdbc.IfxDriver" />
    <property name="url" value="${URL}" />
    <property name="username" value="${user}" />
    <property name="password" value="${password}" />

    <property name="maxActive" value="50" />
    <property name="maxIdle" value="10" />
    <property name="maxWait" value="1000" />
    <property name="removeAbandoned" value="true" />
    <property name="removeAbandonedTimeout" value="300" />
    <property name="logAbandoned" value="true" />
</bean>

<!-- HornetQ config -->
<bean name="namingServerImpl" class="org.jnp.server.NamingBeanImpl" init-method= "start" destroy-method="stop" >
<!-- configure HornetQ JNDI server not to use an existing JNDI service if available -->
    <property name="useGlobalService" value="false" />
</bean>

<bean name="namingServer" class="org.jnp.server.Main" init-method="start" destroy-method="stop">
    <property name="namingInfo" ref="namingServerImpl" />
    <property name="port" value="1099" />
    <property name="bindAddress" value="localhost" />
    <property name="rmiPort" value="1098" />
    <property name="rmiBindAddress" value="localhost" />
</bean>

<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 index="0" ref="fileConfiguration" />
    <constructor-arg index="1" ref="mbeanServer" />
    <constructor-arg index="2" ref="hornetQSecurityManagerImpl" />
</bean>

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

<!-- to use HornetQ messaging service through Spring we can either create a connection factory, or lookup one from JNDI -->
<bean name="connectionFactory" class="org.hornetq.jms.client.HornetQConnectionFactory">
    <constructor-arg index="0" type="boolean" value="false"/>
    <constructor-arg index="1">
        <bean class="org.hornetq.api.core.TransportConfiguration">
            <constructor-arg index="0" type="java.lang.String" value="org.hornetq.integration.transports.netty.NettyConnectorFactory" />
            <constructor-arg index="1">
                <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 id="notificationsQueue" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
 <property name="jndiName">
  <value>/queue/Notifications</value>
 </property>
</bean>

<bean id="inVMConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
 <property name="jndiName">
  <value>/ConnectionFactory</value>
 </property>
</bean> 
  • <!-- enable autowire -->
    <context:annotation-config />
    
    <!-- enable transaction demarcation with annotations -->
    <tx:annotation-driven transaction-manager="transactionManager" />
    
    <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">
        <property name="driverClassName" value="com.informix.jdbc.IfxDriver" />
        <property name="url" value="${URL}" />
        <property name="username" value="${user}" />
        <property name="password" value="${password}" />
    
        <property name="maxActive" value="50" />
        <property name="maxIdle" value="10" />
        <property name="maxWait" value="1000" />
        <property name="removeAbandoned" value="true" />
        <property name="removeAbandonedTimeout" value="300" />
        <property name="logAbandoned" value="true" />
    </bean>
    
    <!-- HornetQ config -->
    <bean name="namingServerImpl" class="org.jnp.server.NamingBeanImpl" init-method= "start" destroy-method="stop" >
    <!-- configure HornetQ JNDI server not to use an existing JNDI service if available -->
        <property name="useGlobalService" value="false" />
    </bean>
    
    <bean name="namingServer" class="org.jnp.server.Main" init-method="start" destroy-method="stop">
        <property name="namingInfo" ref="namingServerImpl" />
        <property name="port" value="1099" />
        <property name="bindAddress" value="localhost" />
        <property name="rmiPort" value="1098" />
        <property name="rmiBindAddress" value="localhost" />
    </bean>
    
    <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 index="0" ref="fileConfiguration" />
        <constructor-arg index="1" ref="mbeanServer" />
        <constructor-arg index="2" ref="hornetQSecurityManagerImpl" />
    </bean>
    
    <!-- The JMS server -->
    <bean name="jmsServerManagerImpl" class="org.hornetq.jms.server.impl.JMSServerManagerImpl"
        init-method="start" destroy-method="stop" depends-on="namingServer">
        <constructor-arg ref="hornetQServerImpl" />
    </bean>
    
    <!-- to use HornetQ messaging service through Spring we can either create a connection factory, or lookup one from JNDI -->
    <bean name="connectionFactory" class="org.hornetq.jms.client.HornetQConnectionFactory">
        <constructor-arg index="0" type="boolean" value="false"/>
        <constructor-arg index="1">
            <bean class="org.hornetq.api.core.TransportConfiguration">
                <constructor-arg index="0" type="java.lang.String" value="org.hornetq.integration.transports.netty.NettyConnectorFactory" />
                <constructor-arg index="1">
                    <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 id="notificationsQueue" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
     <property name="jndiName">
      <value>/queue/Notifications</value>
     </property>
    </bean>
    
    <bean id="inVMConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
     <property name="jndiName">
      <value>/ConnectionFactory</value>
     </property>
    </bean> 
    
  • <!-- enable autowire -->
    <context:annotation-config />
    
    <!-- enable transaction demarcation with annotations -->
    <tx:annotation-driven transaction-manager="transactionManager" />
    
    <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">
        <property name="driverClassName" value="com.informix.jdbc.IfxDriver" />
        <property name="url" value="${URL}" />
        <property name="username" value="${user}" />
        <property name="password" value="${password}" />
    
        <property name="maxActive" value="50" />
        <property name="maxIdle" value="10" />
        <property name="maxWait" value="1000" />
        <property name="removeAbandoned" value="true" />
        <property name="removeAbandonedTimeout" value="300" />
        <property name="logAbandoned" value="true" />
    </bean>
    
    <!-- HornetQ config -->
    <bean name="namingServerImpl" class="org.jnp.server.NamingBeanImpl" init-method= "start" destroy-method="stop" >
    <!-- configure HornetQ JNDI server not to use an existing JNDI service if available -->
        <property name="useGlobalService" value="false" />
    </bean>
    
    <bean name="namingServer" class="org.jnp.server.Main" init-method="start" destroy-method="stop">
        <property name="namingInfo" ref="namingServerImpl" />
        <property name="port" value="1099" />
        <property name="bindAddress" value="localhost" />
        <property name="rmiPort" value="1098" />
        <property name="rmiBindAddress" value="localhost" />
    </bean>
    
    <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 index="0" ref="fileConfiguration" />
        <constructor-arg index="1" ref="mbeanServer" />
        <constructor-arg index="2" ref="hornetQSecurityManagerImpl" />
    </bean>
    
    <!-- The JMS server -->
    <bean name="jmsServerManagerImpl" class="org.hornetq.jms.server.impl.JMSServerManagerImpl"
        init-method="start" destroy-method="stop" depends-on="namingServer">
        <constructor-arg ref="hornetQServerImpl" />
    </bean>
    
    <!-- to use HornetQ messaging service through Spring we can either create a connection factory, or lookup one from JNDI -->
    <bean name="connectionFactory" class="org.hornetq.jms.client.HornetQConnectionFactory">
        <constructor-arg index="0" type="boolean" value="false"/>
        <constructor-arg index="1">
            <bean class="org.hornetq.api.core.TransportConfiguration">
                <constructor-arg index="0" type="java.lang.String" value="org.hornetq.integration.transports.netty.NettyConnectorFactory" />
                <constructor-arg index="1">
                    <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 id="notificationsQueue" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
     <property name="jndiName">
      <value>/queue/Notifications</value>
     </property>
    </bean>
    
    <bean id="inVMConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
     <property name="jndiName">
      <value>/ConnectionFactory</value>
     </property>
    </bean> 
    
但是正如tutos中提到的,Tomcat JNDI存储库是只读的(找不到写入的方法),我配置了HornetQ使用的“分离”JNDI,消息传递可以工作,但Tomcat无法访问它

<!-- enable autowire -->
<context:annotation-config />

<!-- enable transaction demarcation with annotations -->
<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">
    <property name="driverClassName" value="com.informix.jdbc.IfxDriver" />
    <property name="url" value="${URL}" />
    <property name="username" value="${user}" />
    <property name="password" value="${password}" />

    <property name="maxActive" value="50" />
    <property name="maxIdle" value="10" />
    <property name="maxWait" value="1000" />
    <property name="removeAbandoned" value="true" />
    <property name="removeAbandonedTimeout" value="300" />
    <property name="logAbandoned" value="true" />
</bean>

<!-- HornetQ config -->
<bean name="namingServerImpl" class="org.jnp.server.NamingBeanImpl" init-method= "start" destroy-method="stop" >
<!-- configure HornetQ JNDI server not to use an existing JNDI service if available -->
    <property name="useGlobalService" value="false" />
</bean>

<bean name="namingServer" class="org.jnp.server.Main" init-method="start" destroy-method="stop">
    <property name="namingInfo" ref="namingServerImpl" />
    <property name="port" value="1099" />
    <property name="bindAddress" value="localhost" />
    <property name="rmiPort" value="1098" />
    <property name="rmiBindAddress" value="localhost" />
</bean>

<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 index="0" ref="fileConfiguration" />
    <constructor-arg index="1" ref="mbeanServer" />
    <constructor-arg index="2" ref="hornetQSecurityManagerImpl" />
</bean>

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

<!-- to use HornetQ messaging service through Spring we can either create a connection factory, or lookup one from JNDI -->
<bean name="connectionFactory" class="org.hornetq.jms.client.HornetQConnectionFactory">
    <constructor-arg index="0" type="boolean" value="false"/>
    <constructor-arg index="1">
        <bean class="org.hornetq.api.core.TransportConfiguration">
            <constructor-arg index="0" type="java.lang.String" value="org.hornetq.integration.transports.netty.NettyConnectorFactory" />
            <constructor-arg index="1">
                <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 id="notificationsQueue" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
 <property name="jndiName">
  <value>/queue/Notifications</value>
 </property>
</bean>

<bean id="inVMConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
 <property name="jndiName">
  <value>/ConnectionFactory</value>
 </property>
</bean> 
通常,在使用Tomcat的其他项目中,我将数据源定义为server.xml中的全局资源,并将其映射到context.xml中。这样做,数据源(JDBCURL、凭据等)的定义就在应用程序之外,可以由环境(dev、test、prod等)管理,但我找不到一种方法来使用其他JNDI进行管理

<!-- enable autowire -->
<context:annotation-config />

<!-- enable transaction demarcation with annotations -->
<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">
    <property name="driverClassName" value="com.informix.jdbc.IfxDriver" />
    <property name="url" value="${URL}" />
    <property name="username" value="${user}" />
    <property name="password" value="${password}" />

    <property name="maxActive" value="50" />
    <property name="maxIdle" value="10" />
    <property name="maxWait" value="1000" />
    <property name="removeAbandoned" value="true" />
    <property name="removeAbandonedTimeout" value="300" />
    <property name="logAbandoned" value="true" />
</bean>

<!-- HornetQ config -->
<bean name="namingServerImpl" class="org.jnp.server.NamingBeanImpl" init-method= "start" destroy-method="stop" >
<!-- configure HornetQ JNDI server not to use an existing JNDI service if available -->
    <property name="useGlobalService" value="false" />
</bean>

<bean name="namingServer" class="org.jnp.server.Main" init-method="start" destroy-method="stop">
    <property name="namingInfo" ref="namingServerImpl" />
    <property name="port" value="1099" />
    <property name="bindAddress" value="localhost" />
    <property name="rmiPort" value="1098" />
    <property name="rmiBindAddress" value="localhost" />
</bean>

<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 index="0" ref="fileConfiguration" />
    <constructor-arg index="1" ref="mbeanServer" />
    <constructor-arg index="2" ref="hornetQSecurityManagerImpl" />
</bean>

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

<!-- to use HornetQ messaging service through Spring we can either create a connection factory, or lookup one from JNDI -->
<bean name="connectionFactory" class="org.hornetq.jms.client.HornetQConnectionFactory">
    <constructor-arg index="0" type="boolean" value="false"/>
    <constructor-arg index="1">
        <bean class="org.hornetq.api.core.TransportConfiguration">
            <constructor-arg index="0" type="java.lang.String" value="org.hornetq.integration.transports.netty.NettyConnectorFactory" />
            <constructor-arg index="1">
                <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 id="notificationsQueue" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
 <property name="jndiName">
  <value>/queue/Notifications</value>
 </property>
</bean>

<bean id="inVMConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
 <property name="jndiName">
  <value>/ConnectionFactory</value>
 </property>
</bean> 
目前,数据源是在我的应用程序中定义的,带有参数的外部属性文件,但我对这个解决方案并不满意

<!-- enable autowire -->
<context:annotation-config />

<!-- enable transaction demarcation with annotations -->
<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">
    <property name="driverClassName" value="com.informix.jdbc.IfxDriver" />
    <property name="url" value="${URL}" />
    <property name="username" value="${user}" />
    <property name="password" value="${password}" />

    <property name="maxActive" value="50" />
    <property name="maxIdle" value="10" />
    <property name="maxWait" value="1000" />
    <property name="removeAbandoned" value="true" />
    <property name="removeAbandonedTimeout" value="300" />
    <property name="logAbandoned" value="true" />
</bean>

<!-- HornetQ config -->
<bean name="namingServerImpl" class="org.jnp.server.NamingBeanImpl" init-method= "start" destroy-method="stop" >
<!-- configure HornetQ JNDI server not to use an existing JNDI service if available -->
    <property name="useGlobalService" value="false" />
</bean>

<bean name="namingServer" class="org.jnp.server.Main" init-method="start" destroy-method="stop">
    <property name="namingInfo" ref="namingServerImpl" />
    <property name="port" value="1099" />
    <property name="bindAddress" value="localhost" />
    <property name="rmiPort" value="1098" />
    <property name="rmiBindAddress" value="localhost" />
</bean>

<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 index="0" ref="fileConfiguration" />
    <constructor-arg index="1" ref="mbeanServer" />
    <constructor-arg index="2" ref="hornetQSecurityManagerImpl" />
</bean>

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

<!-- to use HornetQ messaging service through Spring we can either create a connection factory, or lookup one from JNDI -->
<bean name="connectionFactory" class="org.hornetq.jms.client.HornetQConnectionFactory">
    <constructor-arg index="0" type="boolean" value="false"/>
    <constructor-arg index="1">
        <bean class="org.hornetq.api.core.TransportConfiguration">
            <constructor-arg index="0" type="java.lang.String" value="org.hornetq.integration.transports.netty.NettyConnectorFactory" />
            <constructor-arg index="1">
                <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 id="notificationsQueue" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
 <property name="jndiName">
  <value>/queue/Notifications</value>
 </property>
</bean>

<bean id="inVMConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
 <property name="jndiName">
  <value>/ConnectionFactory</value>
 </property>
</bean> 
以下是我的Spring配置:

<!-- enable autowire -->
<context:annotation-config />

<!-- enable transaction demarcation with annotations -->
<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">
    <property name="driverClassName" value="com.informix.jdbc.IfxDriver" />
    <property name="url" value="${URL}" />
    <property name="username" value="${user}" />
    <property name="password" value="${password}" />

    <property name="maxActive" value="50" />
    <property name="maxIdle" value="10" />
    <property name="maxWait" value="1000" />
    <property name="removeAbandoned" value="true" />
    <property name="removeAbandonedTimeout" value="300" />
    <property name="logAbandoned" value="true" />
</bean>

<!-- HornetQ config -->
<bean name="namingServerImpl" class="org.jnp.server.NamingBeanImpl" init-method= "start" destroy-method="stop" >
<!-- configure HornetQ JNDI server not to use an existing JNDI service if available -->
    <property name="useGlobalService" value="false" />
</bean>

<bean name="namingServer" class="org.jnp.server.Main" init-method="start" destroy-method="stop">
    <property name="namingInfo" ref="namingServerImpl" />
    <property name="port" value="1099" />
    <property name="bindAddress" value="localhost" />
    <property name="rmiPort" value="1098" />
    <property name="rmiBindAddress" value="localhost" />
</bean>

<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 index="0" ref="fileConfiguration" />
    <constructor-arg index="1" ref="mbeanServer" />
    <constructor-arg index="2" ref="hornetQSecurityManagerImpl" />
</bean>

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

<!-- to use HornetQ messaging service through Spring we can either create a connection factory, or lookup one from JNDI -->
<bean name="connectionFactory" class="org.hornetq.jms.client.HornetQConnectionFactory">
    <constructor-arg index="0" type="boolean" value="false"/>
    <constructor-arg index="1">
        <bean class="org.hornetq.api.core.TransportConfiguration">
            <constructor-arg index="0" type="java.lang.String" value="org.hornetq.integration.transports.netty.NettyConnectorFactory" />
            <constructor-arg index="1">
                <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 id="notificationsQueue" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
 <property name="jndiName">
  <value>/queue/Notifications</value>
 </property>
</bean>

<bean id="inVMConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
 <property name="jndiName">
  <value>/ConnectionFactory</value>
 </property>
</bean> 

/队列/通知
/连接工厂
如何更好地管理它,我的意思是,像往常一样在服务器端定义数据源?是否有配置告诉Tomcat使用我定义的外部JNDI或创建读/写repo

<!-- enable autowire -->
<context:annotation-config />

<!-- enable transaction demarcation with annotations -->
<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">
    <property name="driverClassName" value="com.informix.jdbc.IfxDriver" />
    <property name="url" value="${URL}" />
    <property name="username" value="${user}" />
    <property name="password" value="${password}" />

    <property name="maxActive" value="50" />
    <property name="maxIdle" value="10" />
    <property name="maxWait" value="1000" />
    <property name="removeAbandoned" value="true" />
    <property name="removeAbandonedTimeout" value="300" />
    <property name="logAbandoned" value="true" />
</bean>

<!-- HornetQ config -->
<bean name="namingServerImpl" class="org.jnp.server.NamingBeanImpl" init-method= "start" destroy-method="stop" >
<!-- configure HornetQ JNDI server not to use an existing JNDI service if available -->
    <property name="useGlobalService" value="false" />
</bean>

<bean name="namingServer" class="org.jnp.server.Main" init-method="start" destroy-method="stop">
    <property name="namingInfo" ref="namingServerImpl" />
    <property name="port" value="1099" />
    <property name="bindAddress" value="localhost" />
    <property name="rmiPort" value="1098" />
    <property name="rmiBindAddress" value="localhost" />
</bean>

<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 index="0" ref="fileConfiguration" />
    <constructor-arg index="1" ref="mbeanServer" />
    <constructor-arg index="2" ref="hornetQSecurityManagerImpl" />
</bean>

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

<!-- to use HornetQ messaging service through Spring we can either create a connection factory, or lookup one from JNDI -->
<bean name="connectionFactory" class="org.hornetq.jms.client.HornetQConnectionFactory">
    <constructor-arg index="0" type="boolean" value="false"/>
    <constructor-arg index="1">
        <bean class="org.hornetq.api.core.TransportConfiguration">
            <constructor-arg index="0" type="java.lang.String" value="org.hornetq.integration.transports.netty.NettyConnectorFactory" />
            <constructor-arg index="1">
                <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 id="notificationsQueue" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
 <property name="jndiName">
  <value>/queue/Notifications</value>
 </property>
</bean>

<bean id="inVMConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" depends-on="jmsServerManagerImpl">
 <property name="jndiName">
  <value>/ConnectionFactory</value>
 </property>
</bean>