Spring mvc SpringWeb连接到嵌入JBossServer7.1.1的HornetQJMS
我试图通过以下站点设置SpringWeb以连接到远程Jboss-7.1.1 HornetqJMS。但我得到下面的错误,有什么我需要添加Springbean配置。当前的SpringWeb在tomcat上运行 spring-bean.xml 控制器类 Jboss在standalone.xml中的jms模块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
如果你更换了它,它应该能工作
<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>