Tuesday, November 26, 2019

OIC - Create a DB connection - Trigger and Invoke Role Type

Go to Designer⇾Connections⇾Create
 Select the Oracle Database adapter
 Provide the Name, Role and description.
 Click Configure Connectivity
 Provide DB connection details
 Click Configure security
 Provide DB User and password
 Click Configure Agent and select agent needed.

 Now Test
 Save and Close


Oracle Integration Cloud (OIC) - Introduction

Introduction:
  • Oracle Integration Cloud (OIC) and Integration Cloud Service (ICS) are iPaaS offerings from Oracle. 
  • ICS was released back in 2015 has now been superseded by OIC. Customers on ICS can choose to be on ICS or migrate to OIC to take advantage of new features and services built into OIC.
  • It offers a user-friendly web-based interface enabling 'Integrators' to quickly perform some basic mapping and integration between (cloud) applications. with a growing number of available cloud applications(not only from oracle), customers face the challenge of keeping these solutions in sync, a challenge in which Oracle ICS can help us out.
  • Data Exchange between Cloud and On-Premise or 3rd Party applications.
  • The product comes with over 60 adapters.These adapters cover Oracle and non-Oracle SAAS and On-Premise apps as well as technology adapters such as SOAP and REST.
Benefits of using OIC:
  • A unified platform to automate processes
  • Integrate and create applications
  • Analyze results
  • Use Pre-build integrations or design your own integrations
  • No coding required
  • Interactive dashboard for real time insight of process flows
  • Monitor errors and take corrective actions
  • Minimize human error by automating the flows.
OIC in relation to Oracle SOACS:

Oracle SOA offers the SOA Suite as a cloud Service(SOACS) for solving the same integration issues as OIC does.SO why  also offer OIC?
  • Oracle ICS is positioned for the 'LOB Developer'(Line of Business Developer). The developer who actually functionally knows the application's being integrated. 
  • The developer who does not necessarily understand SOAP/REST/XML and other integration related technologies but does understand the underlying business entities, and which ones should be integrated between applications. 

Services available in Oracle Integration cloud:

Create and Manage Integrations(Integrations)  >> ICS / OIC
Launch the design-time environment for integrations. Create and activate integrations, as well as their connections and orchestrations. work with look ups, packages, agents, and  adapters.

Build Automated Process Applications(Process Biulder) >> PCS
Launch the design-time environment for process applications. Create process applications from scratch or by using quick start apps. Model processes in the process editor, and create web forms and decisions. Perform design-time administration such as playing, testing and deploying applications.

Develop Web & Mobile Applications(Visual Builder) >> VBCS
Create and publish web and mobile applications.

Use cases:
SAAS to SAAS:
All cases created in Salesforce are being synchronized with ServiceNow as incidents.

SAAS to On-Premise:

Update of opportunities in Salesforce propagated to on-premise Order Management.

Aspects of OIC Integrations:

Connections:
  • Connections define information about the instances of each configuration you are integrating. 
  • OIC includes a set of predefined adapters, which are the types of applications on which you can base your connections such as Oracle Sales Cloud, Oracle Right Now and others.
  • A connection is defined as any endpoint(Source or target) that is implemented within  an integration flow. These connections are based on  defined adapters.Adapters allows for easy connectivity to applications. insulating  the developer from complexities  that can occur when  interacting  with an application. 
  • OIC includes different kind of adapters like Oracle adapters, Non Oracle adapters, Technology specific adapters and social networking adapters etc.
Integrations:

  • Integrations are the main ingredient of a oracle integration cloud. An integration includes at least a trigger(source) connection (for requests sent to Oracle Integration Cloud) and invoke (target) connection (for requests sent from OIC to the target) and fields mapping between those two connections.
  • Integrations are processes that utilize connections to implement a business process. Using drag and drop capabilities, an integration can easily be defined. The functions defined within the VETO(validate, Enrich, transform and operation) integration design pattern are available for implementation.
Prebuild Integrations:
Apart from developing your own integrations in Oracle ICS, one can also leverage integrations build by others.

Lookups:

  • Use lookups in your integrations to create reusable tables that map the different terms used to describe the same item across your applications.
  • A bit like DVMs in SOA Suite, can cross-reference values of the same attribute/element when mapping from one system to another.

Packages:
Packages allow for grouping of integrations,providing the abilities to import and export packages between environments.

Agents:
Agents are used to connecting to On-premise applications, For example, if you are using On-premise systems like ERP/SAP and also using Oracle OIC in the same implementation, you would have to use an agent to connect to the OIC application. Two types of ageents arw available:
  1. Connectivity agent
  2. Execution agent
