gpt4 book ai didi

java - JNDI on JMS 与 Spring 和 Webspehre MQ 的集成

转载 作者:行者123 更新时间:2023-11-30 08:51:14 24 4
gpt4 key购买 nike

我在 Spring 中编写了一个 WS 应用程序,它支持将消息创建到 JMS 队列中。 我使用带有 ActiveMQ 的 Apache Tomcat 开发了它。这里一切正常,我有我的 JNDI 资源可以派生连接工厂并将消息发送到队列中:

<jee:jndi-lookup id="jndiJmsQueueConnectionFactory"
jndi-name="${jms.factory.jndiName}" proxy-interface="javax.jms.ConnectionFactory"
lookup-on-startup="false">
</jee:jndi-lookup>

<jee:jndi-lookup id="jndiSendQueue" jndi-name="${jms.myQueue.jndiName}"
proxy-interface="javax.jms.Queue" lookup-on-startup="false"></jee:jndi-lookup>

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref ="jmsQueueConnectionFactory"></property>
<property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE"/>

</bean>

现在我们尝试将 Web 应用程序移动到 Websphere。 JNDI 查找有效,应用程序可以创建工厂,找到队列,但是当我的代码尝试通过 createProducer() 创建生产者时,代码抛出此异常:

java.lang.ClassCastException: com.sun.proxy.$Proxy28 cannot be cast to com.ibm.mq.jms.MQDestination

我尝试用“javax.jms.Destination”替换“javax.jms.Queue”但没有成功。

当我删除代理接口(interface)时它正在工作,但我需要在启动上下文时不获取该队列。

最佳答案

当使用 Spring 时,它将查找的 Destination 包装在 Spring 动态代理中。 WebSphere MQ JMS 提供程序需要其 Destination 的实现,但它没有收到,因此出现异常。您或许可以绕过在查找到的目标上调用 toString,然后使用 Session 对象上的结果调用 createDestination。

关于java - JNDI on JMS 与 Spring 和 Webspehre MQ 的集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30657136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com