JMS API restrictions
From a JMS specification perspective, the IBM® MQ classes for JMS treat IMS as a Java EE or Jakarta 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 aJMSException.javax.jms.Connection.createDurableConnectionConsumer(javax.jms.Topic, String, String, javax.jms.ServerSessionPool, int)always throws aJMSException.- All three variants of
javax.jms.Connection.createSessionalways throws aJMSExceptionif the connection already has an existing session active. javax.jms.Connection.createSharedConnectionConsumer(javax.jms.Topic, String, String, javax.jms.ServerSessionPool, int)always throws aJMSException.javax.jms.Connection.createSharedDurableConnectionConsumer(javax.jms.Topic, String, String, javax.jms.ServerSessionPool, int)always throws aJMSException.javax.jms.Connection.setClientID()always throws aJMSException.javax.jms.Connection.setExceptionListener(javax.jms.ExceptionListener)always throws aJMSException.javax.jms.Connection.stop()always throws aJMSException.javax.jms.MessageConsumer.setMessageListener(javax.jms.MessageListener)always throws aJMSException.javax.jms.MessageConsumer.getMessageListener()always throws aJMSException.javax.jms.MessageProducer.send(javax.jms.Destination, javax.jms.Message,javax.jms.CompletionListener)always throws aJMSException.javax.jms.MessageProducer.send(javax.jms.Destination, javax.jms.Message, int, int, long, javax.jms.CompletionListener)always throws aJMSException.javax.jms.MessageProducer.send(javax.jms.Message, int, int, long, javax.jms.CompletionListener) always throws aJMSException.javax.jms.MessageProducer.send(javax.jms.Message,javax.jms.CompletionListener)always throws aJMSException.javax.jms.Session.run()always throws aJMSRuntimeException.javax.jms.Session.setMessageListener(javax.jms.MessageListener)always throws aJMSException.javax.jms.Session.getMessageListener()always throws aJMSException.
Simplified API restrictions
-
javax.jms.JMSContext.createContext(int)always throws aJMSRuntimeException. -
javax.jms.JMSContext.setClientID(String)always throws aJMSRuntimeException. -
javax.jms.JMSContext.setExceptionListener(javax.jms.ExceptionListener)always throws aJMSRuntimeException. -
javax.jms.JMSContext.stop()always throws aJMSRuntimeException. -
javax.jms.JMSProducer.setAsync(javax.jms.CompletionListener)always throws aJMSRuntimeException.