Implementing Oracle Integration Cloud Service

Understanding Oracle's Integration Cloud Service and how to get the most out of your implementation

Applying configuration management and related dev practises – ICS Definitive Guide #3

Good development practises such as  configuration management and naming conventions have been a topic of conversation a number of times recently for us when it comes to ICS. In this post we will look at what configuration management means to ICS and the application of naming standards.

Why Configuration Management?

So why do we need configuration management with a tool such as ICS? The question depends on what stage of the software lifecycle you are, but a few reasons:

  • As a developer there have been occasions where we have tried to optimise something and then decided to reverted back to the last secured state in configuration control.
  • Deleted something and then regretted it, whilst desktops have the concept of paper basket to recover from, not so in ICS.
  • If your providing packages of ICS functionality you may have different released versions – so need to keep master copies of every version available to refer to.
  • Sometimes we get ‘configuration drift’ – and therefore need to have a reference point to compare to. This allows us to determine the drift and if it is appropriate to reset an environment. Whilst this may sound less significant, it is enough of a problem for tools like Puppet to incorporate the ability.
  • Tracking what versions of integrations are running in a development vs production environment.

The following diagram shows the development lifecycle and where these scenarios fit.

Configuration management life cycle

Whilst it is possible to achieve a configuration control by managing assets through the use  of just a filing system; using a repository allows you to track who applied the changes, when and create tags to label significant versions. Not to mention that not many file systems are easy to  share or handle change conflict. With many of the cloud offerings, Oracle will provide Developer Cloud Service which includes a GIT repository.

Whilst neither GIT or SVN are recommended solutions for binary artefacts (more on this here) it is a solution within the Oracle ecosystem.

Artefacts In and Out of ICS

So how do you get the content of ICS to and from a configuration repository? ICS provides the means to export integrations or packages either manually or through scripting of the REST API. For example to retrieve an integration we can use a CURL command like the following:

curl -X GET -u jstein:welcome1 -H “Content-Type:application/json” -o ./TestProject.iar

As you can see we call the export operation on the TEST integration with a version of 01.00.000 and direct the output to a file called TestProject.iar.  This file can then be checked into GIT.  As explained in the book, .iar files are a form of zip file, so binary in nature.  Being able to use GIT or SVN to perform differences is not really an option directly.  However their are tools which can be used to compare the contents of ZIP files, for example:

Correspondingly the REST API also allows for imports (load into) ICS with commands like:

curl -X PUT -u jstein:welcome1 -H "Content-Type:application/json" \
-F file=@"TestProject.iar;type=application/octet-stream" \

This time we tell ICS to read the file as an octet stream using cURL (as it is binary) – note that we don’t address a specific integration in the target URL. The other thing to be aware of is whether the import is creating or replacing an integration. This is differentiated by the use of PUT (replace) vs POST (create).

Automating a full snapshot

Whilst the two examples show how you can retrieve (export) and upload (import) specific integrations.  You also need to get hold of all the integrations to automate the snapshot of an environment. Necessary as it is so easy to develop changes and forget to snapshot or baseline the integrations.  so you might want to periodically snapshot the entire set of integrations within your ICS environment.

This can be done coupling the REST API that allows us to retrieve a list of integrations, and then the results can be iterated over.  The following API will retrieve that list:

curl -X GET -u jstein:welcome1 -H "Content-Type:application/json" -o integrationList.json

This will provide a json file called integrationList.json over which we then need to retrieve the self elements as they point to the URL of the integration to export. If you look carefully you can also see the lastupdated stamp in each integration description. This could be used to tune the snapshot to just retrieve those integrations that have changed. But be aware, this information maybe reporting in a different timezone to the timezone your script will be comparing with.

Tracking Between Development and Production

With the ability to import and export integrations. There are several options for tracking the versions of integrations between environments. the simplest, but also the most susceptible to error, is simply compare CRC values on the .iar file with you your GIT version. More elegant would be to actually annotate the contents of the .iar file (we would suggest the Description element in the PROJECT-INF/project.xml file). This does create the issue of opening up the .iar to apply the annotation and dependency .iar file structures not changing.

Coding Standards

Industrialization of development goes beyond configuration management, and should consider things like coding standards? The question may beg, why do we need such things when you do not code? It is true ICS does not involve coding in the traditional sense (although the introduction of JavaScript capabilities will start to change that); but coding standards include simple things like naming conventions – and we certainly name things in ICS.

Let’s step back, why do we have coding standards? We use such standards to drive consistency and ease of understanding across a team and over time, this holds true for ICS equally as much as a traditional development platform and even system configuration.

