Message Driven Bean Tweaking

Infinity Process Platform leverages J2EE's asynchronous messaging capabilities both for integration of external applications and internal use, thus requiring three JMS queues in a default installation. The following table summarizes important aspects of these queues.

Default JNDI Name MDB Traffic Lost Message Restore
CarnotSystemQueue MessageListener High Automatically during Infinity Process Platform recovery .
CarnotDaemonQueue DaemonListener Low Automatically during Infinity Process Platform recovery.
CarnotApplicationQueue ResponseHandler Application dependent Hard, has to be provided by external applications.

To ease handling of errors occurring while processing messages from these queues the Infinity Process Engine provides several server-side runtime properties, which are described in the next section.

The rationale behind this implementation lies in the asynchronous behavior of JMS messaging. Two frequent reasons for easily recoverable processing failures are subtle race conditions between concurrent threads of execution (esp. independent transactional resources) and locking conflicts on shared resources. By internalizing retry strategies into its standard asynchronous message processing the Infinity Process Engine frees users to focus on handling durable or application specific error conditions.

Note
In order to enable message rollback behavior the appropriate MDB has to be deployed with a CMT attribute of required. This is the default for Infinity Process Platform supplied EJB deployment descriptors.

Properties

The runtime properties provide controlling behavior independent of the capabilities of the JMS implementation you use. The following properties are available, whereby ??? stands for one of the MDB names from the previous table:

JMS.???.ProcessingFailure.Retries

This property specifies the number of retries in case the message could not be processed without errors. This means the number of delayed retries to be attempted before giving up handling an incoming JMS message causing errors and continuing as specified with the property JMS.<listener_name>.ProcessingFailure.Mode. Possible values for <listener_name> are:

Hereby, DaemonListener and MessageListener have a value of forget recommended.

JMS.???.ProcessingFailure.Mode

This property determines the strategy used to treat incoming JMS messages causing processing errors.

Possible values are:

Possible values for <listener_name> are:

JMS.???.ProcessingFailure.Pause

Specifies the number of milliseconds delay before retrying to handle an incoming JMS message causing errors as specified with the property JMS.<listener_name>.ProcessingFailure.Retries. Possible values for <listener_name> are:

Using Default Values

By not providing custom property values your application will stick to the following default values:

MDB Retries Pause Mode
MessageListener 20 500 forget
DaemonListener 10 1000 forget
ResponseHandler 2 500 rollback