Appendix D. Message Selectors

Message selectors allow a JMS consumer to be more selective about the messages it receives from a particular topic or queue. Message selectors use Message properties and headers as criteria in conditional expressions. These conditional expressions use boolean logic to declare which messages should be delivered to a client.

The message selectors are based on a subset of the SQL-92 conditional expression syntax that is used in the WHERE clauses of SQL statements. This section is a detailed exploration of the message selector syntax.

To illustrate how message selectors are applied, we will consider a hypothetical message that contains three application properties: Age, Weight, and LName. Age is an int, Weight is a double, and LName is a String property. The values of these properties depend on the message. The message selector is used to obtain only those messages with property values of interest to the consumer.

Identifiers

An identifier is the part of the expression that is being compared. For example, the identifiers in the following expression are Age, Weight, and LName:

            Age < 30 AND Weight >= 100.00 AND LName = 'Smith'

Identifiers can be any application-defined, JMS-defined, or provider-specific property, or one of several JMS headers. Identifiers must match the property or JMS header name exactly; identifiers are case sensitive. Identifiers have the same naming restrictions as property names (see Appendix C).

The JMS headers that can be used as identifiers include JMSDeliveryMode, JMSPriority, JMSMessageID, JMSTimestamp, JMSCorrelationID, and JMSType. The JMSDestination and JMSReplyTo headers cannot be used as identifiers because their corresponding values are Destination objects whose underlying value is proprietary and therefore undefined.

The JMSRedelivered value may be changed during delivery. If a consumer uses a message selector where "JMSRedelivered = FALSE", and there was a failure delivering a message, the JMSRedelivered flag might be set to TRUE. JMSExpiration is not supported as an identifier because JMS providers may choose to implement this value differently. Some may store it with the message, while others calculate it as needed.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset