OFM Summer Camps 2015: Simplify Integration with ICS and SOA Suite CS

At this year’s Oracle Fusion Middleware Summer Camps in Lisbon (see also the post from our colleague Mohammed Esad-Djou) four Opitz consultants were attending the “Hybrid Integration with Integration Cloud Service, SOA Suite Cloud Service and SOA 12c” track. With this post we want to give you a short overview of the topics that have been covered within this week.

Let’s start with a recap of the main topic of our track, the Integration Cloud Service (ICS). With ICS Oracle offers cloud to cloud and cloud to on premise integration flows which can be developed very easily and quickly directly in the browser.  There are even recommendations on the most common data mappings to render the integrations as easy as possible. From our perspective it’s a great tool to quickly deliver Software as a service (SaaS) solutions which are not too complex: at the moment only point to point connections can be implemented. But there is also the option of an additional enrichment call in order to get more details into the data mapping.

More complex integrations in the cloud can be handled using the SOA Suite Cloud Service (SOA Suite CS) which provides its users with the whole set of SOA Suite’s capabilities. Users can either configure their SOA Suite and / or OSB on a single node “environment” or in a clustered mode. SOA Suite CS is not released yet but will be available pretty soon. Especially for smaller companies it might be an interesting approach to directly start working with SOA without having to invest in hardware and licenses first. The browser-based development can start without the need of special tools or elaborated configurations, so the expenditure can be invested in the product itself right from the beginning.

The third product we focused on was Oracle Stream Explorer, a web-based application, which allows users to deal with big data and event streams in real time. It enables users to create event processing tools and applications without having to write a single line of code: a great occasion for business users with little knowledge in programming but the need to create such applications!

One of the most promising features we were introduced to was the Cloud Adapter SDK which enables developers to write their own cloud adapters. In ICS there are already a lot of predefined cloud adapters available for connecting to Salesforce.com, RightNow, Oracle Sales Cloud and many more. The Oracle Marketplace will be used to publish such prebuilt cloud adapters written by Oracle or its partners. With the SDK new adapters can be built to be used within ICS but can also be imported into JDeveloper (or be used in parallel by both, of course). Eventually all JCA adapters will be rebuilt using the SDK, so there hardly seem to be any limits as far as the development is concerned. We’re very excited to see the first adapters developed by the community!

In a nutshell, we had a wonderful week in Lisbon: our trainers (Yogesh Sontakke, Ramkumar Menon, Robert Wunderlich and Simeon Greene) did a great job and provided us with a lot of information. We were able to do plenty of hands-on labs and meet so many great people from the community.

A special highlight for Opitz was that two of our consultants were invited to present a session on Closed-Loop-Ordermanagement using the Salesforce and SAP adapters within a BPMN process. The feedback was overwhelming:  it’s great to show that the theory also works in a real life scenario.

Last but not least there is one special person that we want to mention: thanks a lot to Jürgen Kress for organizing this event so perfectly: the food was great and the SOA Community event at a wineyard near Lisbon was also fantastic. Get specialized!!

Veröffentlicht unter Conference, English, Integration, Oracle FMW, SOA, Uncategorized | Kommentar hinterlassen

OFM Summer Camps V 2015: Cloud and above the cloud…

The OFM Summer Camps 2015 is finished successful (August 17th – 21st 2015 Lisbon Portugal) and Oracle Fusion Middleware community could review new capabilities of Oracle Cloud Service in different areas. More than 100 participants attended the event, learning much new stuff about new features and enhancements of Oracle Cloud Computing.

OPITZ Consulting Team in Sommer Camp 2015

OPITZ Consulting Team in Sommer Camp 2015

The four hands-on training were organized about the following topics:

  • Mobile and Mobile Cloud Service
  • BPM Suite 12c and Process Cloud Service
  • Hybrid Integration with Integration Cloud Service, SOA Suite Cloud Service and SOA 12c
  • Java Cloud Service

