Data Change Broadcast

The Data Change Broadcast enables automatic publishing of data changes into the JMS queue for a set of desired business objects.

InfoSphere® MDM Data Change Broadcast can publish to the Broadcast Queue the data changes of the configured business objects. The Broadcast Queue can be subscribed by the other enterprise systems such as data warehouse systems and other MDMS solutions to consume these broadcasts.

InfoSphere MDM Data Change Broadcast is built upon the notification framework, so it requires the notification framework to be enabled by setting the /IBM/DWLCommonServices/Notifications/enabled configuration item to true.

InfoSphere MDM Data Change Broadcast is also built upon the extension framework so that InfoSphere MDM administrators can easily set their desired list of business objects and then InfoSphere MDM Data Change Broadcast begins broadcasting any changes on those business objects.

Three change broadcast behavior extensions are introduced to collect the changes of the data within a transaction lifetime:
  • AddBroadcastExt: to capture the changes of the add operations
  • UpdateBroadcastExt: to capture the changes of the update operations
  • DeleteBroadcastExt: to capture the changes of the delete operations
These behavior extensions can be enabled at the post processing stage of the desired actions or transactions within InfoSphere MDM. For example, if the data change broadcast is expected for add/update/delete operations of TCRMPersonBObj, TCRMPersonNameBObj and TCRMPartyContactMethodBObj, then the following behavior extensions must be configured:
Table 1. AddBroadcastExt behavior extension
Process stage Level Operation name
Post process Component level addPartySimple
Post process Controller level addPersonName
Post process Controller level addPartyContactMethod
Table 2. UpdateBroadcastExt behavior extension
Process stage Level Operation name
Post process Component level updateParty
Post process Controller level updatePersonName
Post process Controller level updatePartyContactMethod
Table 3. DeleteBroadcastExt behavior extension
Process stage Level Operation name
Post process Component level deleteParty
The current logic in these behavior extensions simply adds the working object hierarchy (received in the input extension parameter) to broadcast data in DWLControl:
public void execute(ExtensionParameters params) {
		DWLControl control = params.getControl();
		DWLCommon bObj = (DWLCommon) params.getWorkingObjectHierarchy();

		if (bObj == null || control == null)
			return;

		BroadcastData bData = new BroadcastData();
		bData.setBusinessObject(bObj);

		control.addBroadcastData(bData);
	}
Data Change Broadcast Message Constructor

BroadcastConstructor is the default broadcast message constructor and it can construct broadcast messages in xml format that are compliant with broadcast.xsd. However, InfoSphere MDM developers can develop and use their customized message constructor. The custom message constructor can be individually set in the behavior extension (by invoking BroadcastData’s setConstructor method), or it can be set globally in the /IBM/DWLCommonServices/Notifications/BroadcastConstructor/className configuration item.

Here is a snippet sample for the default broadcast message XML:
<?xml version="1.0" encoding="UTF-8"?>
<MDMBroadcast xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="broadcast.xsd">
  <BroadcastControl>
     <transactionName>updateContractComposite</transactionName>
	. . .
     <requesterName>cusadmin</requesterName>
     <requesterLanguage>100</requesterLanguage>
     <requesterTimeZone>EDT</requesterTimeZone>
  </BroadcastControl>
  
<!-- ********************* 1- a sample for updatePerson service ********************* -->
  <BroadcastEntity entityType="TCRMPersonBObj">   
     <Sources>
        <System key="123">ABC</System>
        <System key="456">SAP</System>
     </Sources>
     <BusinessObject name="TCRMPersonBObj" performedAction="update">
        <Attribute name="PartyId" beforeImage="100">100</Attribute>
        <Attribute name="BirthDate" beforeImage="1970-11-31">1970-11-13</Attribute>
        <BusinessObject name="TCRMPartyContactMethodBObj" performedAction="add">
           <Attribute name="PartyContactMethodIdPK">103</Attribute>
           <Attribute name="PartyId">100</Attribute>
           <Attribute name="EndDate"></Attribute>
           <Attribute name="ContactMethodId">104</Attribute>
           <BusinessObject name="TCRMContactMethodBObj" performedAction="add">
              <Attribute name="ContactMethodIdPK">104</Attribute>
              <Attribute name="ReferenceNumber">416-111-1111</Attribute>
           </BusinessObject>
        </BusinessObject>
     </BusinessObject>
  </BroadcastEntity>

  <!-- ********************* 2- a sample for addPersonName service ********************* -->
  <BroadcastEntity entityType="TCRMPersonBObj">   
     <Sources>
        <System key="456">ABC</System>
     </Sources>
     <BusinessObject name="TCRMPersonNameBObj" performedAction="add">
        <Attribute name="PersonPartyId">200</Attribute>
        <Attribute name="PersonNameIdPK">201</Attribute>
        <Attribute name="GivenNameOne">John</Attribute>
        <Attribute name="LastName">Doe</Attribute>
     </BusinessObject>
  </BroadcastEntity>

  <!-- ********************* 3- a sample for deleteParty service ********************* -->
  <BroadcastEntity entityType="TCRMPersonBObj">      
     <Sources>
        <System key="789">ABC</System>
        <System key="123">SAP</System>
     </Sources>
     <BusinessObject name="TCRMPersonBObj" performedAction="delete">
        <Attribute name="PartyId">300</Attribute>
        <Attribute name="BirthDate">1970-11-13</Attribute>
        <Attribute name="BirthDate">1970-11-13</Attribute>
        <BusinessObject name="TCRMPersonNameBObj" performedAction="delete">
           <Attribute name="PersonPartyId">300</Attribute>
           <Attribute name="PersonNameIdPK">305</Attribute>
           <Attribute name="GivenNameOne">Mary</Attribute>
           <Attribute name="LastName">Brown</Attribute>
        </BusinessObject>
     </BusinessObject>
  </BroadcastEntity>
