31.01.2015 Views

SOA Magazine IV 01.2015

SOA Magazine IV 01.2015

SOA Magazine IV 01.2015

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>SOA</strong><br />

<strong>SOA</strong> Myth Busters - Episode #1<br />

B2B as a Critical Mission Hub<br />

In-depth look into API Catalog<br />

BPM<br />

Oracle BPM 12c Gateways<br />

ADF Runtime Interface Generator for BPM Human Tasks<br />

Top 10 Things You Should Know About BPM 11g/12<br />

Edition <strong>IV</strong><br />

January 2015


Dear <strong>SOA</strong> <strong>Magazine</strong> Readers,<br />

The <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> edition focuses on Industrial <strong>SOA</strong> articles which showcase that <strong>SOA</strong> is much more than a web<br />

service. Rolando Carrasco and Arturo Viveros showcase in their <strong>SOA</strong> Myth Busters article the evolution of the <strong>SOA</strong><br />

Suite towards a complete platform over the last 10 years. An industrial <strong>SOA</strong> platform contains also API<br />

management to secure web services, as well b2b as a trading hub between external partners.<br />

What is the use case for Business Process Management versus Services Oriented Architecture. <strong>SOA</strong> is mainly used<br />

for data mediation and process orchestration between different IT systems. BPM is focused on automation on<br />

human based processes like an employee holiday request. Key is to re-use the <strong>SOA</strong> web services for your BPM<br />

deployment. In our holiday request example we can re-use a web service from the HR system which informs the<br />

employee of the available holidays. In this magazine edition you learn on the BPM Side more about Gateways and<br />

how Link Consulting is using a generator to create Human tasks. Thanks to Mark Foster who highlights in his article<br />

10 best practices for <strong>SOA</strong> Suite and BPM Suite a must read!<br />

This quarterly newsletter is for both customers and partners who are active in the <strong>SOA</strong> space. The content includes<br />

articles for IT decision makers, architects and developers. The goal of the newsletter is to update you on the latest<br />

<strong>SOA</strong> technologies, market studies, trainings & certifications and conferences. We publish the newsletter in English<br />

and some articles will be in Portuguese especially for the Brazilian marketing, thanks to Ricardo Puttini and his<br />

team. Contribution is open for everybody! We want to publish your content! Like case studies, best practice,<br />

technical examples and solutions and conferences. Feel free to submit your content to Marcello Marinho<br />

(Portuguese articles) & Jürgen Kress (for English articles)<br />

Ricardo Puttini & Jürgen Kress<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 1


Table of Content<br />

<strong>SOA</strong> Myth Busters - Episode #1: “BPEL vs. OSB”........................................................................................... 3<br />

<strong>SOA</strong> Suite/B2B as a Critical Mission Hub for a High Volume Message Use Case ........................................ 13<br />

ADF Runtime Interface Generator for BPM Human Tasks .......................................................................... 21<br />

In-depth look into Oracle API Catalog (OAC) 12c ........................................................................................ 44<br />

Order to Cash Process Integration for Telecommunications ...................................................................... 67<br />

Next Generation <strong>SOA</strong>: A Concise Introduction to Service Technology & Service-Orientation ................... 78<br />

BPM 12c Gateways ..................................................................................................................................... 79<br />

Top 10 Things You Should Know About BPM 11g/12c ............................................................................. 125<br />

Cloud Service Brokers – the integration story of your cloud .................................................................... 131<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 2


<strong>SOA</strong> Myth Busters - Episode #1: “BPEL vs. OSB”<br />

Introduction<br />

So, do you work with Oracle <strong>SOA</strong> Suite, that’s great because we also do, every single day since a long<br />

time ago. As Oracle professionals, we’ve seen the <strong>SOA</strong> stack grow, change, incorporating new products<br />

and technology with each version, from 10g to 12c.<br />

We’re Rolando Carrasco (Oracle ACE) and Arturo Viveros (Oracle ACE Associate), the <strong>SOA</strong> Myth Busters<br />

from Mexico, and as we go with this series we will put to the test a number of questions, myths and<br />

urban legends regarding both <strong>SOA</strong> & the Oracle <strong>SOA</strong> Platform in seek of finding out which myths are<br />

true and which are not.<br />

BPEL vs OSB<br />

In this episode, we will dive into one of the hottest arguments Oracle <strong>SOA</strong> Practitioners have been<br />

sustaining over the years: BPEL against Service Bus. Can and should they work together Is one of them<br />

better than the other Are there any well-founded guidelines that I can rely on in order to decide<br />

between them And what about <strong>SOA</strong> Suite 12c Around this subject there seem to be plenty of myths,<br />

misunderstandings and misconceptions, so let’s get it on and uncover as much of the truth as possible.<br />

Let’s get started<br />

First and foremost, the two things we are comparing are pretty much standards before<br />

products.<br />

BPEL – Business Process Execution Language. It’s a standard for services orchestration,<br />

delivered and maintained by OASIS. It became popular in the early 2000s. Many software<br />

companies, like IBM, Oracle, have been actively working on the improvement of the standard.<br />

Many software companies offer products that support this standard. For example: Oracle BPEL<br />

PM.<br />

Service Bus (a.k.a. Enterprise Service Bus). Since the old days of integration and EAI, the<br />

concept of having something in the middle to be able to intercommunicate heterogeneous<br />

systems and services has been present. This ESB as a standard, should support: Dynamic<br />

Routing, Mediation, Virtualization, Content Enrichment, Service Invocation, etc. A good way to<br />

start learning about the standard of a Service Bus, is the book of David Chappell “Enterprise<br />