I try to give a short overview regarding Java Cloud technical workshop. As you know, Oracle Java Cloud Service is a part of the platform service offerings in Oracle Cloud. Powered by Oracle WebLogic Server, it provides a platform on top of Oracle’s enterprise-grade cloud infrastructure for developing and deploying new or existing Java EE applications.[i] With Java Cloud, you have an Environment to Build, Deploy, and Manage Java Enterprise Applications. Cosmin Tudor, Oracle Principal Product Manager, presented in 4 days technical workshop the different steps and capabilities of Java Cloud.

Oracle Public Cloud Strategy suggests a flexible solution that the customer can combine the private and public cloud approaches. From my point of view, the security aspects are not enough cleared in public cloud and therefore my advice regarding critical data and information is private cloud! I see an advantage that oracle can provide a stable solution regarding private cloud. We can use hybrid Oracle Cloud approach not only as PaaS and IaaS, but also DaaS and SaaS is now available in public cloud too.

Developer Cloud Service, as a Platform as a Service (PaaS) Development Environment for the Enterprise, can simplify development with an automatically provisioned development platform that supports the complete development lifecycle.

Oracle Data as a Service (DaaS) for Business allows businesses to use data as a standalone asset and connect with partner data to make smarter decisions. Oracle DaaS is a service in Oracle Cloud that offers the most variety, scale, and connectivity in the industry, including cross-channel, cross-device, and known and anonymous data. Use Oracle DaaS to drive intelligent actions for B2B and B2C organizations[ii].

In order to prepare our environment in technical workshop, we worked on Database Cloud Service too. Preparing Oracle Database in the Cloud was very fast and stable and we can await Oracle Database achieve new levels of efficiency, security, and availability.

In addition, working with Weblogic 12.1.3 and its new features was very amazing, specially using Oracle Traffic Director, JCS configuration – e.g. JCS network rules configuration, and Coherence clusters. It was important that many parts of workshop’s materials can be used as PoC for different needs of customer. Our working and training present us that Oracle Java Cloud Service is a complete platform with Oracle WebLogic Server as the application container, Oracle Coherence as a caching and data grid tier, and Oracle Traffic Director as the software load balancer.

I can summarize OFM Sommer Camp 2015 as bellow: A lot of things are done, a lot of things need to be done, and a lot of new ideas are here!

Special thanks to Jürgen Kress for the excellent organization of the event!

Thanks Simon Haslam for Foto and his comment: This is the room the *real* work is being done in – Cosmin’s JCS lab!

[i] See: http://docs.oracle.com/cloud/latest/jcs_gs/index.html

[ii] See: https://www.oracle.com/cloud/daas.html

Java Cloud Service Training - Sommer Camp 2015

Java Cloud Service Training – Sommer Camp 2015

Veröffentlicht unter Conference, English, JDeveloper, News, Oracle ADF, Oracle SOA Suite | Kommentar hinterlassen

Row-Level-Security mit Oracle Virtual Private Database

Virtual Private Database (VPD) ist ein Security Feature der Oracle Database Enterprise Edition (eingeführt mit Version 8i, teilweise auch unter der Bezeichnung Fine Grained Access Control – FGAC bekannt). Es bietet eine sehr einfache und verlässliche Möglichkeit zur Umsetzung von Row-Level-Security Konzepten, d.h. der Einschränkung der Sichtbarkeit (und Änderbarkeit) auf Ebene einzelner Datensätze.

Beispiel Bestellsystem

Nehmen wir als Beispiel ein Bestellsystem in welchem Kunden Aufträge platzieren können. Üblicherweise wird sich in der Datenbank eines solchen Systems eine Tabelle ORDERS mit allen Aufträgen aller Kunden wiederfinden. Jeder ORDER Datensatz enthält eine CUSTOMER_ID als Foreign Key auf den Kunden der den Auftrag platziert hat.

 +-------------+               +-------------+
 | ORDERS      |               | CUSTOMERS   |
 +-------------+               +-------------+
 | ORDER_ID    |---------------| CUSTOMER_ID |
 | CUSTOMER_ID | *           1 | NAME        |
 | ...         |               | ...         |
 +-------------+               +-------------+

