This site contains the documentation that is relevant to older WSO2 product versions and offerings.
For the latest WSO2 documentation, visit https://wso2.com/documentation/.

JMS Message Store

JMS Message Store persists messages in a JMS queue inside a JMS Broker. It can be configured by giving the class value as org.apache.synapse.message.store.impl.jms.JmsStore. Since they persist messages in a JMS queue in an ordered manner, JMS message stores can be used to implement a store-and-forward pattern that has quality-of-service parameters like guaranteed delivery and reliability.

Configuration to connect to a broker is provided as parameter values.

JMS Message Store Parameters

Parameter Name

Value

Required

java.naming.factory.initial

Initial Context Factory to use to connect to the JMS broker

YES

java.naming.provider.url

Url of the naming provider to be used by the context factory

YES

store.jms.destination

JNDI Name of the Queue Name that message store is connecting

NO but for some JMS clients this will be needed

store.jms.connection.factory

JNDI name of the Connection factory which is used to create jms connections

NO but for some JMS clients this will be needed

store.jms.username

User Name that is used to create the connection with the broker

NO

store.jms.password

Password that is used to create the connection with the broker

NO

store.jms.JMSSpecVersion

1.1 or 1.0 JMS API specification to be used (Default 1.1)

NO

store.jms.cache.connection

true/false Enable Connection caching

NO

vender.class.loader.enabledSet to false when using IBM MQ, which requires skipping the external class loader.NO except when using IBM MQ

For more information about message stores, see Message Stores .

UI Configuration

  1. On the Management Console, click Message Stores on the left navigator. This opens the Manage Message Stores page.
  2. Click the Add Message Stores tab and then click Add JMS Message Store. This opens the JMS Message Store page.

    The following parameters are specific to the JMS Message Store:

    • Name - The unique name of the message store.
    • Initial Context Factore - The initial context factory to be used to connect to the JMS broker.
    • Provider URL - The url of the naming provider to be used by the context factory.
  3. If you want to configure the additional parameters, click Show Additional Parameters.

    Then the page with all the available JMS Message Store options appears.

Additional JMS Message Store parameter details are as follows:

  • JNDI Queue Name - JNDI Name of the Queue Name that message store is connecting
  • Connection factory - JNDI name of the Connection factory which is used to create jms connections
  • User Name - User Name that is used to create the connection with the broker
  • Password - Password that is used to create the connection with the broker
  • JMS API specification Version - 1.1 or 1.0 JMS API specification to be used (Default 1.1)
  • Enable Connection caching - true/false Enable Connection caching

Following is a sample JMS message store configuration that uses WSO2 MB as the message broker:

<messageStore name="JMSMS" class="org.apache.synapse.message.store.impl.jms.JmsStore" xmlns="http://ws.apache.org/ns/synapse">
   <parameter name="java.naming.factory.initial">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter>
   <parameter name="java.naming.provider.url">repository/conf/jndi.properties</parameter>
   <parameter name="store.jms.destination">ordersQueue</parameter>
   <parameter name="store.jms.connection.factory">queue</parameter>
   <parameter name="store.jms.JMSSpecVersion">1.1</parameter>
</messageStore>

Following is a sample JMS message store configuration that uses ActiveMQ as the message broker:

<messageStore name="JMSMS" class="org.apache.synapse.message.store.impl.jms.JmsStore" xmlns="http://ws.apache.org/ns/synapse">
   <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
   <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
   <parameter name="store.jms.destination">ordersQueue</parameter>
   <parameter name="store.jms.connection.factory">queue</parameter>
   <parameter name="store.jms.JMSSpecVersion">1.1</parameter>
</messageStore>

Note

When configuring a JMS message store with WSO2 MB or Active MQ you need to copy the required client libraries to the <ESB_HOME>/repository/component/lib directory. If the relevant client libraries are not copied you will see a java.lang.ClassNotFoundException. 

For information on the client libraries you need to copy when configuring a JMS message store with WSO2 MB, see Configure with WSO2 Message Broker.

For information on the client libraries you need to copy when configuring a JMS message store with ActiveMQ, see Configure with ActiveMQ.

Individual message priorities can be set using the following property on the provider. For example, the value can be 0-9 for ActiveMQ.

<property name="JMS_PRIORITY" value="9" scope="axis2"/>

Note

If you are using ActiveMQ 5.12.2 and above, you need to set the following system property on server start up for WSO2 ESB's JMS message store to work as expected.

-Dorg.apache.activemq.SERIALIZABLE_PACKAGES=“*"

With ActiveMQ 5.12.2 and above, you need to set the above property because users are enforced to explicitly whitelist packages that can be exchanged using ObjectMessages, and due to this restriction the message processor fails to read messages from ActiveMQ with the following error:

ERROR - JmsConsumer [JMS-C-1] cannot receive message from store. Error:Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: Forbidden class org.apache.synapse.message.store.impl.commons.StorableMessage! This class is not trusted to be serialized as ObjectMessage payload.

For information on configuring the JMS message store with different message brokers, see Store and Forward Using JMS Message Stores.