Libraries:
Libraries is a file or a collection of multiple files bundled in a JAR containing JavaScript functions. Library is used within an Integration and is executed by a JavaScript engine on the server as a part of integration flow.
Adapters:
Use an adapter to connect to an application in your integration. Oracle adapters are ready to use and pre-built block of code for the specific technology. 

Basic Integration flow:

Integration Workflow


Integration patterns or styles:

App Driven Orchestration
Create an integration that uses an event or a business object to trigger the integration. For example, you create an integration with an Oracle RightNow Adapter as a trigger and an Oracle Engagement Cloud Adapter as an invoke. The Oracle RightNow Adapter subscribes to an event from the Oracle RightNow application to trigger the integration.
Orchestration integrations include features such as the following:

  • Switch activities to create multiple routing expressions.
  • For-each activities for looping over repeating elements.
  • Assign activities for assigning values to scalar variables.
  • Ad-hoc mappings on switch branches.
  • Callback activities (to end a process and respond back to the sender) and end activities (to end a process without responding back to the sender) in asynchronous integrations.

Scheduled Orchestration
Create an integration that uses a schedule to trigger the integration instead of an adapter. For example, you add an initial invoke adapter to read a trigger file and a second FTP adapter to download the file for further processing. After designing this integration, you schedule when to run it.
File Transfer
Create an integration to move files across a network.
Basic Routing
Create an integration with a blank trigger and invoke in which to add your own adapters. You can also create a single routing expression and request and response enrichments, as needed. You cannot create multiple routing expressions. If your integration requires this feature, create an orchestrated integration.
Publish to OIC
Create an integration in which you add a trigger adapter to publish messages to Oracle Integration through a predefined Oracle Integration Messaging invoke. No configuration of the invoke subscriber is required.The publisher and subscribers participating in this integration pattern can be activated and deactivated independently of each other.
Subscribe to OIC
Create an integration in which you add an invoke adapter to subscribe to messages from Oracle Integration through an Oracle Integration Messaging trigger. You are prompted to select the publisher to which to subscribe. You must have already created a publisher to which to subscribe. The publisher does not need to be active, but must already be completely configured.

Any business identifiers defined on fields in the published integration are copied to the subscriber. Any changes made to the published integration’s business identifiers after copying are not reflected in the subscriber. The publisher and subscribers participating in this integration pattern can be activated and deactivated independently of each other.

Mapper:

A Visual Mapper is provided that enables you to map fields between applications with different data structures by dragging source fields onto target fields.

Monitoring:
OICS dashboard displays information about the current sate of all running integrations, successful messages ratio, connections etc.


Check all Oracle Services:

https://www.oracle.com/cloud/free/

Register for oracle cloud:

https://myservices.us.oraclecloud.com/mycloud/signup

With Oracle subscription:
  • 30 days free trial having $300free credits.
  • Access to  a wide range of Oracle cloud services for 30 days including database, analytics compute and container engine for kubernates
  • up to eight instances across all available services.
  • up to 5 TB of storage,
  • Autonomous transaction processing or autonomous data warehouse 2 database total each with 1OCPU and 20 GB storage.
  • 2 block volumes 100 GB total, 10 GB object storage 10 GB Archive storage,

Wednesday, November 20, 2019

12c SOA - how to specify Inline schemas within a WSDL file

Inline Schemas are a way of including the schema within a WSDL file rather than specifying that it be imported.

There are two ways of including a schema within a WSDL file.
  • One way is to specify that it be imported; that is, the schema is a separate file. Its highly reusable.
  • Another way, called inline schemas, is to include the schema inline with the file. Its only used in one WSDL file and to use in another WSDL, have to copy the inline schema from the existing WSDL file to the new WSDL file
Suppose we have the following XSD.

Simple Dept Schema:
<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.dept.poc"
            targetNamespace="http://www.dept.poc" elementFormDefault="qualified">
  <xsd:element name="Process">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="DeptId" type="xsd:string"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
    <xsd:element name="ProcessRes">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="DeptName" type="xsd:string"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