In der zugehörigen Anwendung soll ein konkreter Anwender i.d.R. immer nur Zugriff auf seine eigenen Aufträge haben. Egal ob die Anwendung über einen technischen Nutzer oder mit einem personalisierten Account des konkreten Anwenders auf die Datenbank zugreift, sie kann (die notwendigen SELECT Rechte vorausgesetzt) zunächst einmal alle Datensätze aus der Tabelle ORDERS auslesen.


 ---------- ----------- ------------------
     100001         123 13-MAR-15
     100002         234 17-MAR-15
     100003         123 21-MAR-15
     100004         345 25-MAR-15

Es liegt oft in der Verantwortung der Anwendung nur die Datensätze des aktuell angemeldeten Anwenders abzufragen und anzuzeigen.


 ---------- ----------- ------------------
     100001         123 13-MAR-15
     100003         123 21-MAR-15

Verlagerung der Security Regeln in die Datenbank

Mit VPD kann diese Verantwortung in die Datenbank verlagert werden. Vereinfacht ausgedrückt kümmert sich VPD darum, dass jede Query welche auf die geschützte Tabelle zugreift automatisch um die oben genannte WHERE-Bedingung ergänzt wird und das transparent und in jedem Fall.

Die Verlagerung der Security Regeln in die Datenbank ist insbesondere dann interessant, wenn über verschiedene Wege (z.B. Applikation, Service-Schnittstellen und evtl. sogar direkt per SQL Client) auf die Daten zugegriffen wird. Security Regeln werden auf diesem Weg einmalig und zentral definiert/hinterlegt und in allen Fällen angewendet. Aber auch wenn ausschließlich eine Anwendung auf die Datenbank zugreift kann die Verlagerung in die Datenbank Sinn machen um den eher querschnittlichen Security Aspekt nicht in jedem einzelnen SQL-Statement der Anwendung berücksichtigen zu müssen.

Aufbau und Arbeitsweise einer VPD

Nachfolgend beschreibe ich die wesentlichen Komponenten einer VPD sowie deren Bedeutung und Zusammenspiel anhand des konkreten Beispiels von oben. Um die beschriebenen Schritte ausführen zu können benötigt der verwendete DB User neben den üblichen Privilegien (CREATE SESSION, CREATE TABLE, CREATE PROCEDURE, usw.) die folgenden speziellen Privilegien:


Mit VPD ist es prinzipiell möglich alle Zugriffe (SELECT, INSERT, UPDATE und DELETE) auf einzelne Datensätze, und sogar auf einzelne Spalten, einzuschränken. Im weiteren Verlauf betrachte ich jedoch nur das Lesen (SELECT) von vollständigen Datensätzen. Für weiterführende Informationen sei auf die unten aufgeführten Quellen verwiesen.

Security (Policy) Function

Die Security Policy Function (kurz auch Security Function) ist eine herkömmliche PL/SQL Function (auch Package Function möglich) welche die WHERE-Bedingung (Predicate) erzeugt die von VPD automatisch an die Queries gehängt wird. Sie definiert die Anwendungsspezifische Logik nach der die Security-Einschränkungen ermittelt werden. Die Function muss zwei Input-Parameter für den Schema- sowie den Objekt-Namen des Objects (Table, View, Synonym) erwarten und als Rückgabewert die WHERE-Bedingung zurückliefern, die beim Zugriff auf das Objekt verwendet werden soll.

  p_schema IN VARCHAR2, 
END orders_sec_function;

Eine Security Function kann für mehrere Objekte verwendet werden, wenn die WHERE-Bedingungen identisch oder zumindest ähnlich sind. Es können jedoch auch individuelle Security Functions für jedes zu schützende Objekt definiert werden.

Application Context

Häufig greifen Security Functions auf einen Application Context zu um daraus die notwendigen individuellen Informationen für die WHERE-Bedingung herauszulesen. In unserem Fall zum Beispiel die CUSTOMER_ID des zugreifenden Anwenders. Ein Application Context muss explizit angelegt werden und ist mit einem Package verbunden welches die API zum Ablegen und Auslesen von Inhalten bereitstellt.