</MDMBroadcast>
The default BroadcastConstructor invokes the external rule 198 (BroadcastSourceRule) to allow customizing the <Sources> part of the broadcast. The rule 198 accepts a business object in its input and it will collect and return all the external system name-key pairs for the party as recorded in the ContEquiv table. If this rules returns no system name-key pair, the ‘Sources’ XML element will not appear in the broadcast message.
BroadcastConstructor also depends on the configuration in BroadcastConstructor.properties. Here is the default configuration in this properties file:
### The control elements that can be in broadcast message. The elements are comma separated.
BroadcastControl.elements = transactionName, transactionId, transactionCorrelatorId, externalCorrelationId, clientSystemName, clientTransactionName, sessionId, requesterName, requesterLanguage, requesterLocale, requestTime, requesterTimeZone, requestOrigin, federatedInstanceName, customerRequestVersion, customerEnvironment, lineOfBusiness, company, geographicalRegion

### BroadcastEntity.BusinessObject.Groups = <comma separated list of the desired unique group names>
BroadcastEntity.BusinessObject.Groups = PersonEntities, PartyEntities, OrganizationEntities

### BroadcastEntity.<GroupName>.names = <comma separated of Business Object names>
BroadcastEntity.PersonEntities.names = TCRMPersonBObj, TCRMPersonNameBObj
BroadcastEntity.OrganizationEntities.names = TCRMOrganizationBObj, TCRMOrganizationNameBObj
BroadcastEntity.PartyEntities.names = TCRMPartyAddressBObj, TCRMAddressBObj, TCRMPartyContactMethodBObj, TCRMContactMethodBObj, TCRMPhoneNumberBObj, TCRMPartyIdentificationBObj, TCRMDeletedPartyBObj, TCRMInactivatedPartyBObj, TCRMDeletedPartyWithHistoryBObj

### BroadcastEntity.<GroupName>.showChangedAttributesOnly = true <or false>
BroadcastEntity.PersonEntities.showChangedAttributesOnly = true
BroadcastEntity.OrganizationEntities.showChangedAttributesOnly = true
BroadcastEntity.PartyEntities.showChangedAttributesOnly = true

### BroadcastEntity.<GroupName >.showBeforeImage = true <or false>
BroadcastEntity.PersonEntities.showBeforeImage = true
BroadcastEntity.OrganizationEntities.showBeforeImage = true
BroadcastEntity.PartyEntities.showBeforeImage = true

### BroadcastEntity.<GroupName>.ignoredAttributeNames = <comma separated attribute names to be ignored in and not visible from broadcast message> 
BroadcastEntity.PersonEntities.ignoredAttributeNames = ObjectReferenceId, ComponentID
BroadcastEntity.OrganizationEntities.ignoredAttributeNames = ObjectReferenceId, ComponentID
BroadcastEntity.PartyEntities.ignoredAttributeNames = ObjectReferenceId, ComponentID
Configuring and Extending Data Change Broadcast
Party domain additions:

To broadcast the data changes for the business object additions in the party domain, BroadcastConstructor.properties requires change. For example, for a NewSampleBObj added to the person entity, the following highlighted change is required:BroadcastEntity.PersonEntities.names = TCRMPersonBObj, TCRMPersonNameBObj, NewSampleBObj

Please also note that the Add/Update/DeleteBroadcastExt behavior extensions must be also configured for the granular persistence services of the addition.

You may also consider customizing rule #198, to suit your specific requirements in regards to the <Sources> information in the broadcast message.

Party domain extensions:

To broadcast the data changes for the extended business objects, no additional configuration is required as long as the super type of the business object is already configured for Data Change Broadcast.

Data Change Broadcast for the other domains:

To broadcast the data changes for the business objects in the other domains (for example. account domain), BroadcastConstructor.properties requires changes. For example to support broadcasting the changes for TCRMContractBObj and TCRMContractComponentBObj, the following highlighted changes are required:

BroadcastEntity.BusinessObject.Groups = PersonEntities, PartyEntities, OrganizationEntities, Contract

BroadcastEntity.Contract.names = TCRMContractBObj, TCRMContractComponentBObj

BroadcastEntity.Contract.showChangedAttributesOnly = true

BroadcastEntity.Contract.showBeforeImage = true

BroadcastEntity.Contract.ignoredAttributeNames = ObjectReferenceId, ComponentID

Please also note that the Add/Update/DeleteBroadcastExt behavior extensions must be also configured for the persistence operations of these business objects.

You may also consider customizing rule #198, to suit your specific requirements in regards to the <Sources> information in the broadcast message.