比较方法违反了它的总契约!尝试向 Websphere mq 发送消息时

Comparison method violates its general contract! when trying to send message to Websphere mq

我正在使用 spring jms 连接到 Websphere MQ。我正在尝试通过本地主机连接,现在不使用 jndi 信息。

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

在主要方法中:

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;
  }

应用-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>

我收到一个错误,

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)

jmsTemplate.send(new MessageCreator() {

我无法连接到 Websphere MQ。请指出代码中的错误。

这看起来像是 MQ 缺陷,似乎与以下 APAR 匹配:

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

说在 7.0.1.10+、7.1.0.3+ 和 7.5.0.1+ 中已修复(暗示未来的主要版本)。升级客户端以超过这些级别,问题应该得到解决。

这是 jdk 错误:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7173464 您可以在虚拟机参数中附加 -Djava.util.Arrays.useLegacyMergeSort=true。