Tuesday, December 15, 2015

Oracle ICS Integration Patterns (Part 1 of 3): Map My Data

Oracle Integration Cloud Service (ICS) is another powerful yet simple Cloud platform offering by Oracle that simplifies the development of cloud and hybrid integrations (applications in the cloud and on premises).

The entire integration development and operational lifecycle is managed through a web based service console offering a point and click integration and monitoring experience without having to write a single line of code.

Furthermore Oracle ICS supports various industry standards like SOAP and REST and comes with a set of cloud adapters providing pre-integration capabilities with several SaaS applications (such as Oracle ERP Cloud, Oracle HCM Cloud, Oracle Sales Cloud, Oracle RightNow, Eloqua, NetSuite and Salesforce) shortening the time-to-market in integration projects.

The concepts in Oracle ICS are really simple; you create connections (using the pre-defined offered adapters) and leverage those connections to create integrations which you can then dashboard monitor to track the current state of your running integrations and fix any errors that might occur.

Oracle ICS supports three types of integration patterns:
  • Map My Data: You can create an integration where using your own adapters can define a a custom source and a custom target (and define routing paths and data mappings)
  • Publish to ICS: You can create an integration where you can configure a service to publish message to ICS through a predefined ICS Messaging target (which is created for you automatically by choosing this pattern)
  • Subscribe to ICS: You can create an integration where you can configure a service to subscribe to messages from ICS through an ICS Messaging source (which is created for you automatically by choosing this pattern)
In this first part of a three part series on Oracle ICS integration patterns we will see in detail how you can use the "Map My Data" integration pattern in a simulated use case.

The use case is really simple; I have a service that processes a purchase order. Based on the order total it will either automatically approve the purchase or will route it for manual approval. The logic has been implemented in Java using two methods; processPurchaseOrderBS representing the business service where the actual logic has been implemented and the processPurchaseOrderPS acting as a wrapper/proxy service.

Using the JDeveloper embedded JAX-WS capabilities I have exposed those two Java methods as web services and deployed them on my Integrated Weblogic Server.

So the first thing that we need to do is to create a connection to the on-prem web services exposed in the previous step. From the Oracle ICS home page click on the "Create Connections" banner image and from the "Connections" page click on the "Create New Connection" button.

From the "Create Connection - Select Adapter" popup the "SOAP" adapter to create a SOAP connection to the "Process Purchase Order" web services.

In the "New Connection - Information" popup enter a connection name, and optionally update the identifier populated automatically based on the connection name, default version and provide a description, and click "Create".

From your connection's home page click on the "Configure Connectivity" button and enter the WSDL url of your web service and click "OK".

By default when you create a new connection in Oracle ICS, it pre-populates the security section with the "Username and Password Token"security policy. I did not configure any security in my "Process Purchase Order" services therefore i will turn security off. To do so click on the "Configure Credentials" button and from the "Credentials" popup select "No Security Policy" from the "Security Policy" drop down list and click "OK".

Now we can test our connection. From the top right section of your connection's home page click on the "Test" button and ensure that your connection is successful. 

Save and close the connection details. You should be redirected to the connections home page and your connection should feature at the top of the list of connections and marked as "New".

We can now go on and create our integration. Using the menu on the left click on the "Integrations" link to navigate to the integrations home page and click on the "Create New Integration" button.

From the "Create Integration" popup select the "Map my Data" integration pattern.

In the "New Integration - Information" popup enter an integration name, and optionally update the identifier populated automatically based on the integration name, default version and provide a description if needed, and click "Create".

You should be presented with the integration canvas with an empty source and an empty target. 


From the "Connections" palette on the right of the canvas, drag and drop the connection created in the previous steps (if you followed my exact instructions it should be named "Process Purchase Order") to the source placeholder.

This will bring up the SOAP Configuration Wizard to help in configuring the source endpoint. Enter a name for your endpoint (I named it "ProcessPurchaseOrderPS") and click "Next".

In the second step of the SOAP Configuration Wizard select the operation name from the "Select the Operation" drop down list (in my example I selected "processPurchaseOrderPS") and click "Next".

In the third and last step review the source endpoint configurations and click "Done".

Do the exact same thing for the target endpoint (using the same connection as with the source endpoint) but this time give your endpoint a different name and select the other operation from the operations drop down list (I named the endpoint "ProcessPurchaseOrderBS" and selected the "processPurchaseOrderBS" operation).

Your integration canvas should now be populated with a source and a destination target.

Next we will need to map the request data from source to target and then the response data from target to source. Click on the "Request Mapping" and click on the "plus" icon to create a new request transformation.

Map orderId to orderId and orderTotal to orderTotal by just drag and dropping the source element to the target element.

For the target "fullname" we will have to concatenate the first name and last name elements from source. To do so click on the "fullname" destination element to open the "Mapping Builder". Expand "Mapping Components" and from the "Functions" category expand "String"and drag and drop the "concat" function to the right (just below "fullname") and map "firstname" to string1 and "lastname" to string2.

Click "Save" and close the "Mapping Builder". Your request transformation should look like below.

Save and exit the request mapper. We now need to do the same thing with the response data but this time we need to map the target response to the source response (drag the "result" target element to the "result" source element).

On the top right of our integration we have a progress bar showing the progress of our integration. If you click on it you will see the missing steps. Doing so we can see that we are still missing one step, to configure tracking for our source,

Oracle ICS enables you to declaratively define business identifiers to enable runtime tracking on messages. To do so click on the "Tracking" button. This will open the "Business Identifiers for Tracking" popup. Drag and drop the "orderId" element to the tracking field and specify a business friendly tracking name (named it "Order Id") and click "Done".

The integration progress should now show 100% complete. Save and exit your integration to be redirected to the integrations home page where you should be able to see your integration at the top of the list, marked as new and with a new option to activate the integration.


Click on the "Activate" button to activate the new integration we just created. In the "Confirmation" popup click on "Activate"and your integration should show as "Active".

By activating your integration Oracle ICS has created a new ICS specific endpoint url for your integration for invocation which can be found by clicking on the "info" button next to your integration. I will use this endpoint url to test my integration (using SoapUI).


I will first invoke my integration by supplying an order with an order total less than 100 to see if the integration will return an auto-approval status.

Please note that if you attempt to invoke your integration without a username and a password token and a timestamp you will get a security exception "OSB-386200: General web service security error").

After invoking my integration supplying the request a username, password and a timestamp I can now see a auto-approval response back from my integration.


If you invoke the integration with a higher value order total (in the example below 110) you should get a different response back (pending manual approval).

Oracle ICS provides you with a monitoring dashboard where you can visually see how your integrations are performing during runtime. To access this dashboard simply click on the "Dashboard" link/button on the horizontal navigation toolbar.

The default view lists all activated integrations with a summary view on the top and a detailed view per integration just below listing key KPIs such as the average response time, messages received, message processed and faulted messages.

If you navigate to the "Tracking" page you will see all messages processed by default in the last 1 hour by all active integrations. Please note how instances are displayed; they are displaying using the custom business identifiers defined.

You can view the details of a specific instance by just clicking on the instance link. The instance will open in the integration canvas in viewing mode where you can inspect the business identifiers, go to the audit train and view any error messages.


Wednesday, December 2, 2015

SOA Magazine edition VI

The SOA Magazine 6th edition is out!

The latest edition of the SOA Magazine focuses on a summary from Oracle Open World 2015 of which I had the honor to author and publish my three-part blog post series on "BPM 12c Events".

Make sure you subscribe to the magazine to enjoy all this wealth of information, for free!