CREATE OR REPLACE CONTEXT orders_sec_ctx USING orders_sec_ctx_pkg;

In meinen bisherigen Projekten erfolgt die Identifizierung  und Authentifizierung des Anwenders außerhalb der Datenbank in der Applikation. Daher muss diese die notwendigen Informationen ggf. vor der Ausführung einer Query in den Application Context der Datenbank schreiben. Als API dient das Application Context Package.

CREATE OR REPLACE PACKAGE orders_sec_ctx_pkg IS 
  PROCEDURE set_customer_id(p_customer_id IN NUMBER);
  PROCEDURE set_customer_id(p_customer_id IN NUMBER)
                'customer_id', p_customer_id);
  END set_customer_id;

Die Security Function kann die Customer ID des aktuellen Anwenders nun aus dem Application Context auslesen.

  p_schema IN VARCHAR2, 
  RETURN 'CUSTOMER_ID = SYS_CONTEXT(''orders_sec_ctx'', 
END orders_sec_fnc;

Security Policy

Die Security Policy verbindet die Security Function mit einem zu schützenden Objekt (Tabelle, View, Synonym). Sie wird mit Hilfe des Packages DBMS_RLS angelegt.

Die Parameter Object Schema und Name definieren dabei das zu schützende Objekt, in unserem Fall die ORDERS Tabelle.

Über den Parameter Policy Name gebe ich der Policy einen sprechenden Namen.

Die Parameter Function Schema und Policy Function definieren die zu verwendende Security Policy Function.

Der Parameter Statement Types definiert, dass die Policy ausschließlich für SELECT Statements angewendet werden soll.

    object_schema    => 'vpd_owner', 
    object_name      => 'orders', 
    policy_name      => 'orders_sec_policy', 
    function_schema  => 'vpd_owner',
    policy_function  => 'orders_sec_fnc', 
    statement_types  => 'select');

VPD in Aktion

Mit dem Anlegen der Security Policy ist VPD für diese Tabelle “scharf geschaltet”. Das wird unmittelbar sichtbar wenn ich auf die ORDERS Tabelle zugreife.


no rows selected

Standardmäßig sehe ich erst einmal gar nichts mehr. Erst wenn ich eine gültige Customer ID in den Application Context schreibe kann ich danach die zugehörigen Ergebnisse sehen.



---------- ----------- ------------------
    100001         123 13-MAR-15
    100003         123 21-MAR-15


Veröffentlicht unter German, Software | Verschlagwortet mit , , | Kommentar hinterlassen

Erste Schritte mit Orcas oder Continuous Delivery für die Datenbank leicht gemacht

Aller Anfang ist (nicht) schwer…

Vor einigen Wochen habe ich an dieser Stelle unser Framework Orcas vorgestellt und erklärt, wie damit die Konzepte von Continuous Integration und Continuous Delivery auch auf Datenbankänderungen angewendet werden können. Demjenigen, der die Probleme mit solchen Änderungen aus der Praxis kennt, haben die Vorteile dieser Vorgehensweise sicher schnell eingeleuchtet. Bis zur Umsetzung und endgültigen Lösung der Probleme ist es aber dennoch gefühlt ein großer Schritt. Schließlich muss nicht nur ein neues Framework eingeführt und der Build-Prozess entsprechend angepasst werden. Es handelt sich auch um einen kleinen Paradigmenwechsel, von dem das Entwicklungsteam und die Projektverantwortlichen überzeugt werden müssen. Umso wichtiger ist es, den Nutzen von Orcas schnell und überzeugend verifizieren und demonstrieren zu können. Dafür soll hier eine Starthilfe gegeben werden. Eine ausführliche Dokumentation mit Beispielen und einer genauen Installationsanleitung findet sich im Orcas-Projekt auf Github. Einen kurzen Überblick über die Funktionsweise und Möglichkeiten von Orcas liefert unser Whitepaper.