WSDL with imported xsd:
<?xml version= '1.0' encoding= 'UTF-8' ?>
<wsdl:definitions
     name="getDept"
     targetNamespace="http://xmlns.oracle.com/SOAApplication/PreferenceProject/getDept"
     xmlns:tns="http://xmlns.oracle.com/SOAApplication/PreferenceProject/getDept"
     xmlns:inp1="http://www.dept.poc"
     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    >
    <wsdl:types>
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <xsd:import namespace="http://www.dept.poc" schemaLocation="../Schemas/Dept.xsd"/>
        </xsd:schema>
    </wsdl:types>
    <wsdl:message name="requestMessage">
        <wsdl:part name="payload" element="inp1:Process"/>
    </wsdl:message>
    <wsdl:message name="replyMessage">
        <wsdl:part name="payload" element="inp1:ProcessRes"/>
    </wsdl:message>
    <wsdl:portType name="getDept_ptt">
        <wsdl:operation name="getDept">
            <wsdl:input message="tns:requestMessage"/>
            <wsdl:output message="tns:replyMessage"/>
        </wsdl:operation>
    </wsdl:portType>
</wsdl:definitions>

We can modify from imported to inline schema following the steps:
  • Add the target namespace of the XSD.
  • Instead of import statement, use the schema elements inside schema element.
WSDL with inline schema:
<?xml version= '1.0' encoding= 'UTF-8' ?>
<wsdl:definitions name="getDept" targetNamespace="http://xmlns.oracle.com/SOAApplication/PreferenceProject/getDept"
                  xmlns:tns="http://xmlns.oracle.com/SOAApplication/PreferenceProject/getDept"
                  xmlns:inp1="http://www.dept.poc" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:types>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.dept.poc">
      <xsd:element name="Process">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="DeptId" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="ProcessRes">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="DeptName" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="requestMessage">
    <wsdl:part name="payload" element="inp1:Process"/>
  </wsdl:message>
  <wsdl:message name="replyMessage">
    <wsdl:part name="payload" element="inp1:ProcessRes"/>
  </wsdl:message>
  <wsdl:portType name="getDept_ptt">
    <wsdl:operation name="getDept">
      <wsdl:input message="tns:requestMessage"/>
      <wsdl:output message="tns:replyMessage"/>
    </wsdl:operation>
  </wsdl:portType>
</wsdl:definitions>


Monday, November 18, 2019

12c SOA - Modification of existing ESS scheduler

Sometimes we may need to modify the existing ESS schedulers due to Job execution time changes or day light saving time adjustment.

A scheduler can be modified in following 3 steps.

Step 1: Modification of existing scheduler.
Target navigation⇾Scheduling services⇾ESSAPP
Go to Scheduling servicesJob requestsDefine Schedules
Type the Job definition name and click go.
Your job will appear, select he job and click edit.
 Edit Schedule page will open. Click Change Frequency. It will display a warning message. Click yes.

Go to start dateclick the select date time button.
Here in this example we have increased 5 min.
Note: After modification of time always select next day else it will trigger all schedulers from the start day till current day.
In this example we have selected 14th because current day is 13th . If we select 13th and only change time then it will trigger all schedulers from 12th till 13th .
Click ok.
 Step 2: Submit the job request.
Now go to scheduling services⇾job reques⇾Submit job request.

Select the use existing schedule radio button. Enter the name of the schedule and click search icon.
Again enter the name of the schedule and click forward arrow to search. Your schedule will appear. Select your schedule and click ok.
Your schedule will appear with all its detailsclick ok to submit the schedule.
 Step 3: Delete the old parent of the scheduler.
Go to Scheduling service⇾job request⇾search job request
Select the All scheduling services sharing ESS repository radio button, enter your job definition name and un-check the succeeded checkbox in submitted tab.
Else it will give all the schedulers and we won’t find our specific scheduler.
Here our scheduler appears in the first line of search. The last line is n/a. n/a means parent of current scheduler. A scheduler can have only one parent. So select the old parent and cancel it.
In the following screen shot we have cancelled the old parent.

NOTE: It is a good practice to keep the definition name of the job different from schedule name.
Ex: Definition name: ApplicationName_AutomaticTrainingWelcomeEmail
       Scheduler name: ApplicationName_AutomaticTrainingWelcomeEmail_daily

Friday, November 15, 2019

12c SOA BPEL - Set and Get Preference Property

By adding Preference property in composite.xml, we could get the value as variable into our BPEL process and later we can change the value from the EM console.

<component name="Helloworld">
    <implementation.bpel src="Helloworld.bpel"/>
    <property name="bpel.preference.MyPreference">Value</property>
</component>

Now we can use this MyPreference value in our BPEL process by using the following function
ora:getPreference(MyPreference)

Implementation steps:
Create a SOA Project



 Choose Synchronous BPEL Process

Open Composite.xml file in source mode and add Preference property in inside Component section.
Here I am using it for Email so my property name is "bpel.preference.Email", you can give it any name as per your requirement.

                 bpel.preference.{CustomName}

