Unknown macro: {next_previous_link3}
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 19 Next »

WSO2 ESB's Java Message Service (JMS) transport allows you to easily send and receive messages to queues and topics of any JMS service that implements the JMS specification.

The JMS transport implementation comes from the WS-Commons Transports project, and it makes use of JNDI to connect to various JMS brokers. As a result, WSO2 ESB can work with any JMS broker that offers JNDI support. All the relevant classes are packed into the axis2-transport-jms-<version>.jar and the classes  org.apache.axis2.transport.jms.JMSListener  and  org.apache.axis2.transport.jms.JMSSender  act as the transport receiver and sender respectively.

The JMS transport implementation requires an active JMS server instance to be able to receive and send messages. We recommend using WSO2 Message Broker or Apache ActiveMQ, but other implementations such as Apache Qpid and Tibco are also supported. For information on how to configure the JMS transport  with the most common broker servers that can be integrated with WSO2 ESB, see Configuring the JMS Transport.

JMS connection factory parameters

Configuration parameters for the JMS receiver and the sender are XML fragments that represent JMS connection factories. Following is a typical JMS configuration that uses WSO2 MB as the message broker:

<parameter name="myTopicConnectionFactory">
      <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="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter>
      <parameter name="transport.jms.ConnectionFactoryType">topic</parameter>
</parameter>

This is a bare minimal JMS connection factory configuration that consists of four connection factory parameters.

The following table describes each JMS connection factory parameter in detail:

Tip

In transport parameter tables, literals displayed in italic mode under the Possible Values column should be considered as fixed literal constant values. Those values can be directly used in transport configurations.

Parameter Name

Description

Required

Possible Values

Default Value

java.naming.factory.initial

JNDI initial context factory class. The class must implement the java.naming.spi.InitialContextFactory interface.

Yes

A valid class name

org.apache.activemq.jndi.ActiveMQInitialContextFactory

java.naming.provider.url

URL of the JNDI provider.

Yes

A valid URL

tcp://localhost:61616

java.naming.security.principal

JNDI Username.

No

 

 

java.naming.security.credentials

JNDI password.

No

 

 

transport.Transactionality

Preferred mode of transactionality.

Note

In WSO2 ESB, JMS transactions only work with either the Callout mediator or the Call mediator in blocking mode.

No

none, local, jta

none

transport.UserTxnJNDIName

JNDI name to be used to require user transaction.

No

 

java:comp/UserTransaction

transport.CacheUserTxn

Whether caching for user transactions should be enabled or not.

No

true, false

true

transport.jms.SessionTransacted

Whether the JMS session should be transacted or not.

No

true, false

true if transactionality is 'local'

transport.jms.SessionAcknowledgement

JMS session acknowledgment mode.

No

  • AUTO_ACKNOWLEDGE: The session is to automatically acknowledge the consumer receipt of messages when the message processing has finished.
  • CLIENT_ACKNOWLEDGE: The consumer is to acknowledge all messages that have been delivered so far by the session. When using this mode, it is possible for a consumer to fall behind in its message processing and build up a large number of unacknowledged messages.
  • DUPS_OK_ACKNOWLEDGE:The session is to lazily acknowledge the delivery of messages to the consumer. Lazy means that the consumer can delay acknowledgement of messages to the server until a convenient time. Meanwhile, the server might redeliver messages. This mode reduces session overhead. However, should JMS fail, the consumer may receive duplicate messages.
  • SESSION_TRANSACTED: The session is a related group of consumed or produced messages that are treated as a single unit of work. A transaction, as it generally means, can either be committed or rollback. When commit or rollback is called, the current transaction ends and a new one immediately starts.

Also see JMS Message Delivery Reliability and Acknowledgement Patterns.

 

AUTO_ACKNOWLEDGE

transport.jms.ConnectionFactoryJNDIName

The JNDI name of the connection factory.

Yes

QueueConnectionFactory, TopicConnectionFactory

ConnectionFactory

transport.jms.ConnectionFactoryType

Type of the connection factory.

No

queue, topic

queue

transport.jms.JMSSpecVersion

JMS API version.

No

1.1, 1.0.2b

1.1

transport.jms.UserName

The JMS connection username.

No

 

 

transport.jms.Password

The JMS connection password.

No

 

 

transport.jms.Destination

The JNDI name of the destination.

No

 

Defaults to service name

transport.jms.DestinationType

Type of the destination.

No

queue, topic

queue

transport.jms.DefaultReplyDestination

JNDI name of the default reply destination.

No

 

 

transport.jms.DefaultReplyDestinationType

Type of the reply destination.

No

queue, topic

Defaults to the type of the destination

transport.jms.MessageSelector

Message selector implementation.

No

 

 

transport.jms.SubscriptionDurable

