2016-07-26 32 views
-1

zu senden, verwende ich Spring jms, um eine Verbindung mit Websphere MQ herzustellen. Ich versuche, mich durch localhost zu verbinden, nicht jndi Info gerade verwendend.Die Vergleichsmethode verletzt ihren allgemeinen Vertrag! Beim Versuch, eine Nachricht an die Websphere mq

Connection names (all as an example): hostname: <Websphere ip address> http://localhost:9043 
given hostname 12.123.0.12 

In Resources->JMS->Queue connection Factories 
name: MQDemo 
JNDI name: MQDemo 

2 Queues: 
name: MQ.T11.UPDATE.REQUEST 
JNDI name: jms/MQ.T11.UPDATE.REQUEST 

name: MQ.T11.INQUIRY.REPLY 
JNDI name: jms/MQ.T11.UPDATE.REQUEST 

DemoMain.java

Im Hauptverfahren:

ApplicationContext ctx = new ClassPathXmlApplicationContext("app-context.xml"); 
    // get bean from context 
    JmsMessageSender jmsMessageSender = (JmsMessageSender)ctx.getBean("jmsMessageSender"); 
    // send to default destination 
     jmsMessageSender.send(); 

JMSMessageSender.java

package name: com.java.geek 

@Autowired 
    private JmsTemplate jmsTemplate; 


    /** 
    * send text to default destination 
    * @param text 
    */ 
    @Cacheable("message") 
    public void send() { 
     System.out.println("in send"); 
     jmsTemplate.send(new MessageCreator() { 
     @Override 
     public Message createMessage(Session session)throws JMSException { 

      System.out.println("in create message"); 
     Message message = (Message) session.createTextMessage("Hello JMS"); 
     return message; 
     } 
     }); 

    } 

    public JmsTemplate getJmsTemplate() 
    { 
     return jmsTemplate; 
    } 

    public void setJmsTemplate(JmsTemplate jmsTemplate) 
    { 
     this.jmsTemplate = jmsTemplate; 
    } 

app-context.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd"> 


    <context:component-scan base-package="com.java.geek" /> 
<bean id="amqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory"> 
    <property name="hostName"> 
     <value>http://localhost:9043</value> 
    </property> 
    <property name="port"> 
     <value>1415</value> 
    </property> 
    <property name="queueManager"> 
     <value>MQDemo</value> 
    </property> 
    <property name="transportType"> 
     <value>1</value> 
    </property> 
</bean> 

    <!-- Pooled Spring connection factory --> 
    <bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true"> 
     <property name="MQDemo" value="java:comp/env/jms/MQDemo" /> 
     <property name="lookupOnStartup" value="false"/> 
      <property name="cache" value="true" /> 
      <property name="proxyInterface" value="javax.jms.QueueConnectionFactory"/> 
     <constructor-arg ref="amqConnectionFactory" /> 
    </bean> 


    <!-- JmsTemplate Definition --> 
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
     <property name="connectionFactory"><ref bean="amqConnectionFactory" /> </property> 
     <property name="pubSubDomain"><value>false</value></property> 
     <!-- <property name="defaultDestination"><ref bean="senderQueue" /></property> --> 
    </bean> 

    <!-- ======================================================= --> 
    <!-- JMS Send, define default destination and JmsTemplate --> 
    <!-- ======================================================= --> 

    <!-- Default Destination Queue Definition --> 
    <bean id="senderQueue" class="com.ibm.mq.jms.MQQueue"> 
     <constructor-arg value="MQ.T11.UPDATE.REQUEST"/> 
    </bean> 
    <bean id="jmsMessageSender" class="com.java.geek.JmsMessageSender"> 
     <property name="jmsTemplate"><ref bean="JmsTemplate"/></property>  
    </bean> 

</beans> 

Ich erhalte eine Fehlermeldung,

Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract! 
    at java.util.TimSort.mergeLo(TimSort.java:758) 
    at java.util.TimSort.mergeAt(TimSort.java:494) 
    at java.util.TimSort.mergeCollapse(TimSort.java:421) 
    at java.util.TimSort.sort(TimSort.java:225) 
    at java.util.TimSort.sort(TimSort.java:184) 
    at java.util.Arrays.sort(Arrays.java:670) 
    at com.ibm.mq.constants.MQConstants.getFields(MQConstants.java:277) 
    at com.ibm.mq.constants.MQConstants.lookup(MQConstants.java:204) 
    at com.ibm.mq.constants.MQConstants.lookup(MQConstants.java:264) 
    at com.ibm.mq.constants.MQConstants.lookup(MQConstants.java:254) 
    at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1862) 
    at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1144) 
    at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:337) 
    at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:6772) 
    at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:6151) 
    at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:280) 
    at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6138) 
    at com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection(MQQueueConnectionFactory.java:115) 
    at com.ibm.mq.jms.MQQueueConnectionFactory.createConnection(MQQueueConnectionFactory.java:198) 
    at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:185) 
    at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:481) 
    at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:566) 
    at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:557) 
    at com.java.geek.JmsMessageSender.send(JmsMessageSender.java:34) 
    at com.java.geek.DemoMain.main(DemoMain.java:20) 

, die auf der Leitung kommt

jmsTemplate.send(new MessageCreator() { 

Ich bin nicht in der Lage zu Websphere MQ zu verbinden. Bitte geben Sie an, wo ein Fehler im Code liegt.

+0

Sie haben den Komparator nicht veröffentlicht, was das genaue Problem ist. Höchstwahrscheinlich ist es nicht transitiv. – chrylis

+0

Hallo Chrysis, ich bin Anfänger in Websphere mq Verbindung. Ich benutze nur so viele Dateien. extra habe ich pom.xml. Muss ich eine zusätzliche Datei hinzufügen oder fehlt mir etwas? – AIM

+0

Hat jemand die Ursache des Problems gefunden? – AIM

Antwort

0

Dies sieht aus wie ein MQ Defekt, und scheint die folgende APAR zum Spiel:

http://www-01.ibm.com/support/docview.wss?uid=swg1IC88187

Says in 7.0.1.10+ fixiert, 7.1.0.3+ und 7.5.0.1+ (und implizit zukünftige Hauptversionen). Aktualisieren Sie den Client, um diese Ebenen zu überschreiten, und das Problem sollte behoben werden.