This document provides MDM developers the background needed to publish new notification event types to the JMS message broker so that clients can subscribe to topics and receive real-time updates to MDM events. In JMS, a topic implements publish and subscribe semantics. When you publish a message it goes to all the subscribers who are interested - so zero to many subscribers will receive a copy of the message. Only subscribers who had an active subscription at the time the broker receives the message will get a copy of the message.
...
- Add the new notification topic name to the
topic
enum in:open-mdm/src/main/resources/raml/schemas/topicPref.json
. This is a RAML file so the source needs to be built for the change to take effect. - Typically the notification is triggered at the resource layer (e.g.
impl.resource/DomainsResource.java
) after the service layer has successfully completed the event. Use the static methodcreateEvent()
in theNotificationService class
.
Notification Service MethodNotificationService.createEvent(Enum eventType, String message, Map<String, String> map)
Trigger a JMS notification of a given topic (zone) for a given event type.
Parameters
eventType - The event type being generated defined in the enum TopicPref.Topic
message - A message to be sent to the subscriber. This string should be a human readable appropriate for viewing in a log or UI.
map - Optional map of key values that the subscriber can use to discover details about the event.
The notification sent to the subscriber can retrieve the a full message using the "body" key found in the JMS payload. A series of key/value pairs can be retrieved inside of the "header" payload (not to be confused with the HTTP header)JMS header. A series of standard key/value pairs are included in the " header " of all requests each request (for a description see MDM Client: Subscribing to Event Notifications). Additionally, "the header " will include the key/value pairs provided by the publisher in "map" described above.
The notification deliver scope for an event by default is ALL but you can override this by TBD (TODO: Mayank):
...