12c BPM and BAM Multi Domain Setup

Introduction In this blog, I will show you how to setup BPM and BAM in 2 separate WebLogic domains, so the out-of-the-box process analytics will work as it is on the same domain. In the multi domain setup, you will have a BPM only domain and BAM/BPM domain. The BPM only domain will contain both […]

BAM Design Considerations for Systems with High Volume of Transactions

Dealing with high volume of transactions in Oracle Business Activity Monitoring (BAM) 11g can be challenging. Making the right design decision is critical for the stability and performance of your system. This post covers the common issues and general design recommendations for Oracle BAM 11g in the context of high volume of transactions. The common […]

Oracle BAM Adapter Batching Deep Dive

In the real business scenario of integrating SOA/AIA applications with Oracle Business Activity Monitoring (BAM), one common requirement is that such integration should not impact the operations of business systems running on SOA/AIA in terms of high availability and performance. To achieve this goal, one option is to use BAM Adapter or BAM Sensor Actions […]

BAM design pointers

In working recently with a large Oracle customer on SOA and BAM, I discovered that some BAM best practices are not quite well known as I had always assumed ! There is a doc bug out to formally incorporate those learnings but here are a few notes..

 EMS-DO parity

When using EMS (Enterprise Message Source) as a BAM feed, the best practice is to use one EMS to write to one Data Object. There is a possibility of collisions and duplicates when multiple EMS write to the same row of a DO at the same time. This customer had 17 EMS writing to one DO at the same time. Every sensor in their BPEL process writes to one topic but the Topic was read by 1 EMS corresponding to one sensor. They then used XSL within BAM to transform the payload into the BAM DO format. And hence for a given BPEL instance, 17 sensors fired, populated 1 JMS topic, was consumed by 17 EMS which in turn wrote to 1 DataObject.(You can image what would happen for later versions of the application that needs to send more information to BAM !). 

We modified their design to use one Master XSL based on sensorname for all sensors relating to a DO- say Data Object ‘Orders’ and were able to thus reduce the 17 EMS to 1 with a master XSL.
 

For those of you wondering about how squeaky clean this design is, you are right ! This is indeed not squeaky clean and that brings us to yet another ‘inferred’ best practice. (I try very hard not to state the obvious in my blogs with the hope that everytime I blog, it is very useful but this one is an exception.)

Transformations and Calculations

It is optimal to do transformations within an engine like BPEL. Not only does this provide modelling ease with a nice GUI XSL mapper in JDeveloper, the XSL engine in BPEL is quite efficient at runtime as well. And so, doing XSL transformations in BAM is not quite prudent. 

The same is true for any non-trivial calculations as well. It is best to do all transformations,calcuations and sanitize the data in a BPEL or like layer and then send this to BAM (via JMS, WS etc.) This then delegates simply the function of report rendering and mechanics of real-time reporting to the Oracle BAM reporting tool which it is most suited to do.

All nulls are not created equal
Here is yet another possibly known fact but reiterated here.
For an EMS with an Upsert operation:
 
a) If Empty tags or tags with no value are sent like <Tag1/> or <Tag1></Tag1>, the DO will be overwritten with –null–
b) If Empty tags are suppressed ie not generated at all, the corresponding DO field will NOT be overwritten. The field will have whatever value existed previously. 
 
For an EMS with an Insert operation, both tags with an empty value and no tags result in –null– being written to the DO.
 

Hope this helps ..

Happy 4th!