You’ll note through the book we adopted a camel case approach for readability and post fix in the names to indicate the associated chapter. This point is underlined by several posts on the SOAJavaPoint blog suggesting conventions.  The important thing is to agree with everyone involved the standard and comply to the agreed standard.

If you are creating JSON definitions, XML schemas, and SOAP endpoints for your integrations you should consider your guidelines for naming there as well.  We typically followed XML conventions in the book.

Checking on Naming Compliance

With the ability to export the integrations.  Compliance can be done by unpacking the .iar file and then running some basic parsing on the configuration files. With the .iar file unpacked applying XQuery to locate the relevant elements within a configuration file along with a REGEX path and it would be easy to validate whether people are applying the conventions or not. Within Chapter 13 of the book we actually looked at the breakdown of the .iar file.

Using iCal in Scheduling – ICS Definitive Tip #3

In ICS Definitive Guide #2 we looked at the scheduling of integrations and mentioned the possibility of using iCal. In this tip we shall explore advanced iCal facility for defining schedules within ICS.

icalThe iCal format is probably best known for sharing meeting events in tools such as outlook. The format is actually a standard defined by the IETF originally in 1998 (  and updated several times the latest being IETF Logo - owner of iCal std 2015 ( The goal of the definition has been for the purpose of driving standardisation across PIM tools (Personal Information Management) tools which includes Outlook and Thunderbird etc. It is a substantial standard the original document ran to 150 pages, but the section supported by the schweduler’s advanced option purely relates to the reoccurence definition covered by section 4.3.10 of the original RFC, and only takes five pages. If you want to know lots about iCal and the varying revisions then you may find helpful.

It is worth mentioning that today ICS under the hood exploits Oracle’s Enterprise Scheduler Service (ESS). ESS documentation identifies that it works to the 2445 version of the specification (see here). ESS became a 1st class citizen component with the start of the 12c middleware product stack. As a result, if you see any errors processing an iCal configuration the error codes will reference ESS does.

So why suopport for this part of the iCal standard. Well unlike the UI provided, the FREQ definition with all the elements of the definition that can be provided mean some very sophisticated schedules can be defined.  For example you could create a definition that says the scheduler should only trigger 9.15, 9.30, 14.15, 14.30 on Wednesdays for week numbers 7, 8, 21 and 49.


For ease of reference, the definition of how a FREQ element should be created is, according for RFC2445:

“FREQ”=freq *(

; either UNTIL or COUNT may appear in a ‘recur’,
; but UNTIL and COUNT MUST NOT occur in the same ‘recur’

( “;” “UNTIL” “=” enddate ) /
( “;” “COUNT” “=” 1*DIGIT ) /

; the rest of these keywords are optional,
; but MUST NOT occur more than once

( “;” “INTERVAL” “=” 1*DIGIT ) /
( “;” “BYSECOND” “=” byseclist ) /
( “;” “BYMINUTE” “=” byminlist ) /
( “;” “BYHOUR” “=” byhrlist ) /
( “;” “BYDAY” “=” bywdaylist ) /
( “;” “BYMONTHDAY” “=” bymodaylist ) /
( “;” “BYYEARDAY” “=” byyrdaylist ) /
( “;” “BYWEEKNO” “=” bywknolist ) /
( “;” “BYMONTH” “=” bymolist ) /
( “;” “BYSETPOS” “=” bysplist ) /
( “;” “WKST” “=” weekday ) /

( “;” x-name “=” text )

enddate = date
enddate =/ date-time ;An UTC value
byseclist = seconds / ( seconds *(“,” seconds) )
seconds = 1DIGIT / 2DIGIT ;0 to 59
byminlist = minutes / ( minutes *(“,” minutes) )
minutes = 1DIGIT / 2DIGIT ;0 to 59
byhrlist = hour / ( hour *(“,” hour) )
hour = 1DIGIT / 2DIGIT ;0 to 23
bywdaylist = weekdaynum / ( weekdaynum *(“,” weekdaynum) )
weekdaynum = [([plus] ordwk / minus ordwk)] weekday
plus = “+”
minus = “-”
ordwk = 1DIGIT / 2DIGIT ;1 to 53
weekday = “SU” / “MO” / “TU” / “WE” / “TH” / “FR” / “SA”
;FRIDAY, SATURDAY and SUNDAY days of the week.

bymodaylist = monthdaynum / ( monthdaynum *(“,” monthdaynum) )
monthdaynum = ([plus] ordmoday) / (minus ordmoday)
ordmoday = 1DIGIT / 2DIGIT ;1 to 31
byyrdaylist = yeardaynum / ( yeardaynum *(“,” yeardaynum) )
yeardaynum = ([plus] ordyrday) / (minus ordyrday)
ordyrday = 1DIGIT / 2DIGIT / 3DIGIT ;1 to 366
bywknolist = weeknum / ( weeknum *(“,” weeknum) )
weeknum = ([plus] ordwk) / (minus ordwk)
bymolist = monthnum / ( monthnum *(“,” monthnum) )
monthnum = 1DIGIT / 2DIGIT ;1 to 12
bysplist = setposday / ( setposday *(“,” setposday) )
setposday = yeardaynum

Applying the syntax to get complex schedules

With all of that you have if careful all the information to create the most complex schedules you like.  To illustrate here is a validating example:


This translates to a schedule triggering every 3 years on May 2nd and 7th. As you can see trying to express this using calendars and menus would probably prove to be fairly complex. But pretty simple in text once the notation is understood.
We should address a couple of challenges that exist.

Avoiding the traps

Firstly (the current ICS documentation here) shows the example expression as:


However the example omits a key terminating semi colon (essentially each part of the expression needs to be terminated by a semi colon). So, the correct representation is:


Whilst not too serious, an easy mistake to make. Unfortunately today the error messages from ESS back to ICS are rather uninformative with an error message and code of

ESS-09402 Failed to compile recurrence expression

So if you see this error, our advise is to simplify the expression or build it up a piece at a time if you can.
The last issues we have yet to understand relate to the definitions support for extension attributes shown as x-name in the specification. Well to be honest, this is not important as ICS and ESS do not appear to have any extension elements. The slightly more troubling question, which we have yet to get to the bottom of, is the support for COUNT in the expression which does not appear to be accepted.

Using Integration Versioning – ICS Definitive Tip #2

In this Definitive Tip, we are going to look at the ability to use Versioning on Integrations to seamlessly deploy update integrations is an important requirement of any enterprise integration platform.

ICS supports the model of semantic versioning, perhaps better recognised as versioning as Major, Minor and patch.  Which is best described at

This post will demo a minor and then a major version change. So we can see how change as the behaviours change between the two. A major change indicates an likely change in definition and minor one reflects logical change.

Seeing Versioning in Action

To demonstrate versioning we need an integration that is currently active. Ideally, you will have some sort of data feed or test framework, such as SoapUI or even a simple cURL script regularly triggering the integration. We need this script running to demonstrate the impact of the cutover.

In our example we’re going to use the service from Definitive Guide #1 (DG1), but given that we are not going to really modify the service itself, this will work with any service you want.

Applying A Minor Change

With everything ready, we can start by cloning or creating a draft of our sample integration. With the clone or draft action we are presented with the Create dialog. In the dialog we can modify the version number at the major or minor levels, for example 1.00.0000 to 1.10.0000. We can complete this step using the Create button.

Version Number changed

With a new integration with same name as an existing integration. With a higher version number we can now make some modifications to the integration. The changes should be easy to spot in the demo, for example adding or changing Tracking ids.

Once the changes have been made, you can save the integration returning to the list of Integrations. The original integration is unimpaired so far, and any active calls are still showing as being handled by the version 1.00.0000 of the integration, as you can see in the next screenshot.

2 Versions of an Integration

Now, we activate the new integration. When the new integration becomes active, the older version will be deactivated. Leaving us with only 1 active integration, and we should see our test harness now triggering the modified (version 1.10) integration without having changed anything.

Major Version change

Unlike minor or patch changes, a major version change usually represents a break in the contract (service interface) and/or a change so radical in the integration it is likely to have sufficient impact on the use of the service to warrant other possible changes.  As you change will most likely demand change from the integration client(s) it becomes necessary to run both services in parrallel for a period to allow a change in usage. As a result you need ICS to support both versions running.

To illustrate the behaviour we can repeat the process of changing the integration that we applied in the minor version number change.  This time taking the version number from 1.10.0000 to 2.0.0000.  With the changes all safely applied, we will see in the integrations view the same integration with version 1.0 inactive, 1.10 active and version 2.0 inactive. Now we should activate version 2.0, rather than 1.10 being deactivated, we will see both active as shown in the next screenshot:

So the question begs, how does the invocation differentiate between the two instances?  If we look at the information for each integration we can see the answer, as we can see below:

V1.10 versioning information

V2 versioning information

As you can see the URL is different, with the URL version number having changed from/v01 to /v02. So if you trigger your test without any change we will see the v1.10 integration execute as before.  Now change the test harnesses URL to reference the v02 rather than v01 and then fire the test call. This time you’ll see your new instance execute.


As you can see we can transition integration changes without creating downtime on the endpoints. We also have a means to parallel run some integration changes.

Designer Content Filters – ICS Definitive Tip #1

Definitive Tips, like our Definitive Guide posts address features could not be incorporated into the book, either simply because the feature is new or simply down to the fact the new feature arrived since the book has been published. Unlike the Definitive Guide entries, the tips will always remain very short. The first tip will address content filters in the designer.

Designer Content Filters

Release 16.4.5 introduced a new filter feature to help improve the location of Integrations, Connections and other designer elements. If you visit the Integrations  parts of the designer for example, you will now see  additional options included in the banner as highlighted in the following screenshot:

Some of the designer views only have one filter option, although most have two. The following tables show the different filters available in each part of the Designer.

Connection Filters  Lookup Filters

Agent Filters Package Filters

Adapter Filters

Scheduling Orchestration Integrations – ICS Definitive Guide #2

This is the second article in the Definitive Guide series. This time we take a look at the ability to Schedule an Orchestration integration within ICS has arrived with release 16.4.5 release of ICS,   To demonstrate this, we are going to reuse our FlightSitRep endpoint from the book’s Chapter 3. If you have not got the book yet – it’s a WSDL one way integration that is connected to

Creating Scheduled Orchestration

From the Integrations screen we need to click on the New Integration button, and select the Orchestration pattern in the pop-up dialogue. The first thing we will see when creating an integration is the Create New Integration dialog, as shown here:

create new orchestration wizard

As you can see the dialog has a new toggle option which defaults to represent the common approach to Orchestration, that being event triggered through an event or object defined by a connection.

Read More

For Each activity for processing batches – ICS Definitive Guide #1

This is the first blog in our ICS Definitive Guide series. In this series we pick one feature that ICS offers and write the most detailed guide on it. This blog introduces the capability of processing batches using the For Each activity in orchestration type integrations.

These blogs follow the same writing style as the book. We sometimes use the same resources as we used in the book, which can be downloaded from the website of Packt. For this blog we are using the same WSDL as we used in chapter 5, Going Social with Twitter and Google, and as in chapter 10, Advanced orchestration with branching and asynchronous flows, but with a little change to one element.

The integration we are going to build simulates a notification send from our Airport Flight Schedules system with a list of persons that are missing / late for their flight. For each flight a list of persons are included in the notification. For each missing person a task is added to a Trello Board, used by the ground personal, to remove the passengers luggage from airplane.

Read More

iPaaS and Cloud Security

Oracle iPaaS SecurityWithin the Oracle iPaaS products you will encounter features that exist to help provide security or mitigate the risks of someone misusing Oracle cloud accidentally (or otherwise). These features look to mitigate security issues such as a Denial of Service (DoS) attack (e.g. flooding a web service with more calls than it can handle preventing genuine service calls for being serviced).

We thought it might be useful to pull some articles together that engage and talk about the challenges that can exist:

Consolidated References of 3rd Party Information on ICS

Last updated: March 21, 2017 at 21:35 pm

Online 3rd Party ResourcesWe have consolidated all the 3rd Party referencers we know of regarding ICS into this single page.

As we encounter new information we will update the details, and if you encounter useful information missing from this list, please let us know.

3rd Party References & Resources

Title Source Date
Promoting Integrations from dev to production Oracle A Team 02-16
ICS scripts for cleaning up environments Oracle A Team 06-16
SOA Myth Busters intro to ICS SOA Myth Busters Blog 05-16
Cloud Adaptors introduction Niall Commiskey (Oracle PM) 06-15
On Premise Agent Oracle A Team
Enhancing ICS Mappings with Java Classes Oracle A Team 01-17
ICS Intro AMIS (Oracle Partner) 05-15
Developer’s 1st Impression AMIS (Oracle Partner) 03-16
ICS connectivity Agent AMIS (Oracle Partner) 03-16
YouTube Channel Oracle
ICS and Salesforce Antonis Antoniou (Ace director) 12-15
2 Minute Tech Tip on ICS Oracle Tech Network
eBS Adapter with ICS Oracle A Team 04-16
ICS with Twitter AMIS (Oracle Partner) 03-16
ICS for offering REST versions of SOAP APIs AMIS (Oracle Partner) 02-16
ICS Security & Compliance Oracle A Team 05-16
ICS Use case: Closed Loop Order Management Oracle Community Blog 08-16
Oracle Integration Cloud Service (ICS) – How to use Upsert Operation Shalindra Singh 10-15
Oracle Integration Cloud Service – How to keep all data residing in your applications in sync esentri 05-16
Eloqua ICS Integration Oracle A Team 01-17
Understanding the Enterprise Scheduler Service in ICS Oracle A Team 01-17
Teaching how to use the Integration Cloud Service Connectivity Agent Solutions ANZ

(Oracle Australia)

Using ICS to offer APIs on integrations Solutions ANZ 02-17
Integrating Sales Cloud and Service Cloud using ICS – troubleshooting issues with security configuration Oracle A Team 01-17
ICS Connectivity Agent – Update Credentials Oracle A Team 02-17
Oracle ICS and Twilio: Publish-Subscribe Integration Pattern Rubicon Red 02-17
Help! What Integration Solution is Best for Me? Oracle Community 07-16
Oracle ICS + Twitter S&P Solutions 04-16
Oracle Integration Cloud Service Linkedin adapter. Oracle Radio 10-16
Oracle Integration Cloud Service Linkedin adapter (Spanish version) OTN 12-16
Help! What Integration Solution is Best for Me? Oracle Community 07-16
Integrate Your Applications in the Cloud Oracle Community 07-16
Integrate Your HR System with a Talent Management System in the Cloud Oracle Community 07-16
Using Oracle Managed File Transfer (MFT) to Push Files to ICS for Processing Oracle A-Team 02-17
ICS 17.1.3 – Javascript Libraries Niall Commiskey (Oracle Product Mgr) 02-17
Connecting ICS and Apache Kafka via REST Proxy API Oracle A-Team 02-17
Teaching how to use Developer Cloud Service to promote ICS Integrations into new Environments Solutions ANZ 02-17
Custom 2-legged OAuth with Oracle Integration Cloud Service (ICS) Solutions ANZ 02-17
Integrating with Taleo Enterprise Edition using Integration Cloud Service Oracle A-Team 03-17
Oracle Public Cloud – Invoking ICS endpoints from SOA CS – configure SSL certificate and basic authentication AMIS (Oracle Partner) 03-17
Lifecycle management – Test 2 Production Niall Commiskey (Oracle Product Mgr) 02-17
PCS 17.1.3 leveraging ICS Niall Commiskey (Oracle Product Mgr)
ICS Execution Agent Niall Commiskey (Oracle Product Mgr)
ICS Articles (Spanish)

Avanttic (Spanish Partner) 02 & 03-17
Suggested ICS Naming standards Gowrishankar’s Blogspot 02-17
Some ICS Best Practises (naming and eror handling) Gowrishankar’s Blogspot 02-17

Oracle Document Reference Links…

Reference Resource Link
Adapter Certification /adapters/documentation/index.html
ICS Documentation Home
Oracle Online Learning (OLL) You Tube – ICD Play List
Eloqua ICS Connectivity (Eloqua Help Center)
All A-Team ICS Posts

Tools That May Help …

Tool Link
Online WSDL pretty print/viewer
Web Services Directory
Apiary (Swagger / Open API & API Blueprint designer)

ICS Connection Agent on Windows?

We have seen the question a number of times (such as here) regarding whether or not the ICS Connection agent of Worker Agent can run on Windows. Presently when establishing an agent ICS provides a Bash shell executable (BSX) file.

We’ve not heard any suggestion this is likely to change – but when you consider that the Agent is essentially a WebLogic server with parts of ICS incorporated into it. You can see that from a production perspective, demand for Windows support isn’t going to be huge.

That said, when researching, testing, developing and testing a lot of people do use a Windows platform. So being able to use the agent is attractive.  So what options are available for a Windows environment?

Read More

Oracle Messaging Cloud Service on Trial

This post provides a fairly detailed introduction to registering and creating a trial instance of Oracle Messaging Cloud Service. We have written this as in our book Introducing Oracle Integration Cloud Service (ICS) we use Oracle Messaging Cloud  Service(OMCS) in chapter 8 to illustrate message based integration outside  of ICS. Whist we describe the process for OMCS, the mechanics are similar for a number of the iPaaS offerings from Oracle including ICS, PCS but not SOA CS as this is a far more complex product and the fee charging structure is rather different.

In the screenshots of the process that follows, we have blurred out key credentials, this is purely for personal security reasons.

The first step is to create the trial of OMCS, to do this you need an Oracle account. This can be done from the main Oracle site. If you already have an account with Oracle Technology Network (OTN) or Oracle community then you are already sorted as Oracle operates a single sign on.

Read More

Page 1 of 2

Powered by WordPress & Theme by Anders Norén