Whether the connection factory is subscription durable or not.

No

true, false

false

transport.jms.DurableSubscriberClientIDThe ClientId parameter when using durable subscriptions

Required if the value specified as transport.jms.SubscriptionDurable is true.

  

transport.jms.DurableSubscriberName

The name of the durable subscriber.

Required if the value specified as transport.jms.SubscriptionDurable is true .

 

 

transport.jms.PubSubNoLocal

Whether the messages should be published by the same connection they were received.

No

true, false

false

transport.jms.CacheLevel

The cache level, with which JMS objects should be cached at start up. You can configure this in the <ESB_HOME>/repository/conf/axis2/axis2.xml file, if the ESB acts as a producer. Else, you can configure as a proxy service parameter, if the ESB acts as a consumer. Following are the possible values for this parameter and the description of each:

  • none - None of the JMS objects will be cached.
  • connection -  JMS connection objects will be cached.
  • session -  JMS connection and session objects will be cached.
  • consumer - JMS connection, session and consumer objects will be cached.
  • producer - JMS connection, session and producer objects will be cached.
  • auto - An appropriate cache level will be used based on the transaction strategy. 

No

none, connection, session, consumer, producer, auto

auto

transport.jms.ReceiveTimeout

Time to wait for a JMS message during polling. Set this parameter value to a negative integer to wait indefinitely. Set to zero to prevent waiting.

No

Number of milliseconds to wait

1000 ms

transport.jms.ConcurrentConsumers

Number of concurrent threads to be started to consume messages when polling.

No

Any positive integer - For topics this must be always 1

1

transport.jms.MaxConcurrentConsumers

Maximum number of concurrent threads to use during polling.

No

Any positive integer - For topics this must be always 1

1

transport.jms.IdleTaskLimit

The number of idle runs per thread before it dies out.

No

Any positive integer

10

transport.jms.MaxMessagesPerTask

The maximum number of successful message receipts per thread.

No

Any positive integer - Use -1 to indicate infinity

-1

transport.jms.InitialReconnectDuration

Initial reconnection attempts duration in milliseconds.

No

Any positive integer

10000 ms

transport.jms.ReconnectProgressFactor

Factor by which the reconnection duration will be increased.

No

Any positive integer

2

transport.jms.MaxReconnectDuration

Maximum reconnection duration in milliseconds.

No

 

3600000 ms (1 hr)

transport.jms.ReconnectIntervalReconnection interval in milliseconds.No >3600000 ms (1 hr)

transport.jms.MaxJMSConnections

Maximum cached JMS connections in the producer level.

No

Any positive integer value 

10

transport.jms.MaxConsumeErrorRetriesBeforeDelay

Number of retries on consume errors before sleep delay kicks in.

No

Any positive integer value 

20

transport.jms.ConsumeErrorDelay

Sleep delay when a consume error is encountered (in milliseconds).

No

Any positive integer value 

100 ms

transport.jms.ConsumeErrorProgression

Factor by which the consume error retry sleep will be increased.

No

Any positive integer value 

2.0

transport.jms.TransactionCommand Manages the lifecycle of a distributed transaction. This property can be be used to instruct ESB to perform distributed transactions with the defined states.No

begin (Initiate new transactions.) end (Commit the transaction.) rollback (Rollback the transaction.)

none
transport.jms.TransactionCommand Manages the lifecycle of a distributed transaction. This property can be be used to instruct ESB to perform distributed transactions with the defined states.No

begin (Initiate new transactions.)

end (Commit the transaction.)

rollback (Rollback the transaction.)

none

JMS transport implementation has some parameters that should be configured at service level. For example, parameters that should be configured in the service XML files of individual services.

Service level JMS configuration parameters

Following are some of the common parameters you can configure at the service level.

Parameter Name

Description

Required

Possible Values

transport.jms.ConnectionFactory

Name of the JMS connection factory the service should use.

No

A name of an already defined connection factory

transport.jms.PublishEPR

JMS EPR to be published in the WSDL.

No

A JMS EPR

transport.jms.ContentTypeSpecifies how the transport listener should determine the content type of received messages.NoA simple string value, in which case the transport listener assumes that the received messages always have the specified content type, or a set of rules. For more information, see http://axis.apache.org/axis2/java/transports/jms.html#Service_configuration.
transport.jms.MessagePropertyHyphensSpecifies the action to be taken when there are JMS Message property names that contain hyphens. No

none - No action will be taken. This is the default value.

replace - Transport headers with hyphens will be replaced before adding them as JMS message properties, and if the ESB is the consumer, hyphens will be reintroduced on message retrieval.

delete - Transport headers with hyphens will be deleted.

For more information, see Java Message Service (JMS) Support.

For information on how to tune the JMS transport for better performance, see Tuning the JMS Transport.

  • No labels