【问题标题】:Comparison method violates its general contract! when trying to send message to Websphere mq比较法违反其总约!尝试向 Websphere mq 发送消息时
【发布时间】:2016-08-11 00:18:05
【问题描述】:

我正在使用 spring jms 连接到 Websphere MQ。我正在尝试通过 localhost 进行连接,但现在不使用 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;
  }

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>

我收到一个错误,

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。请提出代码中的错误在哪里。

【问题讨论】:

  • 您没有发布比较器,这正是问题所在。很可能,它不是可传递的。
  • 嗨 Chrylis,我是 Websphere mq 连接的新手。我只使用这么多文件。另外我有 pom.xml。我需要添加一些额外的文件还是我遗漏了什么?
  • 有人找到问题的根源吗?

标签: java spring ibm-mq spring-jms


【解决方案1】:

这看起来像一个 MQ 缺陷,并且似乎与以下 APAR 匹配:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多