Benötigte Tools

Um Orcas auf einem Entwicklerrechner oder einem Server betreiben zu können, sind zunächst die folgenden Tools zu installieren. Da Gradle ggf. eine Verbindung zum Maven-Central-Repository aufbaut, muss eine Internetverbindung bestehen.

  • Java JDK (JRE reicht nicht) ab Version 1.6, es genügt die Standard Edition (SE). Das Installationsverzeichnis muss in der Umgebungsvariablen JAVA_HOME und „%JAVA_HOME%\bin“ in der Umgebungsvariablen PATH eingetragen sein.
    Test der Installation: javac –version muss die installierte Versionsnummer anzeigen.
  • Ant in der aktuellsten Version. Die Download-Datei entpacken und das Installationsverzeichnis in die Umgebungsvariable ANT_HOME eintragen. „%ANT_HOME%\bin“ muss in die Umgebungsvariable PATH eingetragen werden.
    Test der Installation: ant –version muss die installierte Versionsnummer anzeigen.
  • ant-contrib-1.0b3-bin.zip herunterladen, entpacken und ant-contrib-1.0b3.jar nach ANT_HOME/lib kopieren. Neuere Versionen von ant-contrib sind nicht kompatibel!
  • Die aktuelle Version von Gradle herunterladen und entpacken. Es muss GRADLE_HOME auf das Installationsverzeichnis gesetzt werden oder es muss der Befehl gradle in die Umgebungsvariable PATH eingetragen werden.

Der Oracle Client

Da Orcas mit Hilfe von SQL*Plus auf die Datenbank zugreift, muss in jedem Fall ein Oracle Client installiert sein. Die Umgebungsvariable ORACLE_HOME muss auf diesen Client zeigen. Dabei ist ein Instant-Client ausreichend. Die Verbindungsdaten zu den Datenbanken, die bearbeitet werden sollen, werden in der Datei tnsnames.ora eingetragen. Sie liegt beim Oracle-Client im Verzeichnis ORACLE_HOME/network/admin. Beim Instant-Client muss diese Datei dort manuell angelegt werden.

Eine erste Build-Datei

Der Start von Orcas erfolgt über eine Ant Build-Datei. Diese zentrale build.xml kann z. B. in einen Maven-Build integriert werden. Hier zunächst ein Beispiel, das die Benutzung der wichtigsten in Orcas enthaltenen Ant-Tasks illustriert. Eine vollständige Beschreibung der Tasks findet sich in der Dokumentation auf Github.

<project name=”database”>
<property name=”orcas_dir” value=”…/orcas_core”/>
<import file=”${orcas_dir}/orcas_default_tasks.xml”/>
<property name=”orcas.default_user” value=”${username_schemaowner}”/>
<property name=”orcas.default_password” value=”${password_schemaowner}”/>
<property name=”orcas.default_user_orcas” value=”${username_orcas}”/>
<property name=”orcas.default_password_orcas” value=”${password_orcas}”/>
<property name=”orcas.default_tnsname” value=”${database}”/>

<target name=”orcas_install”>
<orcas_install   user=”${username_dba}”   password=”${password_dba}”/>

<target name=”build_all”>
<orcas_initialize extensionfolder=”${distributiondir}/../../orcas/orcas_extensions”/>
<orcas_execute_statics   scriptfolder=”tables”   dropmode=”${dropmode}”/>
<orcas_execute_scripts   scriptfolder=”views” />

Zunächst wird hier die Datei orcas_default_tasks.xml eingebunden, die die von Orcas bereitgestellten Ant-Tasks enthält. Aus einer Properties-Datei werden Parameter wie die Datenbankverbindung und die Userdaten eingelesen. Generell muss ein Datenbankschema in das die Datenbankpackages von Orcas selbst installiert werden, sowie eines, in das die Anwendung installiert werden soll, angegeben werden. Unter bestimmten Voraussetzungen kann auch dasselbe Schema verwendet werden. Vor dem eigentlichen Build muss einmal das Target orcas_install aufgerufen werden, um Orcas auf der Datenbank zu installieren.

