title: Spring JMS + IBM MQ: How to set message buffer size or wait timeout?
body: <p>I'm unable to process large messages from IBM MQ and get the below error:</p>
  
  <p>JMSCMQ0001: WebSphere MQ call failed with compcode '1' ('MQCC_WARNING') reason '2080' ('MQRC_TRUNCATED_MSG_FAILED')</p>
  
  <p>I'm using the DefaultListenerContainer and not consuming via a MessageConsumer using IBM MQ Java API classes directly. I believe by using IBM MQ JMS API you can specific options before retrieving the message from the queue. But how do I do that with DefaultListenerContainer, is there a system property I can set for these?</p>
  
  <p>If using IBM MQ JMS API(I'm not consuming message like this, pasted just for reference):</p>
  
  <p>MQGetMessageOptions mqGetMessageOptions = new MQGetMessageOptions();
  mqGetMessageOptions.waitInterval = ipreoProperties.getMqReceiveWaitTime();
  mqGetMessageOptions.options = MQC.MQGMO_WAIT | MQC.MQPMO_SYNCPOINT | MQC.MQGMO_ACCEPT_TRUNCATED_MSG;</p>
  
  <p>Below is my Java Config for the IBM MQ Connection:</p>
  
  <pre><code>@Bean
      public CachingConnectionFactory ipreoMQCachingConnectionFactory() {
  
          CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
  
          //Not defining MQQueueConnectionFactory as separate bean as Spring boot's auto-configuration finds two instances
          //of ConnectionFactory and throws ambiguous implementation exception 
          //One implementation is CachingConnectionFactory and other one would be MQQueueConnectionFactory if defined separately
  
          MQQueueConnectionFactory mqConnectionFactory = new MQQueueConnectionFactory();
  
          try {
  
              mqConnectionFactory.setHostName(env.getRequiredProperty(AppEnvPropertyConstants.JmsConstants.IPREO_MQ_HOSTNAME));
              mqConnectionFactory.setQueueManager(env.getRequiredProperty(AppEnvPropertyConstants.JmsConstants.IPREO_MQ_QUEUE_MGR));
              mqConnectionFactory.setPort(env.getRequiredProperty(AppEnvPropertyConstants.JmsConstants.IPREO_MQ_PORT, Integer.class));
              mqConnectionFactory.setChannel(env.getRequiredProperty(AppEnvPropertyConstants.JmsConstants.IPREO_MQ_CHANNEL));
              //mqConnectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
  
              //Setting connection mode as Client so it doesn't complain for native IBM MQ libraries
              mqConnectionFactory.setIntProperty(CommonConstants.WMQ_CONNECTION_MODE, CommonConstants.WMQ_CM_CLIENT);
  
          } catch (JMSException exception) {
              exception.printStackTrace();
          }
  
          cachingConnectionFactory.setTargetConnectionFactory(mqConnectionFactory);
  
          //Setting session caching size as 10, don't think we need more
          cachingConnectionFactory.setSessionCacheSize(10);
          cachingConnectionFactory.setReconnectOnException(true);
  
          return cachingConnectionFactory;
      }
  
   public DefaultMessageListenerContainer ipreoDealActivityListenerContainer() {
  
          DefaultMessageListenerContainer factory = new DefaultMessageListenerContainer();
          factory.setConnectionFactory(ipreoMQCachingConnectionFactory());
          factory.setDestinationName(env.getRequiredProperty(AppEnvPropertyConstants.JmsConstants.IPREO_DEAL_QUEUE_NAME));
          factory.setMessageListener(ipreoDealActivityListener());
          factory.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
  
          return factory;
      }
  
  @Bean
      public MessageListener ipreoDealActivityListener() {
          return new IpreoDealActivityListener();
      }
  </code></pre>
  
  <p>Appreciate your help, thanks.</p>