Spring mvc SpringWeb连接到嵌入JBossServer7.1.1的HornetQJMS

Spring mvc SpringWeb连接到嵌入JBossServer7.1.1的HornetQJMS,spring-mvc,jms,jboss7.x,hornetq,spring-jms,Spring Mvc,Jms,Jboss7.x,Hornetq,Spring Jms,我试图通过以下站点设置SpringWeb以连接到远程Jboss-7.1.1 HornetqJMS。但我得到下面的错误,有什么我需要添加Springbean配置。当前的SpringWeb在tomcat上运行 spring-bean.xml 控制器类 Jboss在standalone.xml中的jms模块 如果你更换了它,它应该能工作 <bean name="hornetConnectionFactory" class="org.hornetq.jms.client.HornetQJMSCon

我试图通过以下站点设置SpringWeb以连接到远程Jboss-7.1.1 HornetqJMS。但我得到下面的错误,有什么我需要添加Springbean配置。当前的SpringWeb在tomcat上运行

spring-bean.xml 控制器类 Jboss在standalone.xml中的jms模块
如果你更换了它,它应该能工作

<bean name="hornetConnectionFactory" class="org.hornetq.jms.client.HornetQJMSConnectionFactory">
    <constructor-arg name="ha" value="false"></constructor-arg>
    <constructor-arg>
        <bean name="transportConfiguration" 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="127.0.0.1" />
                    <entry key="port" value="5445" />
                </map>
            </constructor-arg>
        </bean>
    </constructor-arg>
</bean>

<!-- ConnectionFactory Definition -->
<bean id="connectionFactory"
    class="org.springframework.jms.connection.CachingConnectionFactory">
    <constructor-arg ref="hornetConnectionFactory"/>
</bean>

<!-- Definition of the JMS queue -->
<bean id="defaultDestination" class="org.hornetq.jms.client.HornetQQueue">
    <constructor-arg index="0" value="DemoQueue"></constructor-arg>
</bean>


这样做,pom中也不需要hornetq依赖项,因为使用JNDI查找是实现无关的(这是一件好事)。您参考的说明是关于连接到独立的hornetq服务器的,在这种情况下,您将需要这些实现。但是,连接到嵌入式系统不需要它们

当然,假设您的spring应用程序部署在具有嵌入式HornetQ的JBoss中


更新:好的,所以您添加了从Tomcat到JBoss实例的连接。在这种情况下,我只看到两件事不对:

<hornetq.version>2.2.18.Final</hornetq.version>
2.2.18.Final
这是错误的,因为它与JBoss 7.1.1附带的版本不匹配,并解释了您的拓扑错误。应该是:

<hornetq.version>2.2.13.Final</hornetq.version>
2.2.13.Final
此外,当这一问题得到解决时,您会收到一个安全错误,因为您没有禁用安全性,但也没有向JMS连接提供任何用户凭据。尝试将此添加到JBoss HornetQ配置中:

<subsystem xmlns="urn:jboss:domain:messaging:1.1">
    <hornetq-server>
        <security-enabled>false</security-enabled> <!-- <- this part -->

假的
如果您不想使用,请禁用安全性

我还测试了它,包含github中的示例代码


更新2:为了能够使用JMS安全性,请替换此

<!-- ConnectionFactory Definition -->
<bean id="connectionFactory"
    class="org.springframework.jms.connection.CachingConnectionFactory">
    <constructor-arg ref="hornetConnectionFactory"/>
</bean>

用这个

<!-- ConnectionFactory Definitions -->
<bean id="userCredsConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
   <property name="targetConnectionFactory"><ref bean="hornetConnectionFactory"/></property>
   <property name="username"><value>jmsuser</value></property>
   <property name="password"><value>hornetq</value></property>
   <!-- use credentials of some user you have added in 'jmsrole' group as application
        user in jboss in the above config -->
</bean>

<bean id="connectionFactory"
    class="org.springframework.jms.connection.CachingConnectionFactory">
    <constructor-arg ref="userCredsConnectionFactory"/>
</bean>

杰姆苏瑟
大黄蜂

JBOSS和嵌入式HornetQ是另一台服务器,SpringWeb在Tomcat服务器上运行。所以我认为我需要实现连接到嵌入式HornetQ。@user1595858好的,这是非常重要的信息。请在你的问题中加上这个。我看不到您绑定到java:jboss/exported/jms/RemoteConnectionFactory-我会通过外部JNDI使用它。@user1595858现已更新。看来你没有什么错,看看我的答案。太好了!但是我们不能绕过安全性,在SpringWeb中有没有什么地方可以提供凭证而不禁用jboss中的安全性?@user1595858现在再次更新了安全配置示例。请注意,所提供凭据的应用程序用户必须添加到jboss配置中的“jmsrole”组中。
<bean name="hornetConnectionFactory" class="org.hornetq.jms.client.HornetQJMSConnectionFactory">
    <constructor-arg name="ha" value="false"></constructor-arg>
    <constructor-arg>
        <bean name="transportConfiguration" 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="127.0.0.1" />
                    <entry key="port" value="5445" />
                </map>
            </constructor-arg>
        </bean>
    </constructor-arg>
</bean>

<!-- ConnectionFactory Definition -->
<bean id="connectionFactory"
    class="org.springframework.jms.connection.CachingConnectionFactory">
    <constructor-arg ref="hornetConnectionFactory"/>
</bean>

<!-- Definition of the JMS queue -->
<bean id="defaultDestination" class="org.hornetq.jms.client.HornetQQueue">
    <constructor-arg index="0" value="DemoQueue"></constructor-arg>
</bean>
<jee:jndi-lookup id="connectionFactory" jndi-name="java:/JmsXA"/>
<jee:jndi-lookup id="defaultDestination" jndi-name="java:/queue/DemoQueue"/>
<hornetq.version>2.2.18.Final</hornetq.version>
<hornetq.version>2.2.13.Final</hornetq.version>
<subsystem xmlns="urn:jboss:domain:messaging:1.1">
    <hornetq-server>
        <security-enabled>false</security-enabled> <!-- <- this part -->
<!-- ConnectionFactory Definition -->
<bean id="connectionFactory"
    class="org.springframework.jms.connection.CachingConnectionFactory">
    <constructor-arg ref="hornetConnectionFactory"/>
</bean>
<!-- ConnectionFactory Definitions -->
<bean id="userCredsConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
   <property name="targetConnectionFactory"><ref bean="hornetConnectionFactory"/></property>
   <property name="username"><value>jmsuser</value></property>
   <property name="password"><value>hornetq</value></property>
   <!-- use credentials of some user you have added in 'jmsrole' group as application
        user in jboss in the above config -->
</bean>

<bean id="connectionFactory"
    class="org.springframework.jms.connection.CachingConnectionFactory">
    <constructor-arg ref="userCredsConnectionFactory"/>
</bean>