Der Build wird in diesem Beispiel mit dem Target build_all ausgeführt. Zur Vereinfachung enthält unser Projekt nur Tabellen und Views. Der hier gezeigte Ablauf macht Folgendes.

  • Erweiterung des Orcas-Syntax um benutzerdefinierte Extensions (siehe auch unser Whitepaper) im Task orcas_initialize.
  • Anpassung der Tabellen des Schemas an das im Ordner „tables“ hinterlegte Modell (orcas_execute_statics). Der Parameter dropmode, gibt an, ob nicht mehr benötigte Tabellen und Spalten gelöscht werden dürfen.
  • Orcas_drop_replaceables löscht alle Datenbankobjekte des Schemas (in diesem Fall nur Views), die keinen Status halten (wie auch Packages, Trigger, usw.).
  • Orcas_execute_scripts führt SQL-Skripte aus, um den aktuellen Stand dieser Objekte wieder einzuspielen (hier: nur Views).

Die Build-Datei kann leicht auf die Bedürfnisse des konkreten Projekts angepasst werden. Anregungen dazu liefern die Beispielprojekte der Dokumentation.


Um den Einstieg noch mehr zu erleichtern, enthält Orcas im Verzeichnis orcas_vagrant für erste Tests eine Vagrant –Konfiguration. Damit kann man eine VM konfigurieren und starten, die eine Oracle XE Datenbank enthält und in der Orcas direkt lauffähig ist. Dazu muss man nur Vagrant herunterladen, installieren und im Verzeichnis orcas_vagrant die VM mit dem Befehl vagrant up starten.

Veröffentlicht unter Agile, Software | Kommentar hinterlassen

New book is out: Design Principles for Process-driven Architectures Using Oracle BPM and SOA Suite 12c

A design handbook to orchestrate and manage flexible process-driven systems with Oracle BPM and SOA Suite 12c.

This book was written in a joined approach by several experts from the Oracle ACE and ACE director team, three of them from OPITZ CONSULTING: Matjaz B. Juric, Sven Bernhardt, Hajo Normann, Danilo Schmiedel, Guido Schmutz, Mark Simpson, Torsten Winterberg.


  • Learn key principles to model business processes with BPMN and BPEL, and execute them in an SOA environment.
  • Use best practices for composite applications, including service design and human interactions, and apply them in your daily projects.
  • Design, implement, and optimize business processes with real-world examples illustrating all key concepts

Who This Book Is For

This book is intended for BPM and SOA architects, analysts, developers, and project managers who are responsible for, or involved in, business process development, modelling, monitoring, or the implementation of composite, process-oriented applications. The principles are relevant for the design of on-premise and cloud solutions.

What You Will Learn

  • Design principles to model business processes and business architectures
  • Best practices to produce executable business processes in BPMN
  • Principles when designing reusable services and composite applications
  • Advanced approaches to human interactions in business processes, including patterns and Adaptive Case Management
  • Business rules management and principles for rule design and implementation, including using rules in BPMN and BPEL processes
  • Prepare process applications for mobile and multichannel/omnichannel
  • Explore the best practices and principles of Business Activity Monitoring to define and monitor Key Performance Indicators
  • Extend the processes to Internet of Things devices and processing complex events

In Detail

This book is a design handbook and provides skills to successfully design, implement, and optimize business processes on top of SOA. Starting with business process modeling, it shows design principles to architect sound process architectures. It presents best practices for modeling business processes using BPMN, together with design principles for services and composite applications. It provides detailed coverage of how to prepare business processes for execution. An in-depth explanation of human interactions is given and also principles and best practices for using rules.

Moving on, Adaptive Case Management principles are explained, along with the reach of business processes to mobile devices and ensuring multichannel interactions. Business activity monitoring, event-driven architectures, complex event processing in relation to business processes, and enabling integration with events and IoT devices are explained. The design principles and best practices are demonstrated in a practical way on a rental car use case.

