为了实现一个简单的 基于web的JMS 实例。
JBOSS+SPRING+JMS
在JBOSS的 jbossmq-destinations-service.xml 里加入了以下 绑定信息
[color=red][code="java"] <!-- Register User Send/Receive Queue -->
name="jboss.mq.destination:service=Queue,name=registerUserQueue">
jboss.mq:service=DestinationManager
<!-- Register User Send/Receive Topic -->
name="jboss.mq.destination:service=Topic,name=registerUserTopic">
jboss.mq:service=DestinationManager
[/code][/color]
spring的dispather-servlet.xml配置如下
[color=brown][quote][code="java"]
<bean id="jmsQueue" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="queue/registerUserQueue" />
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate102">
<property name="connectionFactory" ref="jmsConnectionFactory" />
<property name="defaultDestination" ref="jmsQueue" />
</bean>
<bean id="receiver" class="my.Receiver" />
<bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsConnectionFactory" />
<property name="destination" ref="jmsQueue" />
<property name="messageListener" ref="receiver" />
</bean>
<bean name="/sendMessage.jms" class="my.SendMessageController">
<property name="jmsTemplate" ref="jmsTemplate" />
</bean>[/code][/quote][/color]
结果在页面点击发送 后总是报错
[color=red][code="java"]org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmsTemplate' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (2) are:
PropertyAccessException 1: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [org.jboss.mq.SpyTopic] to required type [javax.jms.ConnectionFactory] for property 'connectionFactory'; nested exception is java.lang.IllegalArgumentException: No matching editors or conversion strategy found
PropertyAccessException 2: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [org.jboss.mq.SpyQueue] to required type [javax.jms.Destination] for property 'defaultDestination'; nested exception is java.lang.IllegalArgumentException: No matching editors or conversion strategy found
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:975)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:729)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:416)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)[/code][/color]
[color=violet][code="java"]org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (2) are:
PropertyAccessException 1: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [org.jboss.mq.SpyTopic] to required type [javax.jms.ConnectionFactory] for property 'connectionFactory'; nested exception is java.lang.IllegalArgumentException: No matching editors or conversion strategy found
PropertyAccessException 2: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [org.jboss.mq.SpyQueue] to required type [javax.jms.Destination] for property 'defaultDestination'; nested exception is java.lang.IllegalArgumentException: No matching editors or conversion strategy found
org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:97)[/code][/color]
谢谢,搞好久了,始终不知道 为什么。jmstemplate中的相关参数到底该写什么?
JBOSS 的绑定地址跟这怎么对应呢。
谢谢了~
[b]问题补充:[/b]
看到你的回答 清楚了那么一点 我改了下。
JBOSS 里面信息
jboss.jms
alias=QueueConnectionFactory
alias=TopicConnectionFactory
那我这里就应该用QueueConnectionFactory。点进去查看它的JNDI名为:
JndiName QueueConnectionFactory
destination 跟以前一样是queue/registerUserQueue
我在JBOSS 中看到的也是如此。
我现在的配置就是
<bean id="jmsQueue" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="queue/registerUserQueue" />
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsConnectionFactory" />
<property name="defaultDestination" ref="jmsQueue" />
</bean>
可是还是出跟以前一样的错。。
实在是不懂了~~
能不能再帮忙看下呢。谢谢了!~
[b]问题补充:[/b]
目前已解决,因为重复了jms.jar
汗个~~
已经给你回复了
配置有误此处需要ConnectionFactory不是Topic,记住Topic和Queue都是相当于目的地的,通过jboss的jmx-console找到jboss.jms项,你应该看到已有的ConnectionFactory,注意有类型区分的[img]E:\My Documents\My QQ Files\a.bmp[/img],然后将上面改成 具体的JNDI名通过你的jboss 查看http://localhost:8080/jmx-console/HtmlAdaptor