[V8.0.0.4 Oct 2015]

JMS API restrictions

From a JMS specification perspective, the IBM® MQ classes for JMS treat IMS as a Java EE compliant application server, that always has a JTA transaction in progress.

For example, you can never call javax.jms.Session.commit() in IMS, because the JMS specification states that you can not call it in a JEE EJB, or Web container, while a JTA transaction is in progress.
This results in the following restrictions to the JMS API, in addition to those described in Transactional behavior.

Classic API restrictions

  • javax.jms.Connection.createConnectionConsumer(javax.jms.Destination, String, javax.jms.ServerSessionPool, int) always throws a JMSException.
  • javax.jms.Connection.createDurableConnectionConsumer(javax.jms.Topic, String, String, javax.jms.ServerSessionPool, int) always throws a JMSException.
  • All three variants of javax.jms.Connection.createSession always throws a JMSException if the connection already has an existing session active.
  • javax.jms.Connection.createSharedConnectionConsumer(javax.jms.Topic, String, String, javax.jms.ServerSessionPool, int) always throws a JMSException.
  • javax.jms.Connection.createSharedDurableConnectionConsumer(javax.jms.Topic, String, String, javax.jms.ServerSessionPool, int) always throws a JMSException.
  • javax.jms.Connection.setClientID() always throws a JMSException.
  • javax.jms.Connection.setExceptionListener(javax.jms.ExceptionListener) always throws a JMSException.
  • javax.jms.Connection.stop() always throws a JMSException.
  • javax.jms.MessageConsumer.setMessageListener(javax.jms.MessageListener) always throws a JMSException.
  • javax.jms.MessageConsumer.getMessageListener() always throws a JMSException.
  • javax.jms.MessageProducer.send(javax.jms.Destination, javax.jms.Message,javax.jms.CompletionListener) always throws a JMSException.
  • javax.jms.MessageProducer.send(javax.jms.Destination, javax.jms.Message, int, int, long, javax.jms.CompletionListener) always throws a JMSException.
  • javax.jms.MessageProducer.send(javax.jms.Message, int, int, long, javax.jms.CompletionListener) always throws a JMSException.
  • javax.jms.MessageProducer.send(javax.jms.Message,javax.jms.CompletionListener) always throws a JMSException.
  • javax.jms.Session.run() always throws a JMSRuntimeException.
  • javax.jms.Session.setMessageListener(javax.jms.MessageListener) always throws a JMSException.
  • javax.jms.Session.getMessageListener() always throws a JMSException.

Simplified API restrictions

  • javax.jms.JMSContext.createContext(int) always throws a JMSRuntimeException.
  • javax.jms.JMSContext.setClientID(String) always throws a JMSRuntimeException.
  • javax.jms.JMSContext.setExceptionListener(javax.jms.ExceptionListener) always throws a JMSRuntimeException.
  • javax.jms.JMSContext.stop() always throws a JMSRuntimeException.
  • javax.jms.JMSProducer.setAsync(javax.jms.CompletionListener) always throws a JMSRuntimeException.