Veröffentlicht unter BPM, English, IoT, Mobile, Oracle BPM Suite, Oracle FMW, Oracle SOA Suite, SOA | Kommentar hinterlassen

Get an Oracle E-Mail notification via User Messaging Service Running before your coffee gets cold

I often get asked to help developers with setting up UMS, but in fact mostly focusing on the SMTP server.

In the next steps I will show how you can setup a HelloWorld notification Service with reviewing the results in less than five minutes.


Installed SOA or BPM Quickstart. See Danilos post for details : https://thecattlecrew.wordpress.com/2014/06/28/oracle-bpm-12c-quick-start-installation-uncensored/

Get FakeSMTP.jar on your development machine: https://nilhcem.github.io/FakeSMTP/

Step 1 – Start WLS

Start the IntegratedWebLogicServer

Step 2 – Start the Fake SMTP

Enter in the command line:

java -jar fakeSMTP-2.0.jar

After the Application has started up click the “Start Server” button.




Step 3 – Configure UMS in the Enterprise Manager

Log into EM

Edit the Email Driver Properties


Create a new Configuration with the name localhost and the outgoing mail server localhost and save it.


Step 4 – HelloWorld Notification Composite

Create a new SOA Application with a SOA Project


Create a Synchronous BPEL with standard settings



Add an UMS as a reference, add only outbound notification details, set Message as String type and wire it to the BPEL



Edit the BPEL Flow

Add an invoke of the UMS reference and create a new input variable for the UMS reference.


Add an Assign before the Invoke and map the BPEL input string to the message payload.


Deploy the composite to the application server and test your service via EM

And there you go.






Veröffentlicht unter Uncategorized | Kommentar hinterlassen

Resolve JCA connection error in Oracle EBS to SAP integration with OSB 11g

Doing a Oracle EBS to SAP integration with Oracle Service Bus 11g (OSB) I noticed a strange exception at runtime. During the establishment of a connection to the SAP system via the iWay SAP adapter the following error occurs in the adapter logs:

servicebus:/WSDL/ebs2sap-data-integration/Sap/v2.0/jca/BAPI_ORACLE_SYNCHRO_RESPONSE_invoke [ BAPI_ORACLE_SYNCHRO_RESPONSEPortType::BAPI_ORACLE_SYNCHRO_RESPONSE(input_BAPI_ORACLE_SYNCHRO_RESPONSE,output_BAPI_ORACLE_SYNCHRO_RESPONSE) ] – : The JCA Binding Component was unable to establish an outbound JCA CCI connection due to the following issue: java.lang.IllegalArgumentException: Adapter ‘MySAP’ not available. Names are case sensitive.
Please make sure that the JCA connection factory and any dependent connection factories have been configured with a sufficient limit for max connections. Please also make sure that the physical connection to the backend EIS is available and the backend itself is accepting connections.

At first glance I suspect a typo or a general error within the connection configuration of the adapter to be responsible for this error. After double checking the configuration I wasn’t able to detect a configuration issue, everything seems to be fine. I restarted the servers, the complete domain – nothing changed, the exception remains.

So I decided to double check the general adapter setup. Walking through all setup steps, I finally discovered the root of all evil: I simply forgot to copy the SAP JCO libraries to the $MW_HOME/user_projects/osb_domain/lib folder. After placing the libraries at the corresponding place and restarting the domain, everything worked as intended. Now the data could be transmitted to SAP without any problems.

Small cause, big effect – it takes me some time to find the root cause of the reported exception, whose message is really misleading in my opinion. I would expect to find something like a ClassNotFoundException, if needed libraries cannot be found in the classpath. But never mind, finally it worked.

I hope I can save you some time with the post, if you are facing similar or the same error, when using SAP adapter in an Oracle Service Bus 11g or Oracle SOA Suite 11g environment.

Veröffentlicht unter Integration, Oracle Service Bus, Quicktipp, SAP | Verschlagwortet mit , , , , | Kommentar hinterlassen