<component name="PreferenceBPELProcess" version="2.0">
    <implementation.bpel src="BPEL/PreferenceBPELProcess.bpel"/>
    <componentType>
<service name="preferencebpelprocess_client" ui:wsdlLocation="WSDLs/PreferenceBPELProcess.wsdl">
<interface.wsdl interface="http://xmlns.oracle.com/SOAApplication/PreferenceProject/PreferenceBPELProcess#wsdl.interface(PreferenceBPELProcess)"/>
      </service>
    </componentType>
    <property name="bpel.config.transaction" type="xs:string" many="false">required</property>
    <property name="bpel.preference.Email">test1@test.com</property>
  </component>
Use this preference property inside BPEL.
To use this property inside BPEL you need to use ora:getPrefernce("CustomName") function.
ora:getPreference('Email')



 Deploy and Test from EM console

Update preference property value in EM console.
We can update this property from System MBean Browser inside EM console.
 Go to EM console (http://host:7001/em)⇾Navigate to "Farm_base_domain"⇾"Weblogic Domain" folder⇾ Right click on your domain⇾"System MBean Browser"
Go to Application defined MBean Browser⇾"oracle.soa.config"⇾"soaserver"⇾"SCAComposite"⇾Choose your composite
 Then navigate to "SCAComposite.SCAComponent"⇾your component name⇾Click on "properties"
 Now you can see all the preference properties that you defined in your composite. You can change preference property value here.


Notes:

  • If you restart the servers or re-deploy the composite then it will take the default preference value set to the composite.xml.

Thursday, November 14, 2019

12c SOA XSLT - Use of Template Rules or apply-templates

Template Rules or apply-templates: 
Template rules are xsl:template statements with match attributes. Template rules are supported by the XSLT Map Editor. <xsl:apply-template> tag signals the XSLT processor to find the appropriate template to apply, based on the type and context of each selected node.

<xsl:apply-templates> is a little different with named template and it is the real power of XSLT: It takes any number of XML nodes (whatever you define in the select attribute), iterates them (this is important: apply-templates works like a loop!) and finds matching templates for them:

A concept to understand with XSLT is that of the "current node". With <xsl:apply-templates> the current node moves on with every iteration, whereas <xsl:call-template> does not change the current node. I.e. the . within a called template refers to the same node as the . in the calling template. This is not the case with apply-templates.
There are some other aspects of templates that affect their behavior: Their mode and priority, the fact that templates can have both a name and a match. It also has an impact whether the template has been imported (<xsl:import>) or not. These are advanced uses and you can deal with them when you get there.

Use case:
Here i will concatenate the employee names with a space from a set of employess input xml using apply template.
Input XML:
<Employees>
 <Employee>
  <Id>1ws</Id>
  <Name>test1</Name>
 </Employee>
 <Employee>
  <Id>2ws</Id>
  <Name>test2</Name>
 </Employee>
</Employees>

Output expected: test1 test2

Implementation steps:

Create a SOA project



 Choose synchronous BPEL process
 Change the XSD as required.


 Choose the source and target payloads

 Add the apply templates
<xsl:template match="/">
    <ns0:processResponse>
      <ns0:result>
        <xsl:apply-templates select="/ns0:Employees/ns0:Employee/ns0:Name"/>
      </ns0:result>
    </ns0:processResponse>
  </xsl:template>
  <xsl:template match="/ns0:Employees/ns0:Employee/ns0:Name">
    <xsl:value-of select="concat(' ',.)"/>

  </xsl:template>

 Deploy and Test


Wednesday, November 13, 2019

12c SOA - Generate a random/unique number in XSLT ?


A unique ID needs to be assigned to every asynchronous request for tracking the status/uniquely identifying the request message. The ID needs to be universally unique (UUID) that is generated by the Oracle SOA Systems (ESB/BPEL) to correlate the request for future reference. You can take advantage of the XPath Extension Function orcl:generate-guid() that comes out-of-the box and format it accordingly like this: 

In XSLT:
<xsl:variable name="RandomNum">
    <xsl:value-of select="orcl:generate-guid()"/>
   </xsl:variable>

In BPEL:
   <variables>
        <variable name="correlationID" type="xsd:string">
          <from>oraext:generate-guid()</from>
        </variable>
      </variables> 
  

Featured Post

11g to 12c OSB projects migration points

1. Export 11g OSB code and import in 12c Jdeveloper. Steps to import OSB project in Jdeveloper:   File⇾Import⇾Service Bus Resources⇾ Se...