CWMS Queue Messages

Summary

The CWMS database publishes messages to JMS publish/subscibe queues to notify interesed clients of events sucn as time series CRUD operations and storage of ratings. A generalized JMS message structure is needed to extend the covered events, while moving message publication out of the database.

Opinions

Opinion 1

Summary: Extend existing queue structure as described below.

Author: Mike Perryman

Standards

Continue using jakarta.jms.MapMessage with the following characteristics to encapsulate notifications

  1. Every message has a String value named¹ 'type', which specifies the message type².

  2. Every message has a String value named 'office_id' which specifies the office performing the action and/or owning the data being referenced.

  3. If the data being referenced has a text identifier, it is specified in a String value named <code>’<em>xxx</em>_id’</code> (e.g., 'ts_id’, 'rating_id')

  4. If the data being referenced has a numeric code in the database, and that code is necessary for efficient post-notification operations, it may be specified in a long value named xxx_code (e.g., 'ts_code'). Otherwise, the code values should not be included in the message.

  5. Any date/time values to be included in a message (e.g., 'start_time', 'end_time', 'version_date') should be specified as long values and should be in milliseconds into the Unix epoch (i.e., Java milliseconds)

  6. Any boolean values to be included in a message should be specified as boolean values.³

¹ Current message value names are specified in snake_case (e.g., 'type', 'office_id', 'ts_id')

² Current message 'type' values are specied in Pascal case (e.g., 'TSCreated', 'RatingStored')

³ Note that existing messages may not follow this standard.

Existing Messages

Message Type

Queue Used

Structure

TSCreated

XXX_TS_STORED

Value Type

Value Name

Value

String

'type'

'TSCreated'

String

'office_id'

The office identifier

String

'ts_id'

The time series identifier

long

'ts_code'

The time series numeric code

TSDeleted

XXX_TS_STORED

Value Type

Value Name

Value

String

'type'

'TSDeleted'

String

'office_id'

The office identifier

String

'ts_id'

The time series identifier

long

'ts_code'

The time series numeric code

TSRenamed

XXX_TS_STORED

Value Type

Value Name

Value

String

'type'

'TSRenamed'

String

'office_id'

The office identifier

String

'ts_id'

The old time series identifier

String

'new_ts_id'

The new time series identifier

long

'ts_code'

The time series numeric code

TSDataStored

XXX_TS_STORED

Value Type

Value Name

Value

String

'type'

'TSDataStored'

String

'office_id'

The office identifier

String

'ts_id'

The time series identifier

long

'ts_code'

The time series numeric code

long

'start_time'

DATE_TIME of first value

long

'end_time'

DATE_TIME of last value

long

'version_date'

VERSION_DATE of values

long

'store_time'

DATA_ENTRY_DATE of values

String

'store_rule'

The store rule used

TSDataStored

XXX_REALTIME_OPS

Value Type

Value Name

Value

String

'type'

'TSDataStored'

String

'office_id'

The office identifier

String

'ts_id'

The time series identifier

long

'ts_code'

The time series numeric code

long

'start_time'

DATE_TIME of first value

long

'end_time'

DATE_TIME of last value

TSDataDeleted

XXX_TS_STORED

Value Type

Value Name

Value

String

'type'

'TSDataDeleted'

String

'office_id'

The office identifier

String

'ts_id'

The time series identifier

long

'ts_code'

The time series numeric code

long

'start_time'

DATE_TIME of first value

long

'end_time'

DATE_TIME of last value

long

'version_date'

VERSION_DATE of values

long

'deleted_time'

The time values were deleted

RatingStored

XXX_TS_STORED

Value Type

Value Name

Value

String

'type'

'RatingStored'

String

'office_id'

The office identifier

String

'active'

The ACTIVE_FLAG (‘T’/’F’)

String

'is_virtual'

is a virtual rating (‘true’/’false’)

String

'is_transitional'

is a transitional rating (‘true’/’false’)

long

'create_date'

The date/time the rating was stored to the database

long

'effective_date'

The date/time the rating came into effect

long

'transition_date'

The date/time to begin transition from the previous rating

RatingStored

XXX_REALTIME_OPS

Value Type

Value Name

Value

String

'type'

'RatingStored'

String

'office_id'

The office identifier

String

'active'

The ACTIVE_FLAG (‘T’/’F’)

String

'is_virtual'

is a virtual rating (‘true’/’false’)

String

'is_transitional'

is a transitional rating (‘true’/’false’)

long

'create_date'

The date/time the rating was stored to the database

long

'effective_date'

The date/time the rating came into effect

long

'transition_date'

The date/time to begin transition from the previous rating

Status

XXX_STATUS

Value Type

Value Name

Value

String

'type'

'Status'

String

'office'

The office publishing the msg

String

'project'

The location identifier of the project assoc with the message

String

'application'

The application publishing the message

String

'user'

The user publishing the msg

String

'source_id' ¹ | A souce identifier associated
with the message

String

'time_series_id' ¹ | A time series identifier assoc
with the message

long

'start_time' ¹ | A start time associated with
the message

long

'end_time' ¹ | An end time associated with
the message

¹ This value is optional depending on the purpose of the message

project lock requested

XXX_STATUS

Value Type

Value Name

Value

String

'type'

'RequestAction'

String

'action'

'unlock project'

String

'office'

The office of the project to be unlocked

String

'project'

The location identifier of the project to be unlocked

String

'application'

The application publishing the request

String

'user'

The user publishing the request

long

'force_time'

The time at which the project lock will be forcibly revoked if no reply (release or denial) is received

project lock released

XXX_STATUS

Value Type

Value Name

Value

String

'type'

'State'

String

'old_state'

'locked'

String

'new_state'

'unlocked'

String

'action'

'lock released'

String

'office'

The office of the unlocked project

String

'project'

The location identifier of the project that has been unlocked

String

'application'

The application publishing the message

String

'user'

The user publishing the msg

project lock acquired

XXX_STATUS

Value Type

Value Name

Value

String

'type'

'State'

String

'old_state'

'unlocked'

String

'new_state'

'locked'

String

'action'

'lock acquired'

String

'office'

The office of the locked proj

String

'project'

The location identifier of the project that has been locked

String

'application'

The application publishing the message

String

'user'

The user publishing the msg

project lock request denied

XXX_STATUS

Value Type

Value Name

Value

String

'type'

'State'

String

'response'

'request denied'

String

'action'

'unlock project'

String

'office'

The office of the project requested to be unlocked

String

'project'

The location identifier of the project requested to be unlocked

String

'application'

The application publishing the message

String

'user'

The user publishing the message

project lock revoked

XXX_STATUS

Value Type

Value Name

Value

String

'type'

'State'

String

'old_state'

'locked'

String

'new_state'

'unlocked'

String

'action'

'lock revoked'

String

'office'

The office of the project whose lock is revoked

String

'project'

The location identifier of the project whose lock is revoked

String

'application'

The application publishing the message

String

'user'

The user publishing the message

Decision Status

Status: request for comments

References