Service Bus” (http://shop.oreilly.com/product/9780596006754.do). This book has already 10<br />

years, but David represented quite well what a Service Bus is, and all the concepts are current<br />

to our days.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 3


Now, it happens that Oracle has a product by the name Oracle BPEL Process Manager and<br />

another named Oracle Service Bus. That’s what can add a little bit more of confusion to the<br />

comparison. And this question: should I use BPEL or Service Bus It is a common one within the<br />

Oracle <strong>SOA</strong> professionals and we think to any other software company that supports these two<br />

standards.<br />

A little bit of history<br />

So let’s start looking into this from a historic perspective. We’ll need to go back in time a few<br />

years, so we can attempt to locate the source of the aforementioned controversy and identify<br />

some myths.<br />

We remember our first years with this technologies, it was back in 2003-2004, when Oracle first<br />

released Oracle BPEL PM. In those days, Oracle did have something to offer in the integration<br />

space: Oracle Interconnect. But it was not that popular. When Oracle released BPEL PM, it<br />

changed everything. It changed many professional careers, as well as it changed the market.<br />

Oracle didn’t yet had a product quite resembling an ESB, but it did have Oracle BPEL PM. With<br />

that product it was able to compete in the Orchestration stage against players like BEA<br />

Weblogic Integration, TIBCO, and Web Methods.<br />

Ever since those days, Oracle BPEL PM (we’re referring to the tool, not the standard) was<br />

capable of: routing calls, enrichment of messages, virtualizing the access to other services, data<br />

model/format transformation through adapters to EIS systems like SAP, Oracle EBS, PeopleSoft,<br />

Siebel, Mainframe, etc. Oracle hadn’t started the rampage of buying PeopleSoft, Siebel, etc. so<br />

there was no tight integration with them. It was just adapters and this tool which was able to<br />

easily communicate with them.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 4


As time went by, a combination of market pressure and industry trends, caused Oracle to<br />

include in the 10g release of <strong>SOA</strong> Suite (year 2007) something called: Oracle Enterprise Service<br />

Bus (OESB). Then Oracle could finally say: we do have as part of our stack an Enterprise Service<br />

Bus.<br />

As fancy as it sounded, this former version of Oracle’s ESB was somehow limited and never<br />

really qualified as a best-of-breed product. Furthermore, it never boded well with architects,<br />

developers and administrators who found it a tad complicated and unfriendly.<br />

So, it seems like we’ve identified a first milestone in this BPEL vs OSB discussion. An early<br />

version of the <strong>SOA</strong> Suite we’ve come to know (10g), which included:<br />

An already robust and highly-liked product based on an up and coming industry<br />

standard (BPEL)<br />

A below average ESB as an optional component of the suite<br />

At the time, Oracle ESB (OESB) wound up not being heavily used in most integration projects<br />

outside of AIA implementations. For the time being and the state of industry requirements,<br />

BPEL could exist and function mostly by its own.<br />

Then in 2008, Oracle buys BEA Systems, and with this acquisition we come into a second<br />

relevant milestone: The release of Oracle <strong>SOA</strong> Suite 11g in mid-2009. This new and revamped<br />

stack introduced some very relevant changes:<br />

1. Oracle WebLogic Server as the runtime platform for all of the tools included in the Suite.<br />

2. Oracle Service Bus (based on the former BEA AquaLogic Service Bus) comes along, as a<br />

true ESB capable of positioning itself as one of the market-leading players.<br />

3. 10g’s ESB (OESB), is rebranded as “Mediator” and stays as an optional component of the<br />

Suite.<br />

This proved to be a great move by Oracle, and from the technology/architecture standpoint it<br />

gave to the components its specific weight. Now the Enterprise Service Bus<br />

standards/capabilities were very well identified inside Oracle Service Bus. But if your <strong>SOA</strong><br />

initiative included orchestration, business activity monitoring, business rules, the Oracle <strong>SOA</strong><br />

Suite with the rest of the components, was an excellent option.<br />

With this new stack, OSB could even be licensed on its own for clients that wanted to have the<br />

ESB alone as a cornerstone for their <strong>SOA</strong> implementation, though the most usual scenario is for<br />

the customers to have both the <strong>SOA</strong> Suite and the OSB as part of a multifaceted and well<br />

complimented <strong>SOA</strong> Toolkit.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 5


On the other hand, OESB’s rebranding stirred some confusion and otherwise felt a little like a<br />

demotion for an incumbent product that didn’t quite stick and was replaced by a more<br />

powerful tool.<br />

Finally, coming back to the present we find ourselves months removed from a third big<br />

milestone: <strong>SOA</strong> Suite 12c. In this new major release, the stack itself has been realigned<br />

according to the current industry trends (Industrial <strong>SOA</strong>, Developer Productivity, Cloud and<br />

Mobile). The tools are now more integrated than ever and Oracle’s intention is clearly to<br />

revolutionize the way we approach and implement <strong>SOA</strong>.<br />

In <strong>SOA</strong> Suite 12c it has become much more evident where and when to use BPEL or Service Bus,<br />

or when to use them together. According to Oracle, there should be less confusion around this.<br />

And in the way the IDEs, engines and monitoring are integrated in this release, the architecture<br />

definitions should be clearer than ever.<br />

So let’s summarize everything that we just mentioned:<br />

Year BPEL ESB<br />

2003-2007 Acquisition of Collaxa by<br />

Oracle leads to Oracle BPEL<br />

PM<br />

BPEL PM provides<br />

integration, web-services and<br />

BPM capabilities<br />

It quickly becomes the<br />

product of choice for Oracle<br />

<strong>SOA</strong> Practitioners<br />

2007-2009 BPEL PM continues to evolve<br />

and features in Oracle <strong>SOA</strong><br />

Suite 10g with some new<br />

capabilities<br />

The JDeveloper BPEL<br />

designer is vastly improved<br />

facilitating the <strong>SOA</strong><br />

developer’s work<br />

2009-2013 Oracle BPEL PM continues to<br />

headline <strong>SOA</strong> Suite 11g<br />

Both the runtime and the<br />

Oracle doesn’t have a<br />

traditional ESB offering<br />

throughout this period of<br />

time<br />

Oracle ESB debuts as a<br />

component in <strong>SOA</strong> Suite<br />

10g<br />

Its main purpose is to<br />

“move data among<br />

multiple endpoints, both<br />

within and outside of an<br />

enterprise”<br />

OESB includes a designtime<br />

modeler in JDev as<br />

well as a web-based<br />

runtime console (Oracle<br />

ESB Control)<br />

OESB is rebranded as<br />

Oracle Mediator and<br />

remains as a component<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 6


design time for BPEL are<br />

vastly improved<br />

The adoption of WLS as the<br />

flagship application server by<br />

Oracle, makes BPEL a lot<br />

more powerful than it was<br />

before,<br />

especially<br />

performance-wise.<br />

in <strong>SOA</strong> Suite<br />

Oracle Service Bus (OSB)<br />

leverages the former<br />

ALSB and is positioned<br />

immediately as a fullfledged<br />

ESB with lots of<br />

capabilities.<br />

The design-time tool for<br />

OSB is Eclipse-based<br />

(OEPE)<br />

2014 + Oracle BPEL PM and OSB have finally converged into an integrated<br />

developer environment (JDev) with the release of <strong>SOA</strong> Suite 12c<br />

The concepts of Industrial <strong>SOA</strong>, Developer Productivity, Mobility<br />

and Cloud Integration drive the improvements in the products,<br />

and have been equally applied to both tools, making them more<br />

compatible and complimentary than ever.<br />

Looking at this timeline, one can easily see where a lot of confusion could have arisen despite<br />

Oracle’s best efforts, especially before 12c:<br />

<br />

<br />

<br />

<br />

BPEL Developers that have been working with the tool for a long time just love it, and<br />

have seen the product grow and evolve in an orderly and standardized fashion, with a<br />

constant IDE. This as opposed to an ESB that has suffered many changes so far and has<br />

not been as easy to get familiarized with. This can lead to radical opinions that are not at<br />

all uncommon like: “BPEL is unquestionably better than the Service Bus”, where a sound<br />

product like OSB ends up being disqualified for all the wrong reasons.<br />

<strong>SOA</strong> Professionals that were already used to work with BEA WebLogic Server, WLS<br />

Workbench, Aqua Logic, Fuego etc., are much more prone to like OSB and understand<br />

its potential and capabilities. They may even find it easier and more dynamic than BPEL<br />

PM due to familiarity with the IDE and web-console. “OSB is just friendlier than BPEL and<br />

Eclipse is a much better IDE than JDev”. It wouldn’t be strange to hear an assessment<br />

like this one from an accomplished developer with a background in BEA technology.<br />

People that are newer to Oracle FMW’s stack, always seem to be wondering which one<br />

of the products is the best alternative, if they are making the right choice and even if<br />

they are over-utilizing or sub-utilizing one of them. In this case, rather than<br />

understanding the products as complimentary to each other, we would be unnecessarily<br />

stressing out and questioning ourselves over which one to choose.<br />

Architects and programmers that used to work with the tools from a different vendor<br />

(IBM, Software AG, TIBCO, etc.) and are now working with Oracle FMW, usually have<br />

trouble identifying the stack at first glance, so they tend to gravitate towards the<br />

product which seems to be more familiar and less problematic to them and stay away<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 7


from the rest based on their past good / bad experiences. This kind of scenario often<br />

leads to the most disparate opinions such as: “BPEL just doesn’t work at all and its use<br />

implies a terrible danger for the client, we’ll be better off by using exclusively a Service<br />

Bus”. Just imagine the turmoil an statement like this can produce, especially when<br />

pronounced by an “expert” with a long track record in integration projects.<br />

But is this controversy really just a matter of perception, past-experience, or even posttraumatic<br />

stress disorder We’ve already dived enough into the history, so let’s have a look<br />

now at some other kind of facts.<br />

<strong>SOA</strong> Design Patterns<br />

We saw in the past section how much the products have matured over time. At the same time, <strong>SOA</strong> as a<br />

methodology has also been evolving and maturing through a series of contributions from industry<br />

leaders, standards organizations, academics, professionals, architects and technology enthusiasts.<br />

As a result of this contributions, we have a well identified set of <strong>SOA</strong> Design Patterns: proven solutions<br />

to common problems.<br />

NOTE:<br />

*If you want to know more about <strong>SOA</strong> Design Patterns, make sure to visit the following site for a<br />

thorough explanation:<br />

http://www.soapatterns.org/<br />

Here we’ll have a look at some of these patterns and whether they are more suitable to be applied by<br />

the utilization of BPEL and/or Service Bus:<br />

<strong>SOA</strong> Design Pattern BPEL OSB<br />

Data Model Transformation X x<br />

Data Format Transformation<br />

x<br />

State Repository<br />

X<br />

Rules Centralization X x<br />

Process Abstraction<br />

X<br />

Process Centralization<br />

X<br />

Asynchronous Queuing X x<br />

Intermediate Routing<br />

x<br />

Event-Driven Messaging X x<br />

Protocol Bridging<br />

x<br />

Atomic Service Transaction X<br />

Compensating Service Transaction X<br />

Reliable Messaging<br />

x<br />

Policy Centralization<br />

x<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 8


As we can see in the table, each tool has its own set of relevant capabilities, some of them shared by<br />

both. JCA Adapters can also help us extend the native functionality of the products, especially in the<br />

case of BPEL.<br />

Based on the information we’ve just analyzed, we can definitely come up with a collection of pretty<br />

accurate guidelines regarding the use of one product or the other for certain scenarios:<br />

For service virtualization and brokering activities use OSB<br />

For long running and stateful orchestrated tasks, use Oracle BPEL<br />

For automatizing business activities based on a process definition use Oracle BPEL<br />

For incorporating Human Workflow and/or Oracle Business Rules, use Oracle BPEL PM<br />

For applying policy-centralization and reliable-messaging techniques on web-services,<br />

use OSB<br />

For stateless and short-lived web-service orchestrations use OSB<br />

For synchronous entity-based services or pass-through operations use OSB<br />

This gives us more clarity, providing appropriate separation of concerns without meaning that we<br />

cannot use OSB and BPEL in conjunction for solving sophisticated integration scenarios:<br />

Service virtualization using OSB<br />

BPEL<br />

OSB performing mediation duties in a Service Composition<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 9


Asynchronous queuing scenario with one-way invocation of a BPEL process through OSB<br />

And how does this look in Oracle <strong>SOA</strong> Suite 12c<br />

After looking at the historic perspective, some of the great advantages of <strong>SOA</strong> Suite 12c have to<br />

do with:<br />

Stability<br />

Continuity<br />

Maturity<br />

Unlike past releases, there’s not a major change in the runtime engine, nor in the set of<br />

products that conform the suite. This has allowed Oracle to focus on substantially improving<br />

each one of the tools, taking in account customer / developer feedback as well as industry<br />

trends and requirements.<br />

Oracle <strong>SOA</strong> Suite 12c, if anything, encourages <strong>SOA</strong> Practitioners to use BPEL and OSB together<br />

in order to design and implement robust solutions with the ability to provide the required<br />

flexibility, SLA compliance and transactional capacity the industry looks for.<br />

The following improvements (among many others) seem to be the most relevant in this regard:<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 10


Unified IDE for BPEL and OSB (JDeveloper)<br />

Unified Monitoring Console with end-to-end tracing capabilities (EM)<br />

Quick start <strong>SOA</strong> Suite installer bundle for developers including OSB<br />

Integrated Debugger for BPEL / OSB<br />

Error Hospital<br />

MDS tighter integration<br />

Continuous Integration through Maven artifacts<br />

Modularity profiles<br />

Conclusion<br />

While there indeed was a time when one product was more robust and mature than the<br />

other in the Oracle FMW Stack (BPEL > Service Bus), this is not true anymore. Even in<br />

11g this point was arguable to some degree, but in 12c both tools have been equally<br />

upgraded and aligned with the industry tendencies mentioned beforehand.<br />

Some of the controversy between these tools, especially among developers, had to do<br />

with the presence of different IDEs for BPEL PM and OSB. This proved to be a very<br />

impractical situation that has already been taken care of in 12c. JDev is now the IDE of<br />

choice for developing Oracle <strong>SOA</strong> Suite components, whether it is with BPEL or Service<br />

Bus.<br />

Even though BPEL + Service Bus have always been able to work together, in the past<br />

there was no pressing need to design solutions based on such a combination. Moreover,<br />

the separation of concerns between the tools was not as clear as it is now, thanks to the<br />

maturation of <strong>SOA</strong> Methodology. Nowadays, especially with <strong>SOA</strong> Suite 12c, BPEL & OSB<br />

comprise a terrific and necessary combination. A dynamic duo whose combined<br />

capabilities will let us face and successfully figure out the multiple challenges of<br />

Industrial <strong>SOA</strong>, as well as reap its significant benefits.<br />

We certainly hope that this body of work has been interesting, useful and enjoyable for you<br />

appreciated reader. Let’s meet again in our next episode!! The <strong>SOA</strong> Myth Busters<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 11


Rolando Carrasco<br />

Rolando Carrasco is a <strong>SOA</strong> Architect, co-founder and part of the S&P<br />

Solutions team in Mexico and Latin America. He’s been working with<br />

Oracle <strong>SOA</strong> since 2003/2004, and his professional career has been<br />

focused in the integration space. He worked for HP and Oracle.<br />

In Oracle he was part of the Product Management team with<br />

responsibilities in the Latin-American region. Rolando is also codirector<br />

of the Oracle Users Group in Mexico – ORAMEX. This user group is focused on Oracle<br />

Technology, and since 2012 has been coordinating activities oriented to deliver events for the<br />

community, and among other things to coordinate the OTN Tour.<br />

The projects where Rolando has participated involve the usage of <strong>SOA</strong>, BPM, Webcenter, Identity<br />

Management, Weblogic, Exalogic, and Webcenter. All of those technologies have been implemented<br />

successfully in different customers, industries and even countries (Costa Rica, Peru, and Honduras).<br />

Rolando has several published articles/videos at his own blog (oracleradio.blogspot.com) and also in the<br />

Oracle Technology Network in Spanish.<br />

Rolando is also an Oracle ACE.<br />

Contact: Blog LinkedIn Twitter<br />

Arturo Viveros<br />

Arturo is an outstanding professional currently based in Mexico City, with 10<br />

years of experience in the development, design, architecture and delivery of<br />

IT Projects for a variety of industries. He is also a regular speaker in<br />

technology conferences, both in Mexico and abroad. He is an Oracle ACE<br />

Associate and works as an IT Senior Architect in S&P Solutions.<br />

Arturo is also part of the coordinating committee for ORAMEX (Oracle User<br />

Group in Mexico) and has recently achieved the Oracle <strong>SOA</strong> Certified IT<br />

Architect certification as well as the Cloud Certified Architect and <strong>SOA</strong><br />

Certified Architect grades from Arcitura Inc. He is a certified trainer<br />

authorized to deliver the <strong>SOA</strong> School and Cloud School modules both in English and in Spanish.<br />

Arturo’s technical articles are frequently published on Oracle OTN (Spanish), and his blog<br />

(oracletechnocore.blogspot.com) includes also several articles about Oracle technology in both<br />

languages.<br />

Contact: LinkedIn Twitter<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 12


<strong>SOA</strong> Suite/B2B as a Critical Mission Hub for a High Volume Message Use<br />

Case<br />

Introduction<br />

Stop. Think. Ok…, in the meanwhile 2 seconds has passed and 250 messages more were processed by a<br />

mission critical hub built with Oracle B2B and <strong>SOA</strong> Suite which connects thousands of trading partners<br />

and processes millions of messages per day, handling 40% of Global Air cargo Traffic.<br />

In this article, you will find described high availability solution architecture, covering B2B and core <strong>SOA</strong><br />

Suite components as BPEL, along with Business Rules, Mediator and BAM integration, as well as lessons<br />

learned in conducting such complex and mission-critical project starting from a set of legacy<br />

applications.<br />

Imagine now how many messages were processed when you finish reading it.<br />

Mission and scope<br />

The mission was to build a high available and performant message hub between different intervenients<br />

in the air cargo industry integrating 15 thousand trading partners exchanging 3 Billion messages every<br />

year and execute complex document validation, multi-factor identification, correlation and batching,<br />

dynamic routing, transformations and monitoring.<br />

The document standards involved elevated B2B core product for the implementation due to its<br />

enhanced features available for document management. Main document standards are Air Cargo<br />

market defined standards as IATA - Cargo Interchange Message Procedures (CIMP), EDI CargoFact and<br />

CargoXML, as long other customer tailored documents based in FlatFile, XML and other custom format<br />

totalling 238 different document types. Another important and distinctive requirement was the relation<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 13


etween the envelope types in the exchanged messages. In this respect, except the standardize formats<br />

EDI, XML that implicitly define the envelope type to follow, all the others, including CIMP, are decoupled<br />

from the type of envelope that can wrap the message, and we are talking about 99 different and<br />

customizable envelope types built to be used with any document format.<br />

The transportation channels that can be used for message exchange are quite vast as well: different<br />

trading partner can communicate with the platform using 8 different transportation protocols, both for<br />

inbound and outbound.<br />

All of these enhancements were done, never neglecting the flexibility that allows evolving the platform<br />

for on-boarding customers, new message and envelope types achieving the desirable expansibility<br />

needed in a constant change market wherein the velocity to add capabilities is preponderant.<br />

Oracle B2B and <strong>SOA</strong> Suite – ‘Nice to meet you’<br />

Due to its strong features, Oracle B2B was elected as the core product for this type of implementation<br />

together with <strong>SOA</strong> suite components as BPEL, Mediator and Business Rules for back-ended operations. It<br />

thus provide a centralized platform for document, partners and agreements management as a reliable<br />

platform for document exchange between business partners.<br />

The following features are per se the reasons to elect B2B as centre of this implemented architecture:<br />

<br />

<br />

Multiple document protocol support as EDI, XML, Flat File and Custom-Defined<br />

Document definition tools available with possibility to implement rich and complex validation rules<br />

- Oracle Document Editor + Custom Editors for custom documents<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 14


Document definition design time testing<br />

Document translation and validation<br />

Ability to set document callouts to handle custom document<br />

Ability to set Channel callouts for custom inbound/outbound message processing<br />

Document batching<br />

Message resubmission capabilities<br />

Message store-and-forward capabilities<br />

Complex message identification and correlation<br />

Complex sender and recipient identification based in different envelope types<br />

Automatic message retry<br />

Support for large documents<br />

Message acknowledge support<br />

Messaging security enablement (EDI)<br />

Multiple envelope support<br />

Envelope generation<br />

Transport management<br />

Multiple transport protocols supported – HTTP, SMTP, <strong>SOA</strong>P, TCP, JMS, MQ, FILE, FTP<br />

Trading partner management<br />

Trading partner downtime<br />

Native integration with Oracle <strong>SOA</strong> suite and Oracle BAM<br />

API for message and Trading Partner metadata access<br />

E2E Message monitoring and auditing<br />

Message metrics dashboards and reports<br />

Partner Agreements<br />

User Access management<br />

Self Service Provisioning<br />

Exception handling<br />

On the document management side, it’s the ideal platform to leverage business standard documents<br />

and manage agreements. However, Oracle B2B acts as a gateway requiring architecture to manage the<br />

complete end-to-end business processes. This is where Oracle <strong>SOA</strong> Suite Service Component<br />

Architecture (SCA) components come into picture. Oracle BPEL, Mediator and Business Rules play the<br />

major role as back-end pieces in the global architecture.<br />

Oracle B2B is in fact a component part of Oracle <strong>SOA</strong> Suite what makes the integration quite simple and<br />

efficient. The integration between both components is ensured via out-of-the-box adapter implemented<br />

as binding component in a SCA. All of this leveraged by the use of <strong>SOA</strong> Metadata Services repository<br />

(MDS) allowing the sharing of different artefacts, as XML schemas or WSDL files among different<br />

architectural components as central repository for B2B artefacts and configuration.<br />

<br />

Service Composite Applications components were ultimate to implement the following capacities:<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 15


Routing and document handling business rules<br />

Service orchestration<br />

Message enrichment<br />

Message canonicalization/normalization<br />

Message duplication<br />

Mapping and transformations<br />

Document conversion<br />

Message splitting<br />

Message rejection<br />

Message deferring<br />

Message acknowledge<br />

Legacy system integration<br />

Exception handling<br />

Oracle B2B and <strong>SOA</strong> Suite, together provide a natural and integrated architecture that enables a unified<br />

platform with end-to-end instance capabilities, empowering standardization, governance, and security.<br />

Solution architecture<br />

B2B as a hub assumes that it is acting both as inbound and outbound gateway sharing the same<br />

configuration for both directions. Trading partners are connected via inbound listening channels and<br />

trading partner channels for delivery. In the message exchange process, B2B is responsible for<br />

identifying both the sender and recipient(s) of the message, identifying the message type and verifying if<br />

the sender is active to send such type of message, if the recipient is able to receive it and in which<br />

format it is able to. Message validation and parsing (from raw to XML) for inbound messages and<br />

message construction (from XML to raw) for outbound are also performed on B2B domain.<br />

The host trading partner will be the virtual receiver of all incoming documents and the virtual sender of<br />

all outgoing documents eliminating any point to point relation between trading partners and<br />

documents. All of this consolidates the possibility of document normalization, allowing the definition of<br />

message classes. This facilitates the usage of common objects between message types and formats<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 16


implemented in a canonical model eliminating point-to-point transformations and allowing putting in<br />

place a mechanism of global mappings from the message format to canonical structure and from<br />

canonical structure to the message format.<br />

A native integration between Oracle B2B and Oracle <strong>SOA</strong> SCA allows covering all the necessary<br />

requirements. In the picture bellow it’s shown a correspondence between components domains and<br />

functionalities succeeding the message processing timeline.<br />

Apart of the functionalities mapped to B2B and <strong>SOA</strong> SCA, its integration across the <strong>SOA</strong> platform allows<br />

to naturally implementing an end to end process tracking and exception handling having all exceptions<br />

being delivered to SCA to be handled in properly. In this case in particular, the solution is covering<br />

acknowledge to the sender that the message failed and the reasons behind the exception. This is an<br />

extremely valuable solution feature, since most of the exceptions are typically generated from invalid<br />

documents. This allows the sender to correct and fix the messages interactively reducing the time<br />

needed to implement such corrections.<br />

This is also helps the customers to fit to the market standards reducing custom made message<br />

definitions.<br />

Inbound<br />

Transport callouts are assigned to Inbound/Outbound B2B channels responsible for parsing the<br />

envelope to a B2B Internal Properties native structure. Then, two possible paths can be followed for<br />

document parsing:<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 17


Native xEngine used for supported documents<br />

Document Callouts for custom documents processing<br />

This functionality offers the possibility to implement custom classes to deal with document types that<br />

are not covered out-of-the-box. In this implementation, a custom parser was implemented to generate<br />

XSD and JAVA classes from standard language Augmented Backus–Naur Form i (ABNF) that can be<br />

associated as B2B Document Callout to dynamically execute parsing, construction and validation of<br />

documents. Please, bear in mind that a good architecture of this callouts is paramount to guarantee full<br />

performance answer when processing such documents.<br />

SCA Core processing<br />

The message is delivered via B2BAdapter to a composite and so entering the core domain of the<br />

solution. It is then in this domain that the message is handled and all the necessary core functionalities<br />

are provided:<br />

<br />

<br />

<br />

<br />

<br />

Mapping from message type structure to canonical structure. Normalizing the message allows to<br />

reuse functionalities that become agnostic to every different message type to be processed. Those<br />

mappings are implemented using XSLTs that are read dynamically from the MDS<br />

Business rules are verified and deliver an outcome list of functionalities that affects the message<br />

exchange processing<br />

The message is orchestrated to the different core functionalities guided by rules<br />

Communication with the B2B repository for enrichment and operations using the API provided<br />

The message is mapped from canonical structure to the message type structure and delivered via<br />

B2BAdapter to B2B<br />

Outbound<br />

Similar to the inbound. the message and envelope are constructed using the xEngine or Document<br />

callout and delivered to the final recipient using the configured trading partner channel.<br />

BAM Integration<br />

The integration between the components and BAM is established on the B2B side by native integration<br />

based in Advance Queue and from <strong>SOA</strong> SCA via sensors.<br />

Exception Handling<br />

The exception handling implemented transversally allows end-to-end coverage of exceptions. B2B<br />

exceptions are communicated natively to a SCA via B2B exception handling queue. EDN infrastructure<br />

together with B2B Exception handling and <strong>SOA</strong> Fault Handling Framework is used for exception handling<br />

purpose guaranteeing 100% message reliability on the platform.<br />

What about performance<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 18


For performance, a full implementation of the message processing without the need to set any database<br />

connection was defined leveraging all the configuration and persistence on the Oracle <strong>SOA</strong> Infra; This<br />

significantly reduced the interactions with the DB.<br />

Cherry picking the components to reduce dehydration and persistence allowed to maintain reliability<br />

and adequate performance. On composites side a one-way-delivery policy exchange pattern was<br />

defined as a core pattern allowing the composites to be fine-tuned in order to reduce the persistence<br />

and improve performance.<br />

Since B2B and <strong>SOA</strong> Suite SCA were running in the same domain, the integration adapter between B2B<br />

and SCA was configured to use in-memory methods; a very effective option in terms of performance and<br />

reliability. Other options as JMS or AQ can be used in case B2B and <strong>SOA</strong> are not running in the same<br />

domain.<br />

Bottom line<br />

This was a demanding project but represents an important challenge for a platform that excels in all of<br />

the full capabilities of Oracle B2B. It was a winning strategy since most of core functionalities were<br />

presented and thanks to a close collaboration between implementation team and Oracle’s Product<br />

Management and Development teams elevated B2B to a more complete solution meeting recent<br />

market demands.<br />

Success Factors:<br />

<br />

<br />

<br />

<br />

<br />

Standardization of messages supported by the platform permitted reduction of costs compared to<br />

custom tailor made messages oriented solution<br />

Reducing consumption of invalid messages allowed freeing up of physical resources resulting in a<br />

more scalable platform targeted for a greater return on investment<br />

Flexibility became key and the users are now empowered using graphical tools for provisioning new<br />

documents definitions using Oracle B2B Document Editor and XSLT to perform the canonicalization<br />

of those messages<br />

Bringing standardization and normalization on the messages allowed the customer to agilize the<br />

process of onboarding and reduce costs, providing simultaneously better service to their clients<br />

The platform is 100% Cargo-XML ready – IATA is pushing to use this format rather than old<br />

fashioned CIMP standard; an IATA Cargo-XML Task Force initiative now exists to force this move<br />

Final remarks<br />

Access all of these Oracle B2B functionalities on Oracle <strong>SOA</strong> Suite 12c or, for the version 11g, by<br />

downloading and installing the <strong>SOA</strong> bundle Patch 19190139 11.1.1.7.5 or the merge patch 18952479 via<br />

My Oracle Support.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 19


For more details and guidance on how to use some of this B2B functionalities feel free to have a look at<br />

contents in one of our blogs: http://fusionbpmsoa.blogspot.co.uk/ Article title: Oracle <strong>SOA</strong> Suite/B2B as<br />

a Critical Mission Hub for a High Volume Message Use Case<br />

Bruno Neves Alves<br />

Company: eProseed - www.eproseed.com<br />

Partner, Technical Director - Member of the CTO Office – eProseed UK<br />

Bruno has been working with Oracle Fusion Middleware technologies for 10<br />

years across Europe and South America, holds several Oracle certifications<br />

and is deeply experienced as <strong>SOA</strong>/BPM Senior Consultant, Solution<br />

Architect, Team Leader and Pre-Sales. Currently he performs the role of<br />

Technical Director as part of the CTO Office and Partner of eProseed UK.<br />

He is experienced in the international delivery of large & complex full<br />

<strong>SOA</strong>/BPM projects and holds the capability to act as architect defining reference architectures and best<br />

practices guidelines for <strong>SOA</strong> implementations. Furthermore, he is also speaker in different Oracle events<br />

and has been delivering training all over the world on Oracle University behalf.<br />

Contact: Blog LinkedIn Twitter<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 20


ADF Runtime Interface Generator for BPM Human Tasks<br />

Abstract<br />

Oracle Fusion Middleware (OFM) is a leading business innovation platform that enables enterprises to<br />

create and run agile intelligent business applications while providing a wide range of features. These<br />

allow operational efficiency and agility during process development time, in doing so organizations can<br />

reach process quality in a faster and improved way.<br />

OFM platform includes a wide range of tools and technologies in order to satisfy different needs. In our<br />

case we have made use of two important technologies BPM, to streamline customers’ business<br />

processes, and ADF, that simplifies development by providing out-of-the-box infrastructure services and<br />

visual and declarative development experience.<br />

In what concerns BPM technology, human tasks activities are an important player regarding efficiency<br />

and effectiveness since it enables to model an easy interaction with the end user in a BPM process.<br />

The visual and declarative experience of ADF allows us to create these human tasks in two ways. The<br />

first approach is to use the out-of-the-box option to auto-generate the Human Task form. Secondly by<br />

manually creating UI pages as the number of human task forms designed.<br />

The first approach will generate as many, separate, projects as human tasks, the latter will create as<br />

many user interface pages as human task forms. Based on these assumptions we have developed an<br />

ADF custom library that generates, at runtime, the human tasks interface. We have achieved this by<br />

using only one task flow, decreasing our development time significantly.<br />

Complementarily to this task flow we implemented a java library that creates an abstraction layer of the<br />

BPM interactions. In this library we added some processing of the human task payloads, and provide<br />

basic caching of services and user contexts. This mechanism has proved us that having one single<br />

interface can really decrease development time of new processes at least 85.7% as well having costeffectiveness<br />

in hours. In this article, understand how we implemented our human task interface<br />

generator in major customers on main business areas such as Retail, Finance and Energy.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 21


Introduction<br />

The projects that we have developed in Oracle BPM have plenty of interaction with the use of human<br />

tasks and the options we have for its development can bring a huge complexity by having several<br />

projects, or several user interface pages, to manage.<br />

Develop once reuse often has always been our motto when developing with Oracle ADF, and based on<br />

these assumptions and in our knowledge in BPM’s middleware we focused our efforts on centralizing in<br />

a single interface, Human Task Generator (HTG), all human tasks that we would generate. On this single<br />

interface we are able to display whichever ADF faces components offer, with dependencies between<br />

them, process the human task with custom or system actions, enable or disable user interaction based<br />

on permissions, and display process information as well as help topics so the user can be provided with<br />

context.<br />

In order to achieve this goal we developed our HTG based on a custom made library (BpmLib) that<br />

abstracts BPM’s middleware java classes. In our BpmLib we expose all the needed methods to get<br />

human tasks’ payload, replying actions, and so on.<br />

In the next chapters of this article, we will provide in more detail how we have implemented our HTG as<br />

well as the BPM library.<br />

Architecture<br />

Our HTG was engineered based on the convention that it should be reusable and extensible<br />

interchangeably of the aplication, project or even customer who will use it, so that if our clients<br />

requirements change as well as the application target we could easily adjust to new requests.<br />

We divided our implementation in three layers, (1) Data layer, (2) Business Layer and (2) View Layer, as<br />

shown in Figure 1.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 22


Figure 1 – HTG Architecture<br />

The Data Layer encloses two levels of information: BPM’s data in which BPM Suite resides on, and the<br />

custom made data model which supports the customers’ business logic. In this last case the amount and<br />

type of information depends on each customer. For instance, in one of our clients we did not have the<br />

necessity to implement any type of data logic, while in other we had a fairly complex database model.<br />

The Business Layer clusters and abstracts the features and requirements of the Human Task Generator.<br />

Our BpmLib Library collects the data for each process and their related human tasks through BPM’s<br />

middleware API and exposes it to be consumed by the Model and/or Application Module applications’<br />

as showed in Figure 1. In no case do we bypass BPM’s middleware API to directly access BPM’s data in<br />

the data base. By following this rule we protect our code of any change that may occur in BPM’s data<br />

structure in following releases of oracle’s BPM product. The Model application exposes data through<br />

View Objects. The Application Module application clusters it and exposes them. Here single methods<br />

are also made available to the View Layer.<br />

The View Layer consumes the methods and View Objects exposed by the Business Layer and display data<br />

through the Human Task Generator application. The HTG has the capability to be reused by different<br />

types of environments, for example: (1) ADF applications, (2) ADF Mobile Browser applications, and (3)<br />

MAF applications. Depending on the application target, you may choose the HTG interface to use. Each<br />

one is an application deployed as a Shared Library to allow isolation and reusability providing two<br />

immediately advantages: (1) is available to be deployed as a shared library to any Weblogic Server, and<br />

(2) can be incorporated in any final ADF application.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 23


Custom BPM Library – BpmLib<br />

Looking in more detail to the BpmLib component, it is a java library that is responsible for all the calls to<br />

the BPM API, and returning our custom data types, creating an abstraction layer over the BPM API. It<br />

also has other functions like caching and preprocessing data for the ADF interface generation.<br />

Creating an abstraction layer has all the normal advantages, and in our case have helped us to expose<br />

custom methods in the way we needed them in order to achieve our final goal. The API is very powerful,<br />

allowing all kinds of interactions with the underlying engines. But since we only needed a subset of<br />

those functionalities that meant that there were many options in the API that we didn’t need. We used<br />

the BpmLib to hide those options, for instance when querying processes and tasks the API allows us to<br />

define which columns we want to be returned. This library "hides" that functionality and always returns<br />

the same columns. Another example is the use of flex fields on human tasks. Since we return our own<br />

custom made classes we already include in them the business data that’s stored in the flex fields so that<br />

the upper layers don’t have to be concerned with the origin of the data. Using our own classes also<br />

allows us to flatten the class structure, simplifying access to the other fields.<br />

Instantiating the service objects of the API is a heavy operation and as such we cache those objects.<br />

However this raises a problem, this library is running on a different managed server than the <strong>SOA</strong> and<br />

BPM Suite. When the <strong>SOA</strong> managed server is restarted, the connection becomes invalid, and all calls to<br />

the API throw a javax.ejb.EJBException. We had to include a mechanism to catch those exceptions and<br />

invalidate the service cache. On the other hand, since all managed servers are clustered, we did not<br />

need to account for unavailability of the <strong>SOA</strong> managed server. Given that in the case of unavailability of<br />

the <strong>SOA</strong> managed server most of the functionality would be unavailable anyway, that was not a<br />

requirement.<br />

Other cached data is the security contexts of the users. Users are authenticated by the ADF<br />

infrastructure, but with that information we then need to create the security contexts that the BPM API<br />

uses. Since this creation is also a heavy operation we cache these contexts. However we had to be<br />

careful to not create vulnerabilities that would allow a user to use the cached context of another. We<br />

also had to invalidate each entry regularly to allow new security definitions, like group and role<br />

membership changes, to be picked up.<br />

Regarding the automatic generation of human tasks interface, this library is responsible for fetching and<br />

preprocessing the payload of the tasks so that ADF layers can generate the interface.<br />

On the BPM side we define the task payload using not only the base XSD types like string and date, but<br />

also other custom types, ranging from generic types like text to indicate to the interface generator that<br />

the field should be rendered has a text area, to other, more business specific types, like account, which<br />

the generator knows how they have to be rendered. This also includes types that have to be rendered as<br />

several controls. These type definitions are deployed to MDS allowing us to share them across<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 24


processes. So, as we implement more and more processes, the number of new types for each new<br />

process rapidly decreases allowing us to reduce implementation complexity and times.<br />

Then on the BpmLib we created our own java class representing a payload item, containing the name of<br />

the item (a key to a resource file), its value, type, if it is editable or read only, and if it is visible. Lastly we<br />

expose two methods:<br />

<br />

<br />

getTaskPayload: for a given tasknumber returns a list of payload items;<br />

updateTaskPayload: for a tasknumber and a Map updates the task<br />

payload of the task.<br />

GetTaskPayload Method<br />

The getTaskPayload method starts by calling the following code:<br />

ITaskMetadataService.getTaskDefinition(context,task).getWorkflowConfiguration().getPayload().getMessageAttribute();<br />

It returns a list of MessageAttributeType. Each MessageAttributeType represents one entry of the task<br />

payload that we see on the .task file. While this gives us some information (name, type, and if it is<br />

updatable) it is not enough, so we need to also get the actual schema of the payload. This schema is<br />

available on the MDS, and there are several ways to access it. We chose to use the URL<br />

http://[host]:[port]/soa-infra/services/[partition]/[composite]/[path_to_file]/[name_of_task]Payload.xsd<br />

We can feed this url to the XSDBuilder like<br />

XMLSchema schema = new XSDBuilder().build(url);<br />

and get an object representing the payload. From here is just a matter of iterating<br />

MessageAttributeType list and for each item get the corresponding XMLElement of the payload and<br />

build our own PayloadItem object to return.<br />

UpdateTaskPayload<br />

The updateTaskPayload method receives the values to update in a Map where the String<br />

(key) is the name of the payload item, and the Object (value) is its value. The actual class of the Object is<br />

dependent on the type of the payload item. For simple types it's the closest equivalent in java to the<br />

type, for example a String, an Integer, or a Date. For complex types it's a String with the XML value that<br />

needs to be stored. It starts by calling the Task.getPayloadAsElement() method to get an XMLElement<br />

with the current payload. Then it also gets the XMLSchema in the same way as the getTaskPayload. This<br />

is needed to know the type of each payload item. It then updates the XMLElement with the values<br />

passed in the parameter and calls the ITaskService().updateTask(context, task) method to save the<br />

changes.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 25


Human Task Generator<br />

The Human Task Generator (HTG) is implemented on the basis of the previous layers, Data and Business<br />

Layer, and centralizes in a single interface all the possible human tasks forms from all feasible BPM<br />

Processes to be implemented.<br />

In order to achieve our goal we divided our HTG Task Generator into smaller and self-contained<br />

modules, each one with their own specific contribution. The modules are: (1) HTG Transformation<br />

Model Engine, the core of the engine where human task’s payload are transformed so that can be<br />

recognized by the interface’s page, (2) HTG Declarative Components, ADF declarative components to be<br />

reused and show data in a particular manner, (3) HTG Generic Task Attributes Bindings, the binding of<br />

the human tasks attributes to the page, (4) HTG Generic Task Attributes Validations, definition of<br />

attributes validations, such as conditional required fields and data validation on fields, and finally (5)<br />

HTG Generic Task Attributes Conditional Visibility, fields visibility based on value changes of specific<br />

attributes during user processing the task.<br />

HTG Transformation Model Engine<br />

The core of the engine where human task’s payload are transformed are located at the Application<br />

Module in the Business Layer, as depicted in Figure 1. Here we expose the ‘getHumanTaskPayload’<br />

method as a class available for clients.<br />

We established our core engine here due to the following reasons:<br />

The ‘getHumanTaskPayload’ method is exposed in the application module and<br />

therefore can be invoked independently of the targeted platform (ADF, ADF Mobile<br />

Browser or Mobile Application Framework);<br />

Deployed as shared library to any Weblogic Server;<br />

Any change made in this module doesn’t affect the upper layer and can be deploy as<br />

demand since the contract doesn’t get broken;<br />

Proximity with BpmLib.<br />

During human task’s payload transformation we are able to support two types of fields: Simple and<br />

Complex. Simple types are single ADF components such as input text, select one choice, or input date as<br />

well as many others. Complex types are custom created components that encapsulate two or more ADF<br />

components. For instance, search field that is the combination of an input text and a button, or a<br />

custom address component as depicted in Figure 2, where we have an arrangement of several<br />

components into a single custom Address component.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 26


Figure 2 - Address Complex Type<br />

Our HTG transformation model Engine is structured on java classes to represent human tasks attributes.<br />

The java classes we have created for that purpose are: HumanTaskAttribute,<br />

HumanTaskAttributeFacade, HumanTaskPayload. Their relationship can be viewed in Figure 3.<br />

Figure 3 - HTG transformation model Engine Java Classes<br />

HumanTaskAttribute java class represent each attribute of the human task payload regardless of being<br />

based on a primitive type, simple type or even complex type. In those cases in which the attribute is a<br />

complex type, each XSD element is represented as a HumanTaskAttribute. The variables we have<br />

defined for this java class are:<br />

<br />

<br />

<br />

<br />

<br />

<br />

name – internal attribute name. If the attribute is a complex type the name is the<br />

concatenation of human task’s attribute name plus the name of the element inside the<br />

XSD.<br />

value – the value the attribute is to be set.<br />

type – contains the type of the attribute, i.e. STRING for string attributes, INTEGER for<br />

integer attributes, and so on. For complex types the type is similar to XSD name in order<br />

to be easily recognized, i.e. ADDRESS for attributes based on address XSD.<br />

isReadOnly – true if the attribute is not editable, otherwise false.<br />

isRequired – true if the attribute is mandatory, otherwise false.<br />

isHidden – true if the attribute must not be displayed on the interface, otherwise false.<br />

This type of attributes behaves like auxiliary variables.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 27


isVisible – true if the attribute should be visible, otherwise false. This variable is useful<br />

for setting conditional visibility of the attributes on the interface.<br />

HumanTaskAttributeFacade java class encloses all attributes of each human task payload’s attribute,<br />

regardless of the type (primitive, simple or complex). In those cases where the attribute is based on a<br />

complex type this java class has as many HumanTaskAttributes as elements in the XSD. In the other<br />

cases, primitive and simple attributes, this class has only one HumanTaskAttribute attribute. This<br />

situation can be viewed in Figure 3. The variables we have defined for this java class are:<br />

<br />

<br />

type – contains the same value as the attribute type in HumanTaskAttribute java class.<br />

This variable exists only for code simplicity reasons on later data access.<br />

attributes – represents the list of HumanTaskAttributes (List).<br />

For this same java class we have defined four methods:<br />

<br />

<br />

<br />

<br />

getValue – get human task’s attribute value based on attributes internal name. If<br />

internal name doesn’t exist a NULL is returned.<br />

setValue – set the new value for attribute’s internal name.<br />

hasKey – returns true if human task’s internal name exists, otherwise returns false.<br />

getValues – get all human task payload attributes. The returning value is a java.util.Map<br />

where the Key contains the attribute internal name and the Value the value of the<br />

attribute.<br />

Regarding HumanTaskPayload, this java class encloses all human task payloads’ attributes regardless of<br />

its attributes complexity (primitive, simple or complex type). This java class has the following variable:<br />

<br />

humanTaskPayloadItems – gathers all data of human task payload attributes.<br />

For this same java class we have defined three methods that are based on HumanTaskAttribute’s<br />

methods:<br />

<br />

<br />

<br />

getValues – get all human task payload attributes. The returning value is a java.util.Map<br />

where the Key contains the attribute internal name and the Value the value of the<br />

attribute.<br />

getValue – get human task’s attribute value based on attributes internal name. If<br />

internal name doesn’t exist a NULL is returned.<br />

setValue – set the new value for attribute’s internal name.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 28


In addition to previous java classes we have two more with no less importance HumanTaskUtilities and<br />

HumanTaskGeneratorAMImpl. The first one is a utility class that helps parsing the XSDs’ complex types<br />

while the second one is the implementation class of the “HumanTaskGenerator” application module<br />

where the method “getHumanTaskPayload” is exposed and returns all human task payload attributes<br />

after transformation.<br />

The java class HumanTaskUtilities has the following methods to perform the transformation:<br />

<br />

<br />

isComplexType – true if the attribute is complex, i.e. attribute based on a XSD,<br />

otherwise false.<br />

typeHasDropDownValues – true if the attribute is based on a XSD and one of its<br />

elements’ name is prefixed with “ddl”, otherwise false.<br />

During iteration over human task payload attributes returned by BpmLib the type for the current<br />

attribute is determined. Depending on its type one of the following methods is called:<br />

<br />

<br />

<br />

addSimpleTypeAttribute – If the attribute is simple or primitive then this method is<br />

called. In this method the variables of HumanTaskAttribute and<br />

HumanTaskAttributeFacade java classes are set, and then added to the top level class<br />

HumanTaskPayload.<br />

addComplexTypeAttribute – If the attribute is complex then this method is called. In this<br />

method we perform the strip of human task attribute’s XSDs in order to get its<br />

elements, set HumanTaskAttribute and HumanTaskAttributeFacade java classes<br />

variables and add them to the top level class HumanTaskPayload.<br />

addDropDownValuesToAttribute – If the attribute is complex and the current XSD<br />

element being parsed has the prefix “ddl” then this method is called. In this method an<br />

extra HumanTaskAttribute entry on the overall structure (Figure 3) is created in order<br />

to store the list of items for the control.<br />

HTG Declarative Components<br />

Declarative components play a major role in showing the same type of data in a desirable layout.<br />

Regarding HTG the declarative components are important for Complex type’s fields available in human<br />

tasks’ payload. By creating this type of components we have gained the following advantages:<br />

Make use of the primitive ADF Faces components;<br />

Define custom behavior logic for each new declarative component, for example during<br />

value change events, etc., of the primitive ADF Faces components;<br />

New declarative components can be created as needed without interfering with the<br />

others.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 29


Deployed as shared library to any Weblogic Server.<br />

The universe of declarative components already developed for a generic target audience is depicted in<br />

Error! Reference source not found..<br />

Table 1 – HTG Declarative Components<br />

Declarative Component<br />

Image<br />

Address<br />

BetweenDates<br />

SearchModal<br />

Our experience tell us that many other declarative components are able to be developed with different<br />

levels of complexity depending on each customer needs to display data.<br />

HTG Generic Task Attributes Binding<br />

The HTG is implemented with a single taskflow that encapsulates all logic defined for the human tasks<br />

and is responsible for generation of the components at runtime.<br />

The following diagram represents the execution flow that is performed in our HTG taskflow.<br />

Input<br />

Parameters<br />

Preprocessing<br />

Runtime Component<br />

Design<br />

Our HTG module is defined by a set of input parameters. These input parameters are used to determine<br />

which human task to show. Then a preprocessing is done in order to: (1) get the human task payload<br />

based on our custom made BpmLib library and (2) determine if the user that is trying to acquire the task<br />

has permissions to interact with. After this two previous steps are completed each human task attribute<br />

is rendered according to its type.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 30


The generated human tasks have system and custom actions. System actions are equal for all tasks and<br />

are those available in BPM Workspace, the latter are defined for each task during process development.<br />

Regarding the last step of our execution flow, Runtime Component Design, we have developed a task<br />

flow for rendering the human task attributes. The task flow is implemented as depicted in Figure 4.<br />

Figure 4 - HTG Payload Task Flow<br />

All starts by getting human task’s payload attributes with previous transformations already done. Then<br />

it’s time to set attributes visibility. This kind of visibility is related to attributes conditional visibility, i.e. if<br />

there is any attribute that its visibility is based on another attribute’s value then it is defined at this<br />

moment. The next step is about getting the values to populate the selectOneChoice ADF Faces<br />

component. Last but not least, the HTGPayload fragment is responsible for rendering all human task<br />

attributes from any possible Human Task, as shown in Attachment 1.<br />

Note: This task flow may and can be enhanced for those cases you have an ADF faces control where you<br />

need to search information in modal in order to set human tasks attributes values.<br />

In HTGPayload fragment an iteration over all human task payload attributes is performed and<br />

depending on its type it will be rendered by one of the underlying components available from the set of<br />

components inside the “af:foreach” ADF faces component. Any new component needed should be<br />

putted here.<br />

Each component is populated based on the data structure previously presented to represent all human<br />

task payloads’ attributes regardless of its complexity. For more detail about how to assign components<br />

properties you can find an example here.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 31


HTG Generic Task Attributes Validations<br />

In regard of task validation we have three types of validations:<br />

Simple Component level. For example: input fields for numeric types only.<br />

Custom Component level. For example, dependent fields in a custom component.<br />

Task submission level. For example, submission of the task form with validation rules for<br />

individual components that cannot be filled.<br />

In what concerns the first type of validation, Simple Components, it is defined in “validator”<br />

components’ property, as depicted in Figure .<br />

Figure 5 - HTG Component Validation<br />

In order to centralize all of this type of validations we have created “ValidatorsHTG” java class. This class<br />

is instantiated with session scope in “Managed Beans” tab of faces-config.xml file. In Figure 5 are shown<br />

two component validations of two different types in “ValidatorsHTG” java class.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 32


Figure 5 - Validators HTG Java Class<br />

Regarding validation for Custom Components, this can be done in two ways: (1) in the “validator”<br />

components’ property of the declarative component, basic validation, or (2) in custom classes for more<br />

complex validation, for example, imagine that Address declarative component is only valid if “Country”<br />

field is filled as well as “Address” and “Postal Code”, otherwise an error message is raised to the<br />

frontend. For this kind of behavior we have developed “HTGComplexTypesValidation” java class where<br />

all generic validations will be available for future reuse. In Figure 6 is shown the Address complex type<br />

validation.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 33


Figure 6 - Address Complex Type Validation<br />

This approach encloses components behavior and complexity in one single place and therefore<br />

promotes more and better reuse.<br />

Finally, validation at task submission reuses complex types’ validations as well as any other validation.<br />

The developer has full freedom and control to do any validation for any human task of any BPM process.<br />

Validations engine is structured as depicted in Figure 7, where “ProcessToValidateA” and<br />

“ProcessToValidateB” are java classes of real future BPM processes.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 34


Figure 7 - HTG Validation Java Classes Architecture<br />

HTGValidations (Figure 8) is the top level java class called by the user just before replying to the human<br />

task. The human task is replied if and only if all attributes (simple or complex attributes) and overall<br />

dependencies between attributes are valid. The method “validateHumanTask” is the main method<br />

called to perform the validation of processes human tasks.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 35


Figure 8 - HTGValidations Java Class<br />

Human tasks’ validation is made inside of each process java class created for the purpose as shown in<br />

Figure 8. For example, inside of “ProcessToValidateA” java class, Figure 9, human tasks’ for this process<br />

will be validated.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 36


Figure 9 - ProcessToValidateA Java Class<br />

HTG Generic Task Attributes Conditional Visibility<br />

There may be cases in which certain human task attributes visibility is based on another attribute’s<br />

value. Conditional visibility has two setting points: (1) one on entering the “htg-payload-flow.xml” task<br />

flow (Figure 4), and (2) other in any value change listener of any ADF Faces component or declarative<br />

component.<br />

Regarding the first setting point, before human task is displayed is needed to check attributes<br />

conditional visibility, and why Imagine the human task has already been edited before and there is a<br />

dependency between attributes. In this case when reentering in the human task is necessary to gather<br />

the value of the attribute that causes the other attribute to change its visibility.<br />

Human task conditional visibility is developed so that each human task of each process has its own<br />

conditional rules of visibility. This approach promotes flexibility to define attributes visibility.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 37


Real World Benefits<br />

In this chapter we pretend to answer some basic questions: (1) how useful our approach can be in the<br />

development process of a new application, (2) how reusable can it be There are dependencies on<br />

customer and his business area, and (3) if there is a real world benefit spending more time at the<br />

beginning implementing a generic methodology in spite of following the regular way Oracle developed<br />

its product.<br />

(1) How useful our approach can be in the development process of a new application<br />

Since we developed our HTG in well-defined building layers (Data Layer, Business Layer and View Layer)<br />

where each one communicates with the nearest layer, they can be developed independently of the<br />

others. Even more, if there isn’t broken contract on methods of above layers.<br />

Each project inside of each layer is available as a “Shared Library” and therefore deployed independently<br />

to the Weblogic server. This approach takes the same advantage, as described before, along with not<br />

being necessary to deploy all the projects to the server if only one has really changed.<br />

When a new application is ready to be developed, independently of the business area, and needs to<br />

provide Human Tasks interfaces, the developer just imports the library into the application and easily<br />

drag-and-drop the HTG wherever is needed. It behaves as a regular ADF Faces component.<br />

The user will be facing a standardized interface for all human tasks independently of the process.<br />

Nevertheless, the developer will have fewer interventions regarding layouts, forgotten fields, etc.., and<br />

therefore lower error-prone probability.<br />

(2) How reusable can it be There are dependencies on customer and his business area<br />

Here we do a study on the implementation of the HTG in the three different customers of different<br />

business areas provided us with insight of the level of reusability of our engineered solution. The next<br />

table (Table 2) agglomerates the data by customer’s business area, as well as the total number of<br />

processes and human tasks created using HTG versus human tasks created from scratch.<br />

Table 2 - HTG Percentage of Reusability<br />

Retail Finance Energy Total<br />

Nº Processes 36 9 3 48<br />

Nº Human Tasks 96 34 5 135<br />

Human Task Generator<br />

(HTG)<br />

81 34 5 120<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 38


Custom Human Tasks 15 0 0 15<br />

Percentage of Reusability 84.4% 100% 100% 88.9%<br />

Another overall perspective of the previous results can also be seen in the next graphic, Figure 10.<br />

Figure 10 - HTG Percentage of Reusability<br />

The previous table depicts the success of using our solution, in the banking industry the HTG, satisfies all<br />

customer needs. In the retail sector there is a great percentage of satisfaction, and finally in the last case<br />

the customer needs are satisfied but only a few small processes were implemented.<br />

One of the leading reasons for these results was our capability to be able to evolve Complex Component<br />

Types as the customer needed them, with the underlying validations for each component and the<br />

overall human task. The modularization of our HTG in different layers was another advantage since we<br />

never mixed business logic inside viewing data and vice-versa.<br />

(3) Is there a real world benefit spending more time at the beginning implementing a<br />

generic methodology in spite of following the regular way Oracle developed its product<br />

All our customers wanted their own custom made Workspace, integrated within a single application,<br />

with customized look-and-feel, and custom business rules associated both in the process and interface.<br />

Based on this starting point, in any situation we needed to develop a library to interact with the BPM’s<br />

middleware, the BpmLib. Once we developed our own library, and after some experiments regarding<br />

developing human tasks interfaces, we saw that developing a custom hand-made interface to generate<br />

human tasks was not so far away.<br />

After understanding all these facts we tried to realize the impact of a HTG would have. Therefore we<br />

made some tests to compare our HTG with generating human tasks interfaces using Oracle’s out-of-the-<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 39


ox approach. The results are based on our customers’ requirements and level of customization needed<br />

to achieve the same final results in both cases. The following results regard the development of each<br />

new human task interface (Table 3).<br />

Table 3 - Spent time setting a human task interface using HTG versus without using<br />

Spent time setting a<br />

human task interface<br />

without using HTG<br />

(In Hours)<br />

Spent time setting a<br />

human task interface<br />

using HTG<br />

(In Hours)<br />

Generate Interface (ADF Taskflow<br />

based on human task)<br />

Customize Interface (Create a new<br />

taskflow for each human task with<br />

clients customizations)<br />

0 0<br />

3 0<br />

Implement Validations 2 1<br />

Integration of the human task<br />

with the main application<br />

1 0<br />

Data submission 1 0<br />

Total 7 1<br />

As Table 3 depicts, using HTG takes less 6 hours developing each new human task interface,<br />

independently of the process.<br />

Another important conclusion is the cost-effectiveness that we took by using HTG instead of the regular<br />

approach. In the next table we present these results:<br />

Table 4 - Cost-Effective using HTG<br />

Using HTG<br />

Without using HTG<br />

Total human tasks which used HTG 120<br />

Total time spent to develop each 1 7<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 40


human task interface<br />

(In Hours)<br />

Total time spent to develop all<br />

human tasks interfaces<br />

120 840<br />

Cost-Effective (In Hours) 85.7%<br />

As you can see by using our engineered solution we were able to have a cost-effectiveness of 85.7%<br />

hours during our developments fewer interventions and therefore lowering probability of development<br />

errors.<br />

Conclusions<br />

Based on our experience in major projects in different industries, we engineered an accelerator to<br />

automatically generate the interfaces for the processes human tasks. This mechanism has proved to<br />

decrease implementation time at least 85.7%, and thus increasing productivity.<br />

In order to achieve our main goal we developed the HTG (Human Task Generator) based on a custom<br />

library, BpmLib, that abstracts the interactions with the BPM’s middleware. We followed the convention<br />

that HTG should be reusable and extensible interchangeably of the application, project or even<br />

customer.<br />

We structured our HTG in three layers: Data layer, Business layer and View layer, each one with a well<br />

define scope and purpose so that future changes or enhancements could be easily overcome.<br />

The entire module BpmLib, Model, Application Module and HTG is decoupled from the application<br />

business logic, and thus can be used in other BPM applications. Not only can the entire module be<br />

reused, but also its components independently (BPMLib, Model-AppModule).<br />

We have answered some important questions in detail, such as: (1) how useful our approach can be in<br />

the development process of a new application, (2) how reusable can it be depending on the customer<br />

and his business area, and (3) if there is a real world benefit spending more time at the beginning<br />

developing a generic methodology in spite of following the regular use of the product.<br />

In conclusion, this approach of developing a reusable module for human task generation is only feasible<br />

if at starting point we have the knowledge that there is a significant amount of processes/human tasks<br />

to be developed. Having in regard that after the module is developed every change is centralized<br />

allowing time saving in development achieving a better return of investment.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 41


Pedro Gabriel<br />

Pedro Gabriel is an ADF and BPM developer at Link Consulting, a<br />

Portuguese Oracle Platinum Partner. He is responsible for developing and<br />

architecturing ADF solutions for the retail and finance sector. He is also<br />

involved in BPM projects where he implemented well accepted solutions.<br />

Pedro Gabriel interests continue to focus on these technologies and<br />

spread his knowledge to different Oracle technologies. Before, he worked<br />

with Microsoft Technologies<br />

Contact: Blog LinkedIn<br />

Danilo Manmohanlal<br />

Danilo works at Link Consulting since 2010 and is one of the leading ADF<br />

architects. He is involved in enterprise-level BPM/ADF projects and has<br />

implemented solutions for the retail and finance sector.<br />

Contact: Blog LinkedIn Twitter<br />

Diogo Henriques<br />

Diogo Henriques is the BPM Technical Leader at Link Consulting, a Portuguese Oracle Platinum Partner.<br />

He has worked with Oracle BPM for almost 5 years, since 11.1.1.3 Beta, including a few large scale<br />

projects. Before, he worked with Oracle Workflow for 3 years.<br />

Contact: Blog LinkedIn<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 42


Attachments<br />

Attachment 1 - HTG Payload Fragment<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 43


In-depth look into Oracle API Catalog (OAC) 12c<br />

With the release of Oracle Enterprise Repository 12c another product was released. Oracle API<br />

Catalog 12c (OAC) allows you to build a catalog of your organization APIs. OAC provides a layer<br />

of visibility to those APIs so application development knows what and which one to use. OAC<br />

includes a simple metamodel for an API asset, automation to populate OAC, and the ability for<br />

users to search OAC for APIs and understand the details of the APIs to assess their fit in the<br />

user’s application.<br />

Installation<br />

I’m not going to bore you with the details about the installation by giving a installation guide. It<br />

took me about 40 minutes from scratch (excluding downlOERoad time). The steps are describes<br />

in the installation guide Oracle provides. OAC is part of the OER 12c installation jar, but can be<br />

licensed and installed, as an own managed domain, without licensing and installing OER.<br />

The steps to take on high level (from scratch):<br />

1. Download and install Oracle Database, Fusion Middleware Infrastructure 12c, Oracle Enterprise<br />

Repository 12c, RCU patch 18791727 and Weblogic patch 18718889 (these last two are<br />

important, else you can’t install OAC).<br />

2. Run RCU (oracle_common/bin/rcu.sh|bat) and create the OAC repository<br />

3. Run Weblogic Domain creation (weblogic/bin/config.sh|bat) and create a new which includes<br />

OAC.<br />

4. After installation and startup of weblogic and managed service you can find the OAC console at<br />

url: http://serverhost:8111/oac<br />

Note: if you harvesting from another weblogic server (like <strong>SOA</strong> Suite 12c), the weblogic patch<br />

should also be installed there.<br />

Taking the first steps<br />

When taking my first steps the official getting started guide can help you a lot. OAC has four<br />

high-level features. OAC collects services, it has a harvester which creates API assets in OAC.<br />

After harvesting you can add metadata to the API assets like description, tags and<br />

documentation. After harvesting and editing an API asset it can be published so it is visible for<br />

application development. Published APIs can be discovered and used through the API Catalog<br />

console and via the Oracle JDeveloper Oracle Enterprise Repository plug-in.<br />

Logging in for the first time<br />

After installing FMW & OAC 12c and starting the Weblogic server you can login into the<br />

provided OAC console (default) running at http://serverhost:8111/oac.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 44


OAC12c: Login to the provided console (admin / weblogic 1)<br />

The default username and password is admin / weblogic1. The first time you are asked to<br />

change the password.<br />

AOAC12c: First-time login needs password change<br />

After changing the password you will login into the console. The dashboard will be empty<br />

because no APIs are harvested yet. But when APIs are harvested they are listed at this page. On<br />

this page you can also navigate to “My APIs” which list the API you bookmarked.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 45


OAC12c: Empty dashboard after first-time login<br />

As admin, navigate to “Admin”, you can configure Users and Departments, control Sessions,<br />

change System settings and Import/Export the catalog. This blog will go in to the Admin<br />

features later on.<br />

OAC12c: Admin page for configuring users, departments, sessions and change system settings<br />

Collecting / harvesting services<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 46


The first activity is to harvest APIs into OAC. The harvester is used to populate OAC with API<br />

assets from <strong>SOA</strong> Suite and Service Bus or other deployed services. The harvesting process can<br />

be run from the command line or can be integrated into the build process. The latter can be<br />

used to automatically do the harvest at build time. Harvested API assets will get a “Draft” state<br />

and won’t be visible to developers yet.<br />

For this blog I will use the command line harvester. There are to types of harvesters; one for<br />

<strong>SOA</strong> Suite, OER & File-based assets and one for harvesting OSB. I will use the first harvester and<br />

use it with integrated <strong>SOA</strong> Suite 12c environment.<br />

OAC12c: Harvest assets using command line harvester<br />

For this blog I changed the HarvesterSettings.xml, which is decribed here, and added OAC en<br />

<strong>SOA</strong> server information, including projects to harvest.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 47


OAC12c: Change Harvester Settings in supplied XML configuration<br />

Doing it like this you don’t have to add any parameters to harvest.sh|bat. If you want to harvest<br />

a specific asset you can use the command line properties, for example another <strong>SOA</strong> composite.<br />

harvest.bat -remote_url localhost:7003 -remote_username weblogic -remote_server_type <strong>SOA</strong>Suite -<br />

remote_project ValidatePayment_rev1.0 -soa_partition default<br />

The result after running the harvest command should look something like on the image below<br />

(in preview mode).<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 48


OAC12c: Result of running harvest command (preview mode)<br />

View harvested APIs<br />

After harvesting you first asset(s) you can login the OAC console to see the result. Assets that<br />

are harvested will get the “Draft” status, thats why after logging into the OAC console again, no<br />

APIs are published and visible on the dashboard. Search on Service Type = Draft to view newly<br />

harvested APIs.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 49


OAC12c: Search on draft for freshly harvested APIs<br />

To see, edit and publish the API asset details click on the specific row. The details page opens<br />

which shows information about the asset like Type of Asset, Endpoint, Harvester properties and<br />

WSDL summary including namespace, porttype and methods.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 50


OAC12c: API asset details including endpoint and WSDL summary<br />

Besides the details you can perform some actions (from left to right):<br />

Link, toggle view, bookmark, edit & delete<br />

<br />

<br />

Link to details page: Get URL of API asset details page you currently look at and can share.<br />

Example:<br />

http://soabpm:8111/oac/index.jspassetid=50003&renderMinMaxButton=false&renderNextPre<br />

vButtons=false<br />

Toggle between tabs and view all: You can view the API asset details in tabs (tab per category)<br />

and view them on single page like displayed<br />

above.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 51


Add to My APIs: Click to bookmark API. After bookmarking API it is visible under MyAPIs page.<br />

Edit details: Page to edit API asset details. More about this below.<br />

Delete items: Delete the API asset from the repository.<br />

Add metadata to harvested API<br />

To add metadata or edit other details of an API asset click on the edit icon/button to open the<br />

Edit Asset page. On this page you can change the name, change the version, add keywords and<br />

descriptions, but also add a link to documentation URL and assign/upload an icon. To publish<br />

an API change the API status from Draft to Published. It is also possible to set the API active<br />

status from Active to Retired.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 52


OAC12c: On the Edit Asset page details like, keyword, description and version can be changed<br />

Publish a draft API<br />

To publish an API you just need to change the API status to published and saving the asset.<br />

On the overview page the API status is changed and the API details can be exported to Excel<br />

and PDF.<br />

OAC12c: API status changes when published<br />

When going back to the dashboard the recently published API is visible. When you click on the<br />

name of the API asset the user is redirected to the details page.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 53


OAC12c: Dashboard listing recently published APIs<br />

On both the dashboard as on the Asset detail page reviews are mentioned. The admin user<br />

can’t perform this action. For this we will create some new users.<br />

Sharing the APIs with other users<br />

After taking the first steps the APIs can be shared with other users. To do so new users can be<br />

added with specific roles. As admin user click on the “Admin” menu item and choose the Users<br />

section (selected by default). From this page new users can be created, you can search for users<br />

and edit & delete users.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 54


OAC12c: Users administration page<br />

Add, search, edit and delete users<br />

To create a new user click in the Users section on the Add User icon on the top-right of the page<br />

section. The Create New User page is displayed. The page is divided into three sub sections;<br />

user information, roles and departments. The user information section contains form fields for<br />

the username, password, real name and email & phone information. It is also possible to force<br />

changing the password and allow the password to never expire. A user can have one of four<br />

statuses; Active, Inactive, Lockout (after 3 failed logins) and Unapproved.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 55


OAC12c: Create new user – overview section<br />

The roles section gives the opportunity to give the user specific access. The admin role gives<br />

you access to harvest, edit & publish API assets and manage application settings liked described<br />

in this blog so far. The curator can harvest and edit & publish API assets and the developer can<br />

access / search published APIs.<br />

OAC12c: Create new user – roles section<br />

The department section gives the opportunity to add the user to a specific department.<br />

Departments is not more then just a filter of which users belong to that department. It is not<br />

necessary to add the new user to a department.<br />

OAC12c: Department Details<br />

To see user details and change user information or even delete a user go back to the Users<br />

section. To see user details click on the name of the user and you will be navigated to the User<br />

Details page. You can also search on department, role and status. The latter can i.g. be used if a<br />

user is lockout of there account. To delete a user just checked the box in front of there<br />

username and click on the Delete button.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 56


OAC12c: Search, edit or delete Users<br />

The User Details page shows the same sub sections; overview and roles & departments the user<br />

is assigned to. The interface is very universal throughout the application. On this page you can<br />

also switch to tabbed mode, one tab per sub section, and able to navigate to the edit page,<br />

duplicating the user (create new user with same roles and departments) or deleting the user<br />

from the repository.<br />

OAC12c: User details and actions (edit, duplicate and delete)<br />

Also create a user, developer1. with the Developer role.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 57


OAC12c: Developer User<br />

Switching user<br />

To switch to a different user you can sign out of the OAC console by selecting the “Sign Out”<br />

options under your user menu. Just click on the arrow on the right side of your name.<br />

OAC12c: Switching User by signing out of OAC console<br />

Logging in as Curator will give the same functions as an Administrator, but without the Admin<br />

tasks.<br />

OAC12c: Curator Dashboard<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 58


Logging in as Developer will give even less options. A developer can only search in published API<br />

and add APIs to there favorites.<br />

OAC12c: Developer Dashboard<br />

Adding an API to My APIs and reviewing the API<br />

Als user you can add APIs to you favorites (My APIs). To add a API to your favorites go to the API<br />

asset details page and add the API to My APIs by clicking the “Add this to My APIs” button.<br />

After adding it to My APIs the details page is update and shows how many times it is added<br />

(usage) in the past 6 months. Users that have added the API to there My APIs can review on the<br />

API asset.<br />

OAC12c: Added API asset to My APIs<br />

When you click on the “View Usage History” link a pop-up is opened which shows a graph with<br />

usage over past months and which users uses the API.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 59


OAC12c: API usage history<br />

To view all API that the user had added to My APIs the user van click on the “My APIs” menu<br />

item. The My APIs page shows all the APIs the user has added and gives the user the<br />

opportunity to view the details by clicking on the name of the API, to write a review about an<br />

API or to delete an API from the list.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 60


OAC12c: My APIs showing all added API and actions to review or delete a API<br />

To write a review about an API click on the first (review) icon on the right side of the APIs name.<br />

A pop-up is opened with a form that the user can use to submit a review. The user can give a<br />

rating and a comment (max 4000 characters). After submitting the review the page is<br />

redirected to the a page which displays all reviews.<br />

OAC12c: Submit a Review and viewing API reviews<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 61


OAC12c: Dashboard shows latest reviews<br />

Other administrator tasks<br />

View sessions<br />

The administrator can perform some other tasks that I didn’t discuss yet. On the Sessions<br />

section page all (active) sessions are displayed and an administrator can look into the details of<br />

the session. An administrator can also delete sessions, which means if a user is active in the<br />

console the user will be logged out.<br />

OAC12c: An administrator can view (active) sessions<br />

OAC12c: An administrator can view session details<br />

System settings<br />

An administrator can change a lot of setting to change the behavior of the OAC console. The<br />

system settings page is divided into four main sections; Functional settings, Server Settings,<br />

Enterprise Authentication and Import and Export settings (not the actual import/export).<br />

The functional settings sections contains settings for search results and printing details via PDF:<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 62


The server settings section contains settings for embedding HTML in asset details:<br />

The Enterprise Application section contains settings for connection to a LDAP server for user<br />

management:<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 63


The Import/Export sections contains settings for setting timeouts:<br />

Import / export repository<br />

The import / export of the repository can be done in the corresponding section, but instead of it<br />

being done in the web UI it uses java Webstart.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 64


My Verdict<br />

To conclude this blog post I will give my verdict about Oracle API Catalog 12c. In the last week I<br />

had some ups but also some downs. I started on my windows laptop and installed everything<br />

locally. At first everything seemed fine, I could harvest my first Asset, but after trying to view<br />

the details I got a error after another. In the days that followed I was helped by Oracle<br />

Development and in special by Mark Dutra, but we couldn’t figure out what the problem was. I<br />

think it has something to do with security settings and how the laptop is configured (domain<br />

wise).<br />

After creating a Linux VM and installed everything again I finally had success and the tables<br />

were turned. I really like the interface, it is very clean and uses a common workflow on every<br />

page. The use of a separate harvester (command-line or ANT task) is in one way a great<br />

solution, because you can use it in your already existing build process, but I missed the option<br />

to do this using the OAC console, you don’t always have access to use scripting.<br />

The harvested APIs are added as Draft and an admin or curator can edit the information and<br />

publish the API. This version is a great start with lots of information already, like the endpoint,<br />

WSDL/WADL summary including methods and message payload. But I miss the possibility to<br />

register dependencies between APIs. If API are harvested from one service the separate APIs<br />

are not linked to each other.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 65


Adding APIs to your My APIs and the possibility to write a review can be handy. The simple<br />

metrics tell you about the usage and who uses it which is already usefull, hopefully in the future<br />

more metrics will be available in OAC.<br />

As an administrator you can perform a lot of tasks using the UI. Adding users, looking at active<br />

sessions and import/export the repository. It worked fine on Linux, but on windows I had no<br />

result. Also the possibility to connect to an LDAP will make it much easier to add users and<br />

departments.<br />

Pros:<br />

<br />

<br />

<br />

<br />

<br />

<br />

Clean and easy UI with common workflow on most pages<br />

Harvest through command-line (run-time) or ANT (design-time build)<br />

Possibility to edit Assets and add documentation<br />

Review on API and give feedback when an API is not working correctly<br />

Metrics about usage<br />

A great set of administration tools<br />

Cons:<br />

<br />

<br />

<br />

Does not work well with Windows.<br />

Catalog features are still basic, no dependency viewer<br />

No online harvester, you can’t harvest via the OAC console<br />

Robert van Mölken<br />

Robert is a experienced Fusion Middleware / <strong>SOA</strong> developer for nearly 7<br />

years. He focuses in particular on building service-oriented business<br />

processes. He is mostly very good in IT technologies like Java / JEE, Oracle<br />

and <strong>SOA</strong>. Where his specialty is with BPEL, SCA, <strong>SOA</strong>P, XPath, XML, OEP, Java,<br />

JAX-WS, Advanced Queueing, and PL / SQL.<br />

Contact: Blog LinkedIn Twitter<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 66


Order to Cash Process Integration for Telecommunications<br />

Excerpt<br />

The Order To Cash Process Integration Pack (O2C PIP)is a packaged solution on top of the Application<br />

Integration Architecture (AIA). AIA is n Oracle <strong>SOA</strong> solution, designed to deliver building Blocks for<br />

Integrations (AIA Foundation Pack) or pre integrated Integration Solutions, the Process Integration<br />

packs .<br />

The O2C PIP is an important Integration Flow because it is the enabler of Oracle’s Telecommunications<br />

Business Support System (BSS) Order Management Solution, called Rapid Offer Design & Order Delivery<br />

(RODOD).<br />

In the following we will give a high level Introduction to RODOD , a short introduction to the Application<br />

Integration Architecture and a detailed description of the Order To Cash Process Integration Pack<br />

Rapid Offer Design & Order Delivery (RODOD):<br />

RODOD is a Telecommunications BSS Order Management Solution consisting of:<br />

– Siebel, OSM & BRM, which were all 3 acquired by Oracle acquired in the year 2006<br />

– Optionally a Product Master PH4C (Product Hub for Communications), even though RODOD can<br />

work without a Product Master. Ph4C is an Oracle E-Business Suite Instance<br />

– An out of the Box Integration Application Integration Architecture (AIA) with Process<br />

Integration Packs (PIPs) implemented in Oracle <strong>SOA</strong> with BPEL.<br />

• Master Data Management (MDM) PIP: Sending Product Data from Ph4C to Siebel, BRM<br />

(OSM), optional<br />

• Agent Assisted Billing Care (AABC) PIP: Providing BRM Customer Billing Information into<br />

Siebel, optional but usually implemented<br />

• Order To Cash (O2C) PIP: Integrating Siebel, OSM and BRM for the Order Flow<br />

– All Applications are used independently of RODOD, including AIA. Only the 3 listed Process<br />

Integration Packs are RODOD specific<br />

– RODOD can work without the MDM & AABC PIP but not without the O2C PIP<br />

In virtually any RODOD Implementation, You also find see an Enterprise Service Bus (for Example Oracle<br />

Service Bus) to connect RODOD to external Systems. In particularl OSM will need to talk to the Network<br />

System, Siebel will usually talk to Systems which render eg Client Information.<br />

RODODs equivalent on the Telecommunications Network side (Operating Support Systems) is Oracle’s<br />

Rapid Service Design and Order Delivery (RSDODO) consisting of OSM, Unified Inventory Management<br />

(UIM, Automated Service Activation Program (ASAP)& Oracle Communications IP Service Activator).<br />

RODOD as a Telecommunications Order management Systems supports three main functional areas<br />

with several Order Types.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 67


• Order Intake, eg in a Call Center, via<br />

Siebel. The Order Intake receives Status<br />

updates from the Provisioning and Billing<br />

Systems and eventually notes down,<br />

which Products a Client has purchased<br />

• Order Provisioning, that is talk to the<br />

network OSS (Operational Support Systems)<br />

to install the Product, via OSM. In case the<br />

Client needs physical Installations other<br />

Modules for scheduling engineers and<br />

shipping hardware will be used<br />

• Customer Billing , via BRM. The service<br />

usage of the Client is fed into BRM via Files,<br />

called Call Data Records. Depending on the<br />

Clients price plan, his bill gets accumulated,<br />

typically once per month<br />

The Order Flow over these Systems is facilitated via the Integration Layer, the so called the Application<br />

Integration Architecture Order To Cash Process Integration pack (AIA O2C PIP).<br />

Application Integration Architecture<br />

The Application Integration Architecture is a layer on top<br />

of Oracle <strong>SOA</strong> Suite offering building blocks to integrate<br />

Systems. O acle offers industry (e.g. Telecommunication,<br />

Manufacturing) process (CRM, HCM) and vendor<br />

(Oracle2SAP) Application Connectors and Generic<br />

Datamodels. T e AIA Foundation Pack reuses elements of<br />

the <strong>SOA</strong> Suite like BPEL, Adapters, Mediators and renders a<br />

library for the AIA PIPs.<br />

Customization and Development for AIA is done in<br />

Jdeveloper. The LifeCycle Workbench offers a Repository<br />

to look up and functionally design define AIA Services. The<br />

Composite Application Validation System (CAVS) allows<br />

testing AIA Composites. The Deployment Generator allows<br />

automation of deployments.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 68


AIA deploys Composites in Weblogic, which can be monitored in Oracle Enterprise Manager. The<br />

<strong>SOA</strong> Suite runs on a Database with specific Database Schemas, important Tables are the so called<br />

XREF Tables, where concepts common to Application like Orders, Accounts and Products are linked.<br />

The Metadata Service Repository holds AIA Artefacts like EBOs, EBSs, WSDLS etc.<br />

An important Concept of the Application Integration Architecture are the so called Enterprise<br />

Business Object. They offer a Generic Data Model, to which Concepts which are common to all<br />

Applications (Products Customer, Orders) can be easily mapped. AIA connects to Applications via<br />

adapters, called Application Business Connector Services, which are usually written in BPEL.<br />

AIA essentially connects to Applications, translates System specific messages to its generic Data<br />

model and organizes the message exchange with different technologies (Queues, Webservices) and<br />

Integration Patterns.<br />

An Integration layer needs to be able to map equivalent Concepts in different Systems to each<br />

other. This done via so called Cross references. Cross Reference, here XREF tables are a Construct<br />

from the Oracle <strong>SOA</strong> layer designed to map values for equivalent entities created in different<br />

applications. An XREF Table assigns a common global key to data objects from different applications,<br />

which need to be mapped to each other<br />

In RODOD the AIA layer uses such tables to map Siebel, OSM, BRM and PH4C identifiers and keys for<br />

Products, Customer and Orders.<br />

With an for Products existing in Siebel and BRM:<br />

• A customer wants to add an optional mobile phone internet subscription to his internet<br />

home service.<br />

• The Call Center Agent enters a change order to add mobile phone internet product to his<br />

existing home based internet subscription.<br />

• When the OSM order management sends a fulfillment order billing request to AIA, the O2C<br />

PIP looks up the cross reference based on the Siebel ‘Asset Integration ID’ to find the BRM<br />

service POID.<br />

• The O2C PIP then calls the correct BRM API with the correct arguments to add the product<br />

to the service in BRM<br />

Find a Schema listing the main Concepts with the example of Siebel and BRM communicating via the<br />

O2C PIP in RODOD.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 69


Enterprise Business Object (EBO):<br />

• standardized data model for common business objects<br />

Enterprise Business Service (EBS):<br />

• Receiving Generic Enterprise Message from Application Business Connector<br />

• Routing to the correct addressee<br />

Enterprise Business Flow (EBF):<br />

• Calling & Orchestrating Enterprise Business Services to fulfil a complex task like an orderflow<br />

Application Business Connector Service (ABCS):<br />

• transforming messages from application-specific format (Application Business Message ABM)<br />

to application independent format (Enterprise Business Message EBM)<br />

• Managing cross-referencing of instance identifiers, validating and enriching content (if required)<br />

• Invoking the Enterprise Business Service / Application Services<br />

• Most AIA ABCS are using BPEL (state full conversations, XSLT is used for transformation<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 70


O2C PIP<br />

The O2C AIA PIP connects RODOD (Siebel, BRM, OSM) via five flows:<br />

• Process Sales Order Fulfilment: Send Orders From Siebel to OSM COM<br />

• Synchronize Fulfilment Order Billing Account: Synchronize Customer Accounts between<br />

Siebel and BRM via OSM COM<br />

• Bill Fulfilment: Initiating Billing from OSM COM towards BRM<br />

• Provision Order and Update Fulfilment Order: Send Order from OSM COM (Fulfilment)<br />

to OSM SOM (Provisioning) to talk to the OSS Network Layer<br />

• Update Sales Order: Update Order Status from OSM COM (Fulfilment) back to Siebel<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 71


OSM is split up in 2 Instances, running on one or two Weblogic Servers:<br />

<br />

<br />

OSM COM / Fulfilment: orchestrates order tasks in the RODOD BSS Systems. It<br />

generates a plan, how the order should be executed and coordinates the calls<br />

OSM SOM / Provisioning: talks to the OSS Network Systems and coordinates the Order<br />

Provisioning downstream<br />

Note that the O2C can also synchronize Product Model Data. You can use O2C instead of the MDM PIP<br />

in case You plan to use RODOD without the Ph4C Product Master.<br />

O2C - Process Sales Order Fulfilment:<br />

Send Orders From Siebel to OSM COM. Siebel CRM creates an application business message<br />

(SalesOrderABM) with sales order details and enqueues the ABM in the AIA_SALESORDERJMSQUEUE<br />

queue.<br />

ProcessSalesOrderFulfillmentSiebelCommsJMSConsumer<br />

dequeue the ABM from the queue and passes it on to<br />

ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl<br />

ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl<br />

transforms the ABM into an enterprise business message<br />

(ProcessSalesOrderFulfillmentEBM) and routes it to<br />

ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer<br />

ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer wraps<br />

the EBM into OSM CreateOrder message format and enqueues<br />

the CreateOrder message into AIA_CRTFO_IN_JMSQ.<br />

The store and forward mechanism forwards the CreateOrder message from AIA WebLogic server to<br />

OSM WebLogic<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 72


O2C - Synchronize Fulfilment Order Billing Account<br />

Synchronize Customer Accounts between Siebel and BRM via OSM COM.<br />

1.<br />

OSM: drops the message into the AIA_CRTCUST_OUT_JMSQ JMS queue.<br />

1.ProcessFulfillmentOrderBillingAccountListOSMCFSCommsJMSConsumer:<br />

• picks up an OSM message from JMS queue AIA_CRTCUST_OUT_JMSQ JMS<br />

• routes it to CommsProcessFulfillmentOrderBillingAccountListEBF service<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 73


2.CommsProcessFulfillmentOrderBillingAccountListEBF:<br />

• extracts the relevant customer data to create a ProcessBillingAccountListEBM message<br />

• routes message to CommsProcessBillingAccountListEBF service<br />

3. CommsProcessBillingAccountListEBF:<br />

• Generates QueryCustomerPartyListEBM message<br />

• routes the message to the QueryCustomerPartyListSiebelProvABCSImplV2 service<br />

4.QueryCustomerPartyListSiebelProvABCSImplV2:<br />

• prepares the application business message (ABM)<br />

• invokes Siebel via SWI_Customer_Party_Service with the ABM<br />

• transforms the received ABM to a QueryCustomerPartyListResponseEBM message<br />

• sends EBM back to CommsProcessBillingAccountListEBF service.<br />

6. CommsProcessBillingAccountListEBF :<br />

• instantiates the SyncCustomerPartyListBRMCommsProvABCSImpl service.<br />

7. SyncCustomerPartyListBRMCommsProvABCSImpl<br />

• calls PCM_OP_CUST_COMMIT_CUSTOMER BRM opcode to create an account./<br />

PCM_OP_CUST_UPDATE_CUSTOMER or PCM_OP_CUSTCARE_MOVE_ACCT opcode to update<br />

an existing account<br />

• sends SyncCustomerPartyListResponseEBM message back to<br />

CommsProcessBillingAccountListEBF (asynchronous delayed response mode)<br />

• sends the ProcessBillingAccountListResponseEBM response message to the<br />

CommsProcessFulfillmentOrderBillingAccountListEBF (asynchronous delayed response mode)<br />

8. ProcessFulfillmentOrderBillingAccountListRespOSMCFSCommsJMSProducer :<br />

• drops a message into the AIA_UPDCUST_IN_JMSQ store-and-forward queue<br />

• OSM is notified of the SyncCustomer status<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 74


O2C - Bill Fulfilment<br />

Initiates Billing from OSM COM towards BRM. OSM converts<br />

ProcessSalesOrderFulfillmentEBM message received in the<br />

Process Sales Order Fulfillment business flow into a<br />

ProcessFulfillmentOrderBillingEBM message and places it in a<br />

JMS queue. The store-and-forward mechanism pushes the<br />

message to the AIA_CRTBO_OUT_JMSQ messaging queue.<br />

1. ProcessFulfillmentOrderBillingOSMCFSCommsJMSConsumer :<br />

• picks up the ProcessFulfillmentOrderBillingEBM message from AIA_CRTBO_OUT_JMSQ<br />

messaging queue<br />

• Routes message to the ProcessFulfillmentOrderBillingBRMCommsProvABCSImpl service.<br />

2. ProcessFulfillmentOrderBillingBRMCommsProvABCSImpl :<br />

• uses the ProcessFulfillmentOrderBillingEBM message to create in BRM a.o.:<br />

• billing artifacts,<br />

• service instances with balance group information,<br />

• purchased products<br />

• purchased discounts<br />

• construct the ProcessFulfillmentOrderBillingResponseEBM message<br />

• sends it back to the ProcessFulfillmentOrderBillingResponseOSMCFSCommsJMSProducer<br />

service.<br />

3.ProcessFulfillmentOrderBillingResponseOSMCFSCommsJMSProducer:<br />

• forwards the ProcessFulfillmentOrderBillingResponseEBM message in the<br />

AIA_UPDBO_IN_JMSQ queue<br />

Store-and-forward mechanism forwards message from AIA weblogic to the OSM WebLogic server.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 75


O2C - Provision Order and Update Fulfilment Order<br />

Send Order from OSM COM (Fulfilment) to OSM SOM<br />

(Provisioning) to talk to the OSS Network Layer. Whenever<br />

a new order is created in Provisioning, a<br />

ProcessProvisioningOrderEBM message is created by OSM<br />

COM. The message is enqueued in the<br />

AIA_CRTFO_OUT_JMSQ queue using the store-andforward<br />

mechanism<br />

1.ProcessProvisioningOrderOSMCFSCommsJMSConsumer:<br />

• monitors the queue and dequeues the message from<br />

AIA_CRTFO_OUT_JMSQ viaa JMS adapter<br />

• routed to ProcessProvisioningOrderOSMPROVJMSProducer.<br />

2. ProcessProvisioningOrderOSMPROVJMSProducer:<br />

• Place message into AIA_FOPROV_IN_JMSQ queue.<br />

Store-and-forward mechanism places the message towards OSM SOM, so it can dequeue it for further<br />

processing.<br />

During provisioning update messages are enqueued by OSM SOM into OSM WebLogic and moved to the<br />

AIA_FOPROV_OUT_JMSQ queue using store-and-forward.<br />

3. ProcessFulfillmentOrderUpdateOSMPROVCommsJMSConsumer<br />

• dequeue the ProcessFulfillmentOrderUpdateEBM message<br />

• route to ProcessFulfillmentOrderUpdateOSMCFSCommsJMSProducer<br />

4. ProcessFulfillmentOrderUpdateOSMCFSCommsJMSProducer<br />

• enqueuesProcessFufillmentOrderUpdateEBM message in the AIA_FOCFS_IN_JMSQ queue<br />

using store-and-forward.<br />

OSM SOM picks up the message, initiates the necessary actions in the OSS Provisioning Systems and<br />

updates the status of the order.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 76


O2C - Update Sales Order<br />

Update Order Status from OSM COM (Fulfilment) back to<br />

Siebel. OS M creates an UpdateSalesOrderEBM message and<br />

enqueues it in the AIA_UPDSO_OUT_JMSQ queue using a<br />

store-and-forward mechanism.<br />

1.UpdateSalesOrderOSMCFSCommsJMSConsumer:<br />

• consumes this message<br />

• routes it to the<br />

UpdateSalesOrderSiebelCommsProvABCSImpl service.<br />

UpdateSalesOrderOSMCFSCommsJMSConsumer works<br />

with a sequencer. If an update causes system or business error,<br />

further updates to the account are locked in the sequencer<br />

table. A business error must be removed from the<br />

sequencer table to unlock the account. In case of a System error, the message must be resubmitted.<br />

2.UpdateSalesOrderSiebelCommsProvABCSImpl:<br />

• convert the UpdateSalesOrderEBM message into a Siebel application business message (ABM)<br />

• invokes the Siebel Web service to update the order<br />

Order Status field in the Siebel user interface represents the overarching status throughout order<br />

capture and order fulfillment. Fulfillment Status is a sub-status to a Status of Open in Siebel.<br />

Benedikt Herudek<br />

As an Integration and Telecommunications Expert Benedikt works at<br />

Accenture, the Netherlands. His area of expertise spans from different<br />

Oracle Applications (eBusiness Suite, Siebel) over the Database to Oracle<br />

<strong>SOA</strong> & AIA Middleware Technologies. He is part of Accenture's RODOD<br />

expert pool and implemented the Solutions in different European Countries<br />

in different Roles as Analyst, Technical Architect & Teamlead. Benedikt is a<br />

Certified Oracle & <strong>SOA</strong> Implementation Specialist as well as a Certified<br />

Siebel Specialist and tries in his work to understand complex Solutions<br />

consisting of different Technologies from an E2E perspective. Benedikt is also a Specialist in Oracle<br />

Enterprise Manager and how to use the tool to monitor the Oracle Infrastructure and Application Stack.<br />

Contact<br />

LinkedIn<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 77


Next Generation <strong>SOA</strong>: A Concise Introduction to Service Technology & Service-<br />

Orientation<br />

About this Book<br />

Innovative service technologies are becoming valuable<br />

assets for businesses that need to stay competitive in the<br />

face of increasing globalization and market complexity.<br />

While computer processing power is becoming faster and<br />

cheaper, search engines, instant messaging, and social<br />

media channels are generating floods of information that<br />

escalate demands for consumable and accessible data.<br />

As the world's economies engage one another through<br />

offshoring, outsourcing, and supply chaining, localization is<br />

required to accommodate different currencies and<br />

languages. Globalization, recession, invention, and<br />

communication are some of the driving forces behind a next<br />

generation of technologies and practices that revolve<br />

around software programs designed in accordance with the<br />

paradigm of service-orientation. Such programs, referred to as "services," are expected to do<br />

more for less with greater efficiency in order to meet business challenges head-on.<br />

We have reached a stage in the evolution of service-oriented computing where modern service<br />

technology innovation is building upon mature service platforms at the same time that proven<br />

delivery techniques and design patterns are building upon an established service-orientation<br />

paradigm. These developments have made it possible to create service-oriented solutions of<br />

unprecedented sophistication.<br />

Table of Contents<br />

Chapter 1: Introduction<br />

Chapter 2: An Overview of <strong>SOA</strong> & Service-Orientation<br />

Chapter 3: A Look at How Services are Defined and Composed<br />

Chapter 4: An Exploration of Service-Orientation with the<br />

<strong>SOA</strong> Manifesto<br />

Chapter 5: An Overview of Service Technology<br />

Chapter 6: A Look at Service-Driven Industry Models<br />

Chapter 7: A Case Study<br />

Appendices<br />

Appendix A: Additional Reading for Applying Service-Orientation<br />

Appendix B: Additional Reading for Planning & Governing<br />

Service-Orientation<br />

Appendix C: Additional Reading for Cloud Computing<br />

For more information please visit http://servicetechbooks.com/nextgen<br />

For additional books please visit https://soacommunity.wordpress.com/soa-books/<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 78


BPM 12c Gateways<br />

Oracle BPM provides us with various components to control the flow of a process such as gateways,<br />

timer events, errors, message events, send and receive tasks, loop markers and multi-instance markers.<br />

In this article I will be elaborating the gateway control flow components and how we can use them to<br />

define the flow of our process. Gateways are very similar to a flowchart decision element. Using a<br />

gateway you can define the control points within your process by splitting and merging paths. At<br />

runtime a gateway will determine based on the control points defined at design time the path that a<br />

token will take through a process. There are five gateway types; Exclusive Gateway (XOR), Inclusive<br />

Gateway (OR), Parallel Gateway, Event Based Gateway and Complex Gateway.<br />

Exclusive Gateway<br />

Exclusive and Inclusive gateways consist of two outbound sequence flows; a default sequence flow<br />

representing the normal path between two objects and a conditional sequence flow to control the<br />

process flow based on the evaluation of an expression.<br />

The "Exclusive Gateway" is one of the most commonly used gateways where you can split your process<br />

into two or more paths. When a token reaches an exclusive gateway each of the conditional outbound<br />

sequence flows is evaluated in the order that you specified during design time when configuring the<br />

exclusive gateway and the first conditional flow that is evaluated to true is taken. If none of the<br />

conditional outbound sequence flows evaluates to true then the token moves down the default<br />

sequence flow. Please note that if you do not specify a default outbound sequence flow on an "Exclusive<br />

Gateway" you will get an error at design time and will not be able to compile and deploy your process.<br />

So let's see how you use an "Exclusive Gateway" to control the flow of a process. I have created a new<br />

BPM application using the "BPM Application" JDeveloper template and in the "Project <strong>SOA</strong> Settings"<br />

step i have selected "Composite with BPMN Process".<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 79


This will bring up the "BPMN 2.0 Process Wizard" where you are prompted to specify a process name<br />

and the service type. In this demo I have selected "Asynchronous Service".<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 80


In the arguments step I have created two input arguments, OrderId of type int and OrderAmount of type<br />

decimal, and an output argument, Status of type string.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 81


When you click finish it will open the process. Using the structure window I have created three process<br />

data objects to store the input arguments I have created above and hold the output argument value<br />

(orderId of type int, orderTotal of type decimal and status of type string).<br />

Next I assigned the two input arguments (OrderId and OrderTotal) to the process data objects (orderId,<br />

orderTotal) by double-clicking on the "Start" activity, going to the "Implementation" tab and selecting<br />

"Data Associations".<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 82


Please note that i did the same thing for the "End" activity but this time i have mapped the status<br />

process data object to the Status output argument.<br />

Just for demo purpose I came up with a very simple scenario where I will use an exclusive gateway to<br />

auto approve an order if the order total is less than 100 and to set the status to pending if the order<br />

total is greater than 100. I would like to stress that this is just for demo purposes as I would highly<br />

recommend that you use a business rules component to store the order total threshold rather than<br />

hard-coding it in the process.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 83


Furthermore I dropped two script tasks, one between the exclusive gateway and the end activity and<br />

one just above the first script task and mapped the two status values (auto approved and pending)<br />

respectively using the "Data Associations" on each of the script tasks.<br />

When you dropped the exclusive gateway between the start and end activity it automatically joined the<br />

exclusive gateway with the end activity using a default outbound sequence flow. Next I have created a<br />

conditional outbound sequence flow from the exclusive gateway to the "Set Order Status to Pending"<br />

script task and defined an XPath expression to check whether the orderTotal is greater than 100.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 84


I finally provided some labels on the two outbound flow to make them better readable and joined the<br />

second script task with the end activity as follows.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 85


Deploy your process on the integrated Weblogic server and run a test using a small order (having an<br />

order total of less than 100). The process should follow the default outbound flow and the order should<br />

be auto-approved.<br />

Now run another test with an order having an order total of greater than 100. The process should follow<br />

the conditional outbound flow and the order should be flagged as pending.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 86


An exclusive gateway can also be used to define a loop to check for conditions and re-executing previous<br />

steps. So to define a loop using an exclusive gateway just connect a sequence flow to a previous object.<br />

Download sample application: Exclusive Gateway<br />

Inclusive Gateway<br />

The inclusive gateway, just like the exclusive gateway, enables you to split your process into two or<br />

more paths. The intrinsic difference between an exclusive gateway and an inclusive gateway is that in an<br />

exclusive gateway, the process only continues down one of several paths (if multiple outgoing sequence<br />

flows are present) while in an inclusive gateway a process will follow all conditional paths whose<br />

expressions are evaluated to true.<br />

Furthermore, in an inclusive gateway a process will only follow the default path only if no conditional<br />

expressions evaluate to true. Because of this particular characteristic the notation of an inclusive<br />

gateway consist of a split and a merge inclusive gateway.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 87


An inclusive gateway can consist multiple outgoing conditional sequence flows for an inclusive gateway<br />

split. However, an inclusive gateway must define a default sequence flow. All conditional expressions<br />

that evaluate to true are executed; otherwise the default sequence flow is executed.<br />

At run time, the BPM engine generates a token for each conditional sequence that evaluates to true. If<br />

none of the conditional sequence flows evaluate to true then a token gets generated for the default<br />

sequence flow. The process will pause and will resume only when all tokens have reached the merge<br />

So let's see how you can use an inclusive gateway in a process. I have created a new BPM application<br />

using the "BPM Application" JDeveloper template and in the "Project <strong>SOA</strong> Settings" step i have selected<br />

"Composite with BPMN Process".<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 88


This will bring up the "BPMN 2.0 Process Wizard" where you are prompted to specify a process name<br />

and the service type. In this demo I have selected "Asynchronous Service".<br />

In this demo I will be simulating a Banking Supervision process where a specific department of a Central<br />

Bank is responsible for over-sighting it's financial institutions and based on certain decision points<br />

various documents are required to be generated.<br />

Therefore I will create two input arguments, NonComplianceLetter and LetterToCentralBank, both of<br />

type boolean to denote whether these two type of documents are required to be generated and an<br />

output string argument, DocumentsGenerated, to act as a confirmation of which documents where<br />

generated.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 89


When you click finish it will open the process. Using the structure window I have created three process<br />

data objects to store the input arguments I have created above and hold the output argument value<br />

(nonComplianceLetter and letterToCentralBank both of type boolean and documentsGenerated of type<br />

string).<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 90


Next I assigned the two input arguments (NonComplianceLetter and LetterToCentralBank) to the<br />

process data objects (nonComplianceLetter, letterToCentralBank) by double-clicking on the "Start"<br />

activity, going to the "Implementation" tab and selecting "Data Associations".<br />

Please note that i did the same thing for the "End" activity but this time i have mapped the<br />

documentsGenerated process data object to the DocumentsGenerated output argument.<br />

As already mentioned I will be simulating a Banking Supervision process where based on the two<br />

boolean input arguments I will generate either both documents (Non-Compliance Letter and Letter to<br />

Central Bank), one of the documents (Non-Compliance Letter or Letter to Central Bank) or will not<br />

generated any documents at all. And to implement such a scenario I will use an inclusive gateway.<br />

Please pay attention how JDeveloper automatically adds an inclusive merge gateway with every<br />

inclusive split gateway.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 91


Furthermore I dropped three script tasks, one between the inclusive split and merge gateway, one<br />

above the inclusive gateway and one below the inclusive gateway.<br />

On each script task, using the "Data Associations" provided some static text to the documentsGenerated<br />

process data object to display whether a document is generated (please note that in the second script<br />

task I used the concat function to concatenate the string value from the first script task).<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 92


Because I want to have the third script task (Do not Generate Any Letters) marked as the default<br />

sequence flow I will delete the default sequence flow from the second script task (Generate Letter to<br />

Central Bank) and redefine the sequence flows.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 93


For the first two conditional outbound sequence flows I have defined an XPath expression to check<br />

whether its marching document is selected. For the "Generate Non-Compliance Letter" conditional flow<br />

you should have an XPath condition similar to<br />

"xp20:matches(string(bpmn:getDataObject('nonComplianceLetter')), '\s*(i:true|1)\s*')". For the<br />

"Generate Letter to Central Bank" conditional outbound sequence flow your XPath should be similar to<br />

"xp20:matches(string(bpmn:getDataObject('letterToCentralBank')), '\s*(i:true|1)\s*')".<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 94


Deploy your process on the integrated Weblogic server and run a test with just one of the documents<br />

selected (let's say LetterToCentralBank set to true). The second conditional sequence flow is evaluated<br />

to true and if you inspect the "End" message DocumentsGenerated output element you should see that<br />

the Letter to Central Bank document has been generated.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 95


Switch to graphical view to see the execution path highlighted.<br />

Now test your process without selecting any of the two documents. The process should have followed<br />

the default sequence flow. You can confirm this by inspecting the "End" message DocumentsGenerated<br />

output element; it should read "No documents generated".<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 96


If you switch to graphical view you will see that the process followed the default outbound sequence<br />

flow.<br />

Download sample application: Inclusive Gateway<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 97


Parallel Gateway<br />

The parallel gateway enables you to perform multiple tasks simultaneously, allowing your process to<br />

follow several unconditional paths in parallel. When your process token reaches a parallel gateway<br />

activity, the parallel gateway will create a token for each outgoing parallel sequence flow. Your process<br />

will wait until all tokens have arrived at the parallel gateway merge activity before resuming with the<br />

rest of the activities.<br />

You should be very careful with the parallel gateway activity because if one of the tokens that have been<br />

created by the parallel gateway doesn't arrive at the parallel gateway merge activity, then your process<br />

will<br />

freeze.<br />

So let's see how you can use the parallel gateway in a process. Let's assume that you are implementing<br />

an order process and that at some point in your process you want to request for quotations from two<br />

different suppliers. Once you have received both quotations your process should resume (ideally pick<br />

the lowest quotation but I will not be implementing this part).<br />

I created a BPM application with a default BPM project (named both application and project<br />

"ParallelGatewayDemo") having an empty composite.<br />

Next I created an asynchronous BPMN process and named it OrderProcess without any arguments.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 98


As already stated above in this demo I will be simulating an order process where I need to send two<br />

supplier quotation. So I will use the parallel gateway. Please note how JDeveloper automatically adds a<br />

parallel gateway merge activity when you drop a parallel activity on your process.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 99


To simulate a supplier's request for quotation I used a human task component. I created a single human<br />

task for both suppliers accepting all the defaults and just changing the human task title for each case.<br />

For simplicity reasons I changed the human task assignment type from "Lane Participants" to "Names<br />

and expressions" and assigned the "weblogic" user as a new user participant.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 100


So let's test our process. Since we didn't specify any arguments you can directly invoke your process. If<br />

you open the flow trace you will see that two human tasks have been created and are pending.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 101


Go to the BPM workspace, login using the weblogic user and if you followed my exact steps and you<br />

should see two tasks. Approve one of them.<br />

If you go back to the flow trace you should see that there process is waiting for the second human task.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 102


Approve the second human task (from the BPM workspace) and go back to the flow trace; you process<br />

should be completed.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 103


Both tokens from both outgoing parallel sequence flow have reached the parallel gateway merge<br />

activity which signaled to the process that all parallel activities have been completed.<br />

Download sample application: Parallel Gateway<br />

Complex Gateway<br />

In this fourth article of a five-part series we will go through the complex gateway, a gateway that is<br />

similar to an inclusive gateway but at the same time allows you to define a voting pattern to determine<br />

whether your instance should continue execution even if not all outgoing sequence flows have been<br />

completed.<br />

As with all the other gateways that we've seen till now, the complex gateway involves a split activity<br />

which can be either an inclusive gateway (see "Inclusive and Complex" pattern) or an exclusive gateway<br />

and a complex merge gateway (see "Parallel and Complex" pattern).<br />

Similar to an inclusive gateway, a process implementing the "Inclusive and Complex" pattern will follow<br />

all conditional paths whose expressions are evaluated to true. All conditional expressions that evaluate<br />

to true are executed; otherwise the default sequence flow is executed.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 104


A process implementing the "Parallel and Complex" pattern will follow all unconditional paths defined at<br />

design time.<br />

What is really interesting with the complex gateway is that it allows you to define a condition on the<br />

complex gateway merge activity to control whether the instance should continue even if not all of the<br />

complex gateway paths have been completed.<br />

When a process reaches a complex gateway activity it will create a token for each outgoing sequence<br />

flow that evaluates to true. You can configure the complex gateway merge activity to continue<br />

execution even if not all of the tokens have arrived at the complex gateway merge activity. For example,<br />

if you have three parallel sequence flows executed you can configure the complex gateway to continue<br />

after two or more tokens have arrived at the merge activity. This is really handy when you want to<br />

implement a voting based pattern on process activities.<br />

Let's see how you can use the complex activity in a demo process. I will base my demo on the process I<br />

created in part three of my five-part series, Oracle BPM 12c Gateways (Part 3 of 5): Parallel Gateway.<br />

Let's assume that you are implementing an order process and that at some point in your process you<br />

want to request for quotations from three different suppliers. Your process shouldn't wait for a<br />

response from all three suppliers; it is sufficient that you receive quotations from just two suppliers.<br />

Once you have received quotations from any two out of the three suppliers your process should<br />

continue (ideally pick the lowest quotation but I will not be implementing this part).<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 105


So let's start with creating a BPM application with a default BPM project (named both application and<br />

project "ComplexGatewayDemo") having an empty composite.<br />

I created next an asynchronous BPMN process and named it OrderProcess (without any arguments).<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 106


As already mentioned, in this demo I will be simulating an order process where I need to send three<br />

supplier quotations. The process shouldn't wait for all three quotations but just any two. So I will use the<br />

complex gateway and please notice how JDeveloper will automatically use the "Inclusive and Complex"<br />

pattern, adding an inclusive gateway split activity and a complex gateway merge activity.<br />

Since I want to send a request to all three suppliers I will change the complex gateway pattern to<br />

"Parallel and Complex". You can do so by right-clicking on the inclusive split activity and choosing from<br />

the context menu "Change Gateway configuration to -> Parallel and Complex".<br />

To simulate a supplier's request for quotation I used a human task component. I created a single human<br />

task for all three suppliers accepting all the defaults and just changing the human task title for each case.<br />

I created three user tasks on the process creating default sequence flows from the parallel split activity<br />

to all three user tasks and from each user task a default activity to the complex gateway merge activity.<br />

You should notice that there is a warning on the complex gateway merge activity that the expression<br />

from node is empty. If you go to the implementation details of the complex gateway activity you will see<br />

that you can define either a simple or an xpath expression to control, by selecting the "Abort pending<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 107


flows" check box when the process should continue even if not all tokens have reached the complex<br />

gateway.<br />

There is a special predefined variable in a complex gateway called "activationCount" that will return you<br />

the number of tokens that have arrived to the merge gateway. You can use this with other custom data<br />

objects to form complex expressions.<br />

In my demo, I only care for any two quotations so I will just use the activationCount variable to count<br />

the number of tokens that have reached the complex gateway. If two or more tokens have reached the<br />

complex gateway merge activity then my process shouldn't wait for the third token but instead continue<br />

with its execution.<br />

For simplicity reasons I changed the human task assignment type from "Lane Participants" to "Names<br />

and expressions" and assigned the "weblogic" user as the new user participant.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 108


Let's test our process. Since we didn't specify any arguments you can directly invoke your process. If you<br />

open the flow trace you will see that three human tasks have been created and are pending.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 109


Go to the BPM workspace, login as weblogic (assuming that you have assigned the tasks to weblogic)<br />

and you should see three tasks. Submit one of them and go back to the flow trace. You should see that<br />

one human task has been completed and the other two are still pending.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 110


Go back to the BPM workspace, submit one of the remaining two tasks and once the task is submitted<br />

click on the refresh icon. You should see that the third task get removed from your inbox. This is because<br />

of the expression we have defined on the complex gateway (to abort all pending flows if that expression<br />

was evaluated to true).<br />

If you go back to the flow trace you should see that all three human tasks have been completed and the<br />

process ended.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 111


Even though only two tokens reached the complex gateway, it was enough to signal the process to<br />

continue with its execution.<br />

Download sample application: Complex Gateway<br />

Event-based Gateway<br />

My last article on gateways is on the event-based gateway, another type of gateway supported by<br />

Oracle BPM 12c to provide divergence in processes.<br />

The event-based gateway is very similar, conceptual wise, to the exclusive gateway in the sense that we<br />

can have various outgoing sequence flows but only one branch is followed. The operational difference<br />

though is that, as its name suggests, the event-based gateway uses events for defining the branching<br />

conditions and decisions rather than data-specific conditions.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 112


An event-based gateway can consist of multiple events; however the first event that occurs will<br />

determine the execution path that will be followed.<br />

Using the order process as an example, once an order is received and validated it needs to be processed.<br />

Assuming that we have multiple warehouses, the order will be processed by the warehouse that can<br />

process all inventory items ordered and responds first. The process will wait until one of the warehouses<br />

responds to the request for processing the order. However, the process cannot wait indefinitely.<br />

So let's see how we can implement the above scenario using the event-based gateway.<br />

Let's start with creating the basic BPM application and BPM project (named both application and project<br />

"EventBasedGatewayDemo") and selecting "Composite with BPMN Process" in step 3.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 113


This will bring up the "BPMN 2.0 Process Wizard" where you are prompted to specify a process name<br />

and the service type. Give your process a name, for example OrderProcess and select "Asynchronous<br />

Service" as the service type.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 114


In step 3 of the BPMN 2.0 Process Wizard you are prompted to specify the input and output process<br />

arguments. A typical order definition would consist of an order id, a collection of order items, the order<br />

total, customer details and bill and ship address details. For simplicity reasons my demo process will only<br />

consist of the order id (of type int) and the order total (of type decimal) as input arguments and a status<br />

argument of type string as output.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 115


The event-based gateway is composed of the event-based split gateway and two or more target events.<br />

These events can be either message catch events, timer catch events or receive tasks. Please note that<br />

you cannot mix message catch events and receive tasks within the same event-based gateway.<br />

Select and drop the "Event Based" gateway on the default sequence flow between the "Start" and "End"<br />

activities. You should notice that JDeveloper automatically has added three activities; an event based<br />

split gateway activity, a catch message activity and a timer catch activity.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 116


There is an error on the Timer activity because it doesn't have an outgoing default sequence flow. Give<br />

the event based gateway split activity and the catch message activity some meaningful names and add a<br />

new catch message activity just below the default created catch message activity and define default<br />

sequence flows for all activities.<br />

Next set the timer activity to wait for 30 seconds for a reply from the warehouses and define an<br />

implementation on the two catch message activities. Again for simplicity and demo reasons I have used<br />

the "Define Interface" message exchange type and created only a single argument, order id of type int.<br />

The implementation of both catch message activities are exactly the same, the only difference is the<br />

operation name.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 117


So we have a process that expects some events to arrive from the two warehouses while its being<br />

executed. This means that the main process, which in our case its the order process needs to find a way<br />

to correlate these intermediate events with the itself. To do that we need to create a correlation<br />

property (an attribute to correlate the main process with the intermediate events) and a correlation key<br />

(which defines the properties to use in the correlation which consists of one or more correlation<br />

properties).<br />

I will use the order id to correlate the events that will be flowing from the warehouses into the main<br />

order process, therefore I have created a correlation property named "orderId" and of type int and a<br />

correlation key named "ck_orderId" with the orderId correlation property selected.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 118


We now need to instruct the process and intermediary events to use the orderId correlation property<br />

we created. The main process will be responsible for initiating the correlation and matching events that<br />

will be coming in from the warehouses with the main process. Therefore on the message start activity<br />

select under "Implementation" select "Correlations" and select the orderId correlation property and<br />

map it to the orderId process input argument. Ensure that you have selected the "Initiates" option to<br />

instruct the process to correlate an instance of the order process with the supplied order id.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 119


The same correlation definitions need to be applied on the two catch message activities. Please ensure<br />

that the "Initiates" option is not selected since this will be done upon the instantiation of the process.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 120


Deploy your process and run a test instance using the "start" operation. If you inspect the audit trail you<br />

should see that the instance is waiting at the event-based split gateway activity.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 121


Run a new test instance of your order process but this time use one of the warehouse operations (for<br />

example, use the "warehouseB" operation). If you inspect the audit trail you should notice that the<br />

order is now completed and that the process followed the second branch.<br />

Download sample application: Event-based Gateway<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 122


Summery BPM Suite Gateways<br />

There are various ways to control the flow of a process. In this five-part series we’ve focused on<br />

gateways and explored the five different gateways offered by Oracle BPM to define the control points<br />

within your processes. We have seen how you can deviate from the default process path using a splitmerge<br />

gateway (parallel gateway, inclusive gateway and complex gateway) and tried to shed some light<br />

on the more complex gateway types by demystifying the event-based and complex gateways.<br />

The biggest challenge in modeling and implementing processes is knowledge of the components set. I<br />

hope that by the end of this five-part series you have a clearer view on gateways and how to use each<br />

gateway to define your control and deviation points within your processes.<br />

Antonis Antoniou<br />

Antonis Antoniou is a Technical Director working for Oracle Platinum Partner<br />

eProseed. He is a Fusion Middleware Expert, a specialist in the areas of<br />

Enterprise 2.0, Business Process Management and Service Oriented<br />

Architecture and a certified professional on Oracle Application Grid, Oracle<br />

WebCenter Portal, Oracle WebCenter Content, ADF, Oracle BPM and Oracle<br />

<strong>SOA</strong>. Antonis has long-time experience as developer, coach, trainer and<br />

architect and has leaded multiple complex projects on Oracle Fusion<br />

Middleware across Europe and Middle-East and across various industries<br />

(telecom, financial services, public sector). Antonis started his professional<br />

career at Deloitte where he worked for 8 years, reaching the level of senior manager in charge of the<br />

technology integration service line before joining eProseed. Antonis is an avid technology evangelist and<br />

a regular speaker at various Oracle conferences and events.<br />

Contact: Blog LinkedIn Twitter<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 123


Call for content <strong>SOA</strong> <strong>Magazine</strong> & Service Technology <strong>Magazine</strong> & OTN<br />

We want to publish your <strong>SOA</strong> & BPM content in the Service Technology <strong>Magazine</strong> and the <strong>SOA</strong> <strong>Magazine</strong> and OTN!<br />

You write about <strong>SOA</strong> and BPM best practices, code samples, reference cases, governance, code samples, mobile<br />

integration, cloud integration Let us know we are very keen to publish your articles! Please send them to:<br />

Service Technology <strong>Magazine</strong> OTN <strong>SOA</strong> <strong>Magazine</strong><br />

Contribution Contribute Contribute<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 124


Top 10 Things You Should Know About BPM 11g/12c<br />

With the help of my A-Team colleagues (Sushil Shukla, Siming Mu, John Featherly, Pete Farkas), and<br />

based on collective experiences visiting numerous BPM customers worldwide, I have put together my<br />

“Top 10″ list of things everyone should know when embarking on a BPM project.<br />

You might agree, you might disagree, most of all, feel free to comment.<br />

1. Auditing<br />

BPM provides the business with extremely detailed visibility of runtime instances through its powerful<br />

auditing capabilities.<br />

HOWEVER… This comes at a cost: detailed auditing requires frequent inserts into the <strong>SOA</strong>INFRA<br />

database increasing the likelihood of contention and causing significant database growth. As volume<br />

increases it is almost always the case that the consequences of Auditing produce the first bottleneck.<br />

BUT… Auditing can be tuned down where appropriate and purge scripts can remediate database growth<br />

SEE… Auditing Demystified<br />

2. Payload Size<br />

It can often be simpler at the time of BPM process design to have one large payload schema that<br />

includes all elements for every possible interaction within the lifetime of an instance, and pass this<br />

everywhere within the instance, including to human tasks and their UIs.<br />

HOWEVER… The cost of this, both at runtime and in terms of the number and size of database rows, can<br />

be large. The whole payload must be written to <strong>SOA</strong>INFRA database at dehydration points within the<br />

lifetime of a process instance & in-between these dehydration points, data objects associated with this<br />

payload are held in memory.<br />

BUT… Appropriate design of the payload schema (flatter & simpler) can reduce the size considerably.<br />

The optimal solution would be to pass only key-values in the payload and retrieve detail values as-andwhen<br />

needed inside the process, however this can lead to over-complicating the process design with<br />

technical services. A sensible balance is always the best approach.<br />

SEE… XML_DOCUMENT Table Growth<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 125


3. Partitioning / Purging<br />

BPM audits heavily, this can be extremely useful for business insight<br />

HOWEVER… The <strong>SOA</strong>INFRA database growth can be larger than expected<br />

BUT… Partitioning & purging are critical to limiting database growth. Test purging thoroughly as part of a<br />

normal stress/load test cycle. Determine whether “loop purge” outside of the online window is<br />

sufficient, if not consider also using “parallel purge” during quiet periods during the online day.<br />

Partitioning is a good option in most cases, in 11g <strong>SOA</strong>INFRA must be partitioned post-installation but in<br />

12c it is an installation option.<br />

SEE… <strong>SOA</strong> 11g Database Growth Management Strategy Paper & <strong>SOA</strong> Partitioning<br />

4. Negative Testing<br />

<strong>SOA</strong> Suite provides a comprehensive fault policy framework & BPM has inbuilt fault-handling<br />

constructs, allowing the vast majority of technical and business exceptions to be handled gracefully.<br />

HOWEVER… Failure to properly negative test potential exceptions, individually & in bulk, can lead to<br />

inadequate operational guidelines & faults occurring in production which can be hard to recover.<br />

BUT… Ensure that thorough negative testing happens in a like-live pre-production environment. Use this<br />

testing as a basis for building a robust fault-policy framework. Involve operations staff in this testing<br />

process in order to build an appropriate “Operations Guide”<br />

SEE… Fault Policy Framework<br />

5. Faults & Recovery<br />

Thorough negative testing and a comprehensive fault policy will allow the vast majority of exceptions<br />

to be gracefully handled<br />

HOWEVER… Unexpected exceptions can still occur… exception conditions that were not tested prior to<br />

production and even issues in the BPM engine itself.<br />

BUT… All is not lost in situations like this. BPM process instances will roll-back to a prior dehydration<br />

point and can be recovered individually and in bulk from either the Enterprise Manager or via the API.<br />

12c has the new Error Hospital features which make exception monitoring & recovery even simpler<br />

SEE… BPM Process Instances – Faults, Rollback & Recovery & Error Hospital (12c)<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 126


6. Performance / Load Testing<br />

BPM running as part of <strong>SOA</strong> Suite can handle very high throughput and concurrent users.<br />

HOWEVER… The BPM Engine, together with the other <strong>SOA</strong> Suite engines, the associated Weblogic<br />

servers and the underlying databases and JVMs are not tuned out-of-the-box for specific loads or usage<br />

patterns.<br />

BUT… Appropriate performance testing (load, stress, soak etc….) in a like-live pre-production<br />

environment allows for a highly tuned environment which can be used as a template for production.<br />

SEE… Oracle BPM 11g Performance Tuning Guide<br />

7. LDAP & Active Directory<br />

BPM is highly flexible in where its users & groups are stored. They can be in LDAP providers such as<br />

Active Directory or Oracle Internet Directory, they can be in other LDAP providers, they can even be in<br />

a database or a combination of any or all of them.<br />

HOWEVER… The interaction between BPM and its users & groups can often be a bottleneck in<br />

production systems if the LDAP structure is not fully understood and/or the area has not been<br />

appropriately tested in a like-live pre-production environment. Active Directory can be a specific<br />

problem area since the settings for this inside Weblogic server are not tuned out-of-the-box for BPM.<br />

BUT… Appropriate testing will help to tune the properties and the caching at the level of the Weblogic<br />

provider and, if necessary, libOVD, OVD and the LDAP provider itself.<br />

SEE… Active Directory and BPM & BPM, libOVD and LDAP<br />

8.Process Versioning<br />

BPM is highly flexible in the management of process versions and the in-flight instances that run on<br />

them. Old and new revisions can run in parallel in a co-existence strategy. Small fixes to a revision can<br />

have the associated in-flight instances patched automatically. New revisions of a process can have<br />

some or all in-flight instances migrated from an older revision.<br />

HOWEVER… Not all changes to the design of a process will allow automatic patching or migration of inflight<br />

instances.<br />

BUT… It is possible to design around these limitations, and also possible in some case to force<br />

deployment and/or use “Alter Flow” post deployment to massage in-flight instances to the appropriate<br />

activity with the correct instance data.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 127


SEE… Restrictions on patching of in-flight instances (11g) & Restrictions on migration of in-flight<br />

instances (11g) & Alter Flow (11g) & Instance Patching & Instance Patching Revisited<br />

9. When to Use BPEL<br />

The benefits of BPM being part of a larger <strong>SOA</strong> Suite offering are huge, the appropriate product (BPEL,<br />

Mediator etc… ) can be used to solve the problem at hand.<br />

HOWEVER… When to use BPEL instead of BPM can be a problem. It can be overly simplistic to assume<br />

that; if all that is required is service orchestration, if the process has no human interaction and the need<br />

for a business view of the running instances is not needed then BPEL should be chosen. BPEL has less<br />

database overhead and has been shown to be marginally more performant in terms of throughput but<br />

there are drawbacks, mainly in terms of instance patching (it is not possible) and instance migration<br />

(only sync processes, i.e. with no durable activities)<br />

BUT… A correct choice between BPM & BPEL (and other products such as mediator) should be made at<br />

design time in the full knowledge of the benefits and limitations of each. A safe rule of thumb is never to<br />

mix BPM processes and durable BPEL processes in the same composite.<br />

SEE… Modifying Running Process Instances (11g)<br />

10. Flex Fields & Composite Sensors<br />

Flex fields provide an ability to customize the BPM Workspace tasklist with business data, allowing<br />

business users to optimize how they prioritize and work on tasks. Composite sensors provide a similar<br />

ability within Enterprise Manager, i.e. give operational staff the ability to find running instances based<br />

on business data.<br />

HOWEVER… It can be difficult to understand which of public or protected flex fields to use, there is a<br />

limit to the overall number of flex fields available & flex fields often cause performance problems as<br />

they are not indexed by default in the <strong>SOA</strong>INFRA database.<br />

BUT… Correct usage & indexing of flex fields can be invaluable to business users. Composite sensors<br />

likewise for operational users.<br />

SEE… Flex Fields with Oracle BPM & Composite Sensors<br />

Summary<br />

They are my Top 10… what are yours <br />

All site content is the property of Oracle Corp. Redistribution not allowed without written permission<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 128


Mark Foster<br />

Mark Foster is a Consulting Solution Architect in the FMW Architects<br />

Team. He is focused on BPM & ACM and is widely acknowledged as<br />

one of the go-to experts in these products having helped customers<br />

worldwide, from architecture reviews to escalations. He has over 25<br />

years experience in the IT industry and over 10 years as an Integration<br />

& Solutions Architect. Prior to Oracle, Mark worked for Sun<br />

Microsystems & SeeBeyond in very similar roles, and before this Mark<br />

worked as an Integration Architect at Royal Bank of Scotland /<br />

NatWest Bank. Outside of work Mark is a keen runner & triathlete<br />

having competed at distances up to IronMan. Mark lives in France,<br />

just south of Strasbourg at the foot of the Vosges mountains.<br />

Contact: Blog LinkedIn<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 129


Thriving On Adaptability: Best Practices for Knowledge Workers by Keith Swenson<br />

Adaptive Case Management is ultimately about allowing knowledge workers to work the way that they<br />

want to work and to provide them with the tools and information they<br />

need to do so effectively.<br />

As Surendra Reddy points out in his foreword:<br />

“Imagine a fully integrated ACM system layered into the value stream of<br />

an enterprise. The customer support team is able to focus on customer<br />

needs, with easy access to the entire company’s repertoire of<br />

knowledge, similar cases, information, and expertise, as if it were a<br />

service. To truly accommodate customers, companies must vest real<br />

power and authority in the people and systems that interact directly<br />

with customers, at the edge of the organization and beyond. ACM<br />

augments business processes to deliver true data-driven process<br />

infrastructure entering enterprises into the age of intelligent machines<br />

and intelligent processes. ACM empowers the knowledge worker to collaborate, derive new insights,<br />

and fine tune the way of doing business by placing customers right in the left where they belong, to<br />

drive innovation and organizational efficiencies across the global enterprise.<br />

“ACM also helps organizations focus on improving or optimizing the line of interaction where our people<br />

and systems come into direct contact with customers. It’s a whole different thing; a new way of doing<br />

business that enables organizations to literally become one living-breathing entity via collaboration and<br />

adaptive data-driven biological-like operating systems. ACM is not just another acronym or business fad.<br />

ACM is the process, strategy, framework, and set of tools that enables this evolution and maturity.<br />

“ACM, in my opinion, is the future blueprint for the way of doing business.”<br />

Thriving on Adaptability describes the work of managers, decision makers, executives, doctors, lawyers,<br />

campaign managers, emergency responders, strategists, and many others who have to think for a living.<br />

These are people who figure out what needs to be done, at the same time that they do it.<br />

In award-winning case studies covering industries as a diverse as law enforcement, transportation,<br />

insurance, banking, state services, and healthcare, you will find instructive examples for how to<br />

transform your own organization.<br />

This important book follows the ground-breaking best-sellers, Empowering Knowledge Workers, Taming<br />

the Unpredictable, How Knowledge Workers Get Things Done, and Mastering the Unpredictable and<br />

provides important papers by thought-leaders in this field, together with practical examples, detailed<br />

ACM case studies and product reviews. Get the book here.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 130


Cloud Service Brokers – the integration story of your cloud<br />

Content<br />

Cloud service broker definition<br />

Cloud service broker role & services<br />

Cloud service broker market opportunity<br />

Challenges cloud service broker<br />

Examining the cloud broker market opportunity & role of IP<br />

Cloud broker IaaS<br />

In the <strong>SOA</strong> <strong>Magazine</strong> III “Cloud Computing Definition & Architecture for Cloud Service Brokers” we<br />

introduced the cloud computing definition, concepts and the idea of Cloud Service Broker. In this article<br />

we discuss the Cloud Service Brokers in details including their roles, services, market opportunity and<br />

challenges.<br />

Cloud service broker definition<br />

The paper “Defining Cloud Services Brokerage: Taking Intermediation to the Next Level” written by Daryl<br />

C. Plummer, Benoit J. Lheureux, Frances Karamouzis and published by Gartner in October 2010, defines<br />

cloud services brokerage (CSB) as "A cloud services brokerage is a business model in which a company or<br />

other entity adds value to one or more (generally public or hybrid, but possibly private) cloud services<br />

on behalf of one or more consumers of those services." The authors do not define cloud brokers in<br />

categories like the NIST definition in 2011 (Service Intermediation & Service Aggregation & Service<br />

Arbitration). Instead the paper highlights the types of CSBs by backup & recovery, integration, customer<br />

development, governance or service marketplace. In recent papers Gartner follows the NIST cloud<br />

broker categories.<br />

Cloud service broker examples:<br />

Category Cloud Service Intermediation Cloud Service Aggregation Cloud Service Arbitration<br />

Example Salesforce Identity Dell Boomi Zimory<br />

Cloud service broker role & services<br />

CSB’s reduce the complexity between cloud providers and cloud consumer. In an internal private cloud<br />

scenario, the internal IT organization takes on the role of broker.<br />

For a cloud consumer a CSB’s can handle security, governance, portability & interoperability, regional<br />

regulatory and legal issues. Also a CSB can add value adding services to a cloud solution. Therefore a CSB<br />

might increase the business continuity. On the other hands a cloud broker adds an additional single<br />

point of failure between several cloud providers and a cloud consumer. In the case the cloud consumer<br />

decides to work with several CSB’s this increases again the complexity.<br />

Cloud service broker market opportunity<br />

Gartner highlights the market potential of CSB. In 2010 Gartner conducted a survey, in which users plan<br />

to use CSB’s for<br />

57% backup & recovery<br />

52,8% integration<br />

48% custom development<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 131


40% governance<br />

36% service marketplace<br />

Gartner concludes “By 2015, CSBs will represent the single-largest category of growth in cloud<br />

computing, moving from a sub-$1 billion market in 2010 to a composite market counted in the hundreds<br />

of billions of dollars”. Currently SAAS and IAAS are the largest categories in cloud computing. AS the<br />

market potential is huge more and more leading cloud providers offer a complete platform. For example<br />

Salesfore.com stated with CRM services, added force a PaaS platform and offers Salesforce Identity a<br />

cloud service intermediation. When a market opportunity becomes interested and large enough these<br />

large providers like Google, Salesforce, Microsoft, IBM or Oracle will offer services. These providers do<br />

have the market power to offer complete and proprietary cloud economies.<br />

An interesting development are the joint partnerships between leading cloud vendors. Oracle and<br />

Microsoft announced a partnership in June 2013. As part of this partnership cloud consumers and<br />

deploy Oracle databases and Oracle WebLogic middleware on the Microsoft Azure cloud. Salesforce and<br />

Oracle plan to standardize and integrate their SAAS cloud services. Salesforce CRM should be integrated<br />

with Oracle HCM and Financials. This new partnerships will reduce the need for CSBs. The cloud<br />

consumers might profit from better integrated solutions and better interoperability between cloud<br />

providers. Or in the other case these large vendors might enable cloud brokerage between their cloud<br />

solutions out of the box. Additional more and more IT companies offers Cloud Service Brokers out of the<br />

box. For example Oracle launched the Cloud Adapters like pre-build cloud service intermediation<br />

brokers between solutions like Salesfore.com, RightNow and on-premises applications like SAP R3.<br />

Eventually this integration services will also become available in the Oracle Cloud Integration Service<br />

planed for mid 2015.<br />

Challenges cloud service broker<br />

Potential challenges between several cloud providers might increase the overall SLA’s. For example a<br />

CSB brokers two credit check services from different cloud providers. If one provider fails, the other<br />

cloud provider might be still available. The CSB brokers of this service and the cloud consumer can still<br />

get credit check results. On the other hand if the CSB fails all cloud services are not available for the<br />

cloud consumer, therefore the CSB might be a single point of failure. The cloud consumer might<br />

decrease this risk by using several CSBs for the same cloud services. This might increase the complexity<br />

significant. Imagine the use of several CRM solutions integrated with several e-mail solutions and be<br />

synchronized and managed by several CBS.<br />

Examining the cloud broker market opportunity & role of IP<br />

Cloud brokers need to offer their consumer an added value. IP is the foundation for CSB. In todays<br />

model integration between systems is delivered often on a project base by a system integrator. These SI<br />

can leverage this knowledge and re-use it to build and become a CSB. Based on the Cloud Provider SIs<br />

will be supported with a marketing platform to promote the CSBs. For example Oracle gives it’s partners<br />

to promote re-usable assets like CSBs within the Cloud Marketplace.<br />

Cloud broker IaaS<br />

An emerging area of CBS is the brokerage of IaaS. Solutions deployed on a defined stack like Red Hat<br />

OpenStack can be shifted between private and or different public clouds. Red Hat offers a technology<br />

call Cloud Forms to manage the stack and broker the workload. Other vendors like Oracle offer similar<br />

technology e.g. Nimbula. Cloud consumers get the freedom to choose the IaaS provider.<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 132


References<br />

Source Defining Cloud Services Brokerage: Taking Intermediation to the Next Level<br />

Source Defining Cloud Services Brokerage: Taking Intermediation to the Next Level<br />

Source: http://www.oracle.com/us/corporate/press/1964592<br />

Source: http://www.oracle.com/us/corporate/press/1964798<br />

Jürgen Kress<br />

As a middleware expert Jürgen works at Oracle EMEA Alliances and Channels,<br />

responsible for Oracle's EMEA fusion middleware partner business. He is the<br />

founder of the Oracle <strong>SOA</strong> & BPM and the WebLogic Partner Communities<br />

and the global Oracle Partner Advisory Councils. With more than 5000<br />

members from all over the world the Middleware Partner Community is the<br />

most successful and active community at Oracle. Jürgen manages the<br />

community with monthly newsletters, webcasts and conferences. He hosts<br />

his annual Fusion Middleware Partner Community Forums and the Fusion<br />

Middleware Summer Camps, where more than 200 partners get product<br />

updates, roadmap insights and hands-on trainings. Supplemented by many web 2.0 tools like twitter,<br />

discussion forums, online communities, blogs and wikis. For the <strong>SOA</strong> & Cloud Symposium by Thomas Erl,<br />

Jürgen is a member of the steering board. He is also a frequent speaker at conferences like the <strong>SOA</strong> &<br />

BPM Integration Days, JAX, UKOUG, OUGN, or OOP<br />

Contact: Blog LinkedIn Twitter<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 133


<strong>SOA</strong> Community Calendar<br />

For the latest upcoming events please visit our <strong>SOA</strong> Community Website. Add you <strong>SOA</strong> event to the <strong>SOA</strong><br />

Community calendar simply by sending a google calendar invite to <strong>SOA</strong>Event@gmail.com<br />

i<br />

ABNF – Meta-language often used as definition language for rules associated with document exchange<br />

http://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_Form<br />

Copyright © 2015 | All Rights Reserved <strong>SOA</strong> <strong>Magazine</strong> <strong>IV</strong> 134

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!