spring DefaultMessageListenerContainer和websphere MQ - 无法连接队列管理器

时间:2013-10-11 17:33:15

标签: ibm-mq spring-ws spring-jms

这是我第一次在stackoverflow上发布问题。我尝试了尽可能多的格式化代码/问题,并尽可能地清楚我能做到的。道歉并解释是否有任何错误。在我的下一个问题中记录下来。

我是新手,尝试通过使用websphereMq和spring JMS功能的jms实现服务。 我确定了下面的事情

    生成的
  • 绑定文件没有遇到任何错误
  • 队列管理器和队列的状态已启动并正在运行。

尝试将消息放入websphereMQ

时遇到以下错误
  • com.ibm.mq.MQException:JMSCMQ0001:WebSphere MQ调用失败,compcode为'2'('MQCC_FAILED')原因'2058'('MQRC_Q_MGR_NAME_ERROR')

我已经做过关于这个错误的功课。由于队列管理器不可用而可能发生此错误,但我看到QM已启动并正在运行。我在哪里做错了?如何解决此错误以使用spring functionlity将消息成功发送到webspherMQ?

TestClass

public class JmsTransportWebServiceIntegrationTest {

 private static final String expectedResponseContent =  "<tns:placeOrderResponse xmlns:tns=\"http://www.packtpub.com/liverestaurant/OrderService/schema\"><tns:refNumber>order-xxxx_yyyy_1234</tns:refNumber></tns:placeOrderResponse>";

@Autowired
private WebServiceTemplate webServiceTemplate;


public void setWebServiceTemplate(WebServiceTemplate webServiceTemplate) {
    this.webServiceTemplate = webServiceTemplate;
}

@Test
public void testSendReceive() throws Exception {
    InputStream is = new JmsTransportWebServiceIntegrationTest().getClass().getResourceAsStream("placeOrderRequest.xml");
    StreamSource source = new StreamSource(is);
    StringResult result = new StringResult();
    webServiceTemplate.sendSourceAndReceiveToResult(source, result);
    XMLAssert.assertXMLEqual("Invalid content received", expectedResponseContent, result.toString());
}  }

的applicationContext.xml

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
 <property name="environment">
   <map>
     <entry key="java.naming.factory.initial" 
            value="com.sun.jndi.fscontext.RefFSContextFactory"/>     
          <entry key="java.naming.provider.url"  value="file:C:/JNDI-Directory" />
   </map>
 </property>
</bean>
<bean id="ibm-mq-jms-qcf" class= "org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate">
        <ref bean="jndiTemplate"/>
    </property>
    <property name="jndiName">
        <value>jms/mdpSampleQCF</value>
    </property>
</bean>

<!-- Bean for JMS Destination -->
<bean id="ibm-mq-queue" class= "org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate">
        <ref bean="jndiTemplate"/>
    </property>
    <property name="jndiName">
        <value>jms/mdpSampleQueue</value>
    </property>
</bean>
<bean id="listenerContainer" 
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="concurrentConsumers" value="1" />
    <property name="connectionFactory" ref="ibm-mq-jms-qcf" />
    <property name="destination" ref="ibm-mq-queue" />
    <property name="messageListener">
        <bean class="org.springframework.ws.transport.jms.WebServiceMessageListener">
            <property name="messageFactory" ref="messageFactory"/>
            <property name="messageReceiver" ref="messageDispatcher"/>
        </bean>
    </property>
</bean>
<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"/>

<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
    <constructor-arg ref="messageFactory"/>
    <property name="messageSender">
        <bean class="org.springframework.ws.transport.jms.JmsMessageSender">
            <property name="connectionFactory" ref="ibm-mq-jms-qcf"/>
        </bean>
    </property>
    <property name="defaultUri" value="jms:mdpSampleQueue?deliveryMode=NON_PERSISTENT"/>
</bean>

<bean id="messageDispatcher" class="org.springframework.ws.soap.server.SoapMessageDispatcher">
    <property name="endpointMappings">
        <bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
            <property name="defaultEndpoint">
                <bean class="com.packtpub.liverestaurant.service.endpoint.SimplePayloadEndpoint">
                <property name="orderService">
                 <bean class="com.packtpub.liverestaurant.service.OrderServiceImpl"/>
                </property>
                </bean>
            </property>
        </bean>
    </property>
</bean

1 个答案:

答案 0 :(得分:0)

我知道这是一个很老的问题,但也许我的回答将来会帮助某人。

我现在正在使用WebSphere MQ 7.5,在安装中也有一些Java类。在我MQIVP.java的安装中,一个对我有很大帮助的人称为c:\Program Files (x86)\IBM\WebSphere MQ\tools\wmqjava\samples。非常适合首先测试此类的设置。从该类的来源我们可以发现2058代表:

  

原因:2058 - 队列管理员名称无效或未知。

     

操作:修改队列管理器名称并重试。   只需在队列管理器名称提示符处输入enter即可   连接到默认队列管理器。