+

Search Tips   |   Advanced Search

(dist)(iseries)

Avoiding transaction timeouts in non-ASF mode

If wer messaging system runs in non-Application Server Facilities (non-ASF) mode, configure the Total transaction lifetime timeout transaction service property and the NON.ASF.RECEIVE.TIMEOUT message listener service custom property correctly, to avoid unwanted transaction timeouts.

To carry out the steps in this task, the messaging system must be running in non-ASF mode. To change from ASF mode to non-ASF mode, add the NON.ASF.RECEIVE.TIMEOUT custom property to the message listener service as described in Configure the message listener service.

For WebSphere Application Server Version 7 and later, listener ports are stabilized. For more information, read the article on stabilized features. You should plan to migrate the WebSphere MQ message-driven bean deployment configurations from using listener ports to using activation specifications. For more information about how to configure activation specifications for non-ASF mode, see Configure activation specifications for non-ASF mode. However, you should not begin this migration until you are sure the application does not have to work on application servers earlier than WebSphere Application Server Version 7. For example, if we have an application server cluster with some members at Version 6.1 and some at a later version, you should not migrate applications on that cluster to use activation specifications until after you migrate all the application servers in the cluster to the later version.

If the messaging system is running in non-ASF mode, to avoid unwanted transaction timeouts, you must allow a sufficient amount of time for processing to be completed before the total transaction lifetime timeout is reached. Therefore, verify the value specified for the NON.ASF.RECEIVE.TIMEOUT message listener service custom property is smaller than the value specified for the Total transaction lifetime timeout transaction service property, and also that the difference between the values of the two properties is greater than the amount of time that the onMessage() method of the message-driven bean (MDB) takes to process the message.

  1. To configure the Total transaction lifetime timeout transaction service property, complete step 8 in Configure transaction properties for an application server.

  2. To configure the NON.ASF.RECEIVE.TIMEOUT message listener service custom property, click Servers > Server Types > WebSphere application servers > server_name > [Communications] Messaging > Message Listener Service > Custom Properties.

  3. Click NON.ASF.RECEIVE.TIMEOUT. The General Properties page is displayed.

  4. Modify the Value field. The value of NON.ASF.RECEIVE.TIMEOUT must be specified in milliseconds. Make sure the value specified, when converted into seconds (by dividing by 1000), is less than the value that specified for Total transaction lifetime timeout, and that the difference between the values of the two properties is greater than the maximum number of seconds that the onMessage() method of the MDB takes to process a message.

  5. Click OK.

  6. Stop and restart the application server.


Example

As the following example shows, if Total transaction lifetime timeout and NON.ASF.RECEIVE.TIMEOUT are not correctly configured, transactions can time out before they are completed. This is because the thread begins calling the receive() method as soon as the transaction is created. In the following example, NON.ASF.RECEIVE.TIMEOUT is set to 110000 milliseconds (110 seconds), Total transaction lifetime timeout is set to 120 seconds and the onMessage () method of the MDB takes 15 seconds to process a message. The example supposes that a message does not appear at the destination until the receive() method has almost timed out:

  1. The listener port starts and allocates a thread from the thread pool and creates a transaction on the thread.

  2. The thread calls the receive() method to listen for messages.

  3. After 110 seconds a message appears at the destination.

  4. The thread removes the message from the destination and calls the onMessage() method of the MDB to begin processing the message.

  5. Ten seconds later, the transaction timeout is reached. The application server marks the transaction for rollback.

  6. Five seconds later, the onMessage() method finishes processing the message and tries to commit the transaction.

  7. The total amount of time that has elapsed since the transaction was started is 125 seconds (110 seconds waiting for a message, plus 15 seconds to process the message). As this time is longer than the transaction timeout, the application server prevents the transaction from being committed, and it is rolled back.


Related concepts

  • Message processing in ASF mode and non-ASF mode
  • Strict message ordering using non-ASF listener ports


    Related tasks

  • Configure transaction properties for an application server

  • Message listener service custom properties
  • Message listener service custom properties