donderdag 7 december 2017

UKOUG Tech - PaaS & Development review


This year, I went to UKOUG Tech for the first time, as I got my paper about Oracle Process Cloud Service accepted. Looking at the agenda in advance, the content of the conference looked very interesting and I can already say that I wasn't disappointed. Not being particularly interested in the vast amount of database sessions, I decided to mainly focus on the Middleware and Development tracks, to see the latest developments on Oracle's PaaS offerings and the coolest new technology trends.

Even though many visitors to the conference are still working on on-premise projects, I haven't been able to find even one session about on-premise middleware. This is only logical, since SOA Suite, BPM Suite and Oracle Service Bus are lacking spectacular new features: it's all happening in the cloud. So, what exactly is happening in the cloud?

PaaS (Platform as a Service)

The main thing is that Oracle's iPaas (Integration Platform as a Service) portfolio is ever growing stronger. Every three months, these products are getting updated, rapidly maturing and expanding in, occasionally overlapping, functionality. Oracle Mobile Cloud Service impressed me as a solid back end for mobile, offering APIs, offline synchronization, authorization and tons of other features that are really useful for the challenges that come with mobile (or multi-channel) integration. Oracle API Platform is growing stronger as well and makes us re-think our way of agile development. API first is the way to go, so we get feedback from consumers early, while we are still working on the actual implementation in the back end. Another advantage here is that the back end is not impacting the API design much, so we can keep things clean and smart.

Moving further down the road, we see that Integration Cloud Service is turning more and more into a full-blown SOA platform and I was happy to present the Decision Models of Process Cloud Service myself. Once Dynamic Processes (Case Management) capabilities are released, I think we can say goodbye to BPM Suite, at least for new projects. Development in Process Cloud Service has become a smooth experience and the UI has improved dramatically since the product was launched in 2014.

Open Source & Development

But PaaS is not everything. We have seen an increasing interest in open source technology recently and even Oracle is embracing those products these days, standing at the very heart of their cloud offerings. So, I had the opportunity to learn more about Docker, which is a key element in Oracle's many Container oriented cloud offerings, Kubernetes, for which Oracle will provide a managed platform soon and Wercker, which can be used for continuous integration/continuous delivery of containerized microservices.

However, the star of the show was Apache Kafka. Brought to us with much grandeur by Robin Moffatt and Guido Schmutz, among others, Apache Kafka is looking extremely promising for not big data and streaming content, but basically for any event-driven style of architecture. Kafka can be used as an open source product, but you can also choose to use the Confluent Platform or Oracle's Event Hub Cloud Service. I believe that Kafka will be the cornerstone of modern integration architecture, powerfully delivering the promise that traditional SOA couldn't live up to. It's also perfect for being the event hub between your microservices, so they can communicate with each other without dependencies.

All in all, I can say that it was a fantastic conference, with not just great content, but also great social activities. It was a great opportunity to catch up with my friends, meet new people, exchange ideas and attend my first Oracle ACE dinner. I hope to be back next year!

woensdag 29 november 2017

Running SoapUI Test Cases with Maven

So, you have developed your software and you've done the right thing by creating your tests in SoapUI and they're all running smoothly. Now it's time to make the next step: make sure that your tests can be run automatically, preferably on different environments, for example every night or after a deployment. This is a major improvement in your continuous integration and delivery efforts, but how can this be achieved? In this blog, I will show how it can be done by using Maven, which can then again be used in for example Bamboo, Jenkins or any other continuous integration tooling.

With Maven, you basically just need a POM and a command to kick things off. In this example, we are using SoapUI 3.5.0, which is the latest open source version, Maven 3.5.2 and (since we need Java) JDK 1.8.0_131, but any other recent version will do as well.

Now, before we begin, if you use any JDK 1.8.x version, you need to copy a jar file named "jfxrt.jar" from ..\jdk1.8.0_131\jre\lib\ext into the ..\jdk1.8.0_131\jre\lib folder to make things work. If you resist, you will get a nasty error message and your test will not run with Maven. This obviously also applies to your continuous integration server.

Once you're setup, you will need to create a pom.xml file like the one below. You can place it in the same folder as your actual SoapUI test, but if you prefer to put it elsewhere, that's fine too. Just make sure to adjust the path to the SoapUI test then and be aware of differences between Windows and Linux environments (forward and backward slash). This is why I prefer to put the POM in the same folder as the SoapUI project.

Now there are several important elements here that you need to change for your own testing:
1. projectFile: the location plus name of your SoapUI project. Don't forget the .xml extension.
2. testSuite: the TestSuite that you want to be executed. If you leave it out, all TestSuites will be run.
3. testCase: the TestCase that you want to be executed. If you leave it out, all TestCases will be run within the specified TestSuite.
4. projectProperties: here you can manipulate the Custom Properties in your SoapUI project. Very useful for environment settings, for example.

Once you have the POM in place, you can navigate to its folder with command line, powershell or whatever tool you use and execute the following command:

mvn com.smartbear.soapui:soapui-maven-plugin:5.3.0:test -Denv=localhost

So, in the sample above, I have chosen to test my local environment by entering the value "localhost" into my Custom Property called "Env".

You might see some harmless error messages now, but they will not stop the test from running adequately. If you want to get rid of these, navigate to C:\Users\[Your User]\.soapuios\plugins and remove all files from there.

Once you run the test project like this, it will go through the specified TestSuite and TestCase, performing all the TestSteps in those and reporting on all the assertions. In the end, you'll get a BUILD SUCCESS or BUILD FAILURE message, depending on whether the result of the test matches the expectations set in your assertions.

Now you are ready to use the same command from your continuous integration tooling, decide when it should be run and which environment should be triggered.

dinsdag 31 oktober 2017

REST API for Oracle Adaptive Case Management

For all of you who have been struggling with how to interact with their cases, there is good news. Since 12c, Oracle has created a REST API for Adaptive Case Management (ACM):

Since the API is pretty much self-explanatory and fairly easy to use, I will not write a lot of detail about it (at least not right now, maybe later). However, I think that those of you who are struggling with the Java API or something custom made will definitely find something much easier to use here, for both integration and testing. Since most blogs about the subject have been written before this REST API became available, I thought it would be good to draw people's attention to this.

woensdag 10 mei 2017

Oracle Process Cloud Service - Decision Model Notation part 2

In my previous blog, I showed how to get started with Decision Model Notation (DMN) in Oracle Process Cloud Service and how to create a simple Decision Table. Picking up from there, we will now look into creating If-Then-Else rules, which should also be familiar to people who know Oracle's old Business Rules. We will also create a service and call it from a process.

Creating an If Then Else Decision

As Input, I have created a TotalAmount object, which is the total amount of a Sales Order. Based on this TotalAmount, we are going to calculate a Discount Price, for which I have created a DiscountPrice type to make the service interface a bit prettier than just 'output'. To create an If-Then-Else rule, just click the + button next to Decisions, enter a name and set the output type to string, number or any other type, in this case DiscountPrice.

Now, Oracle will have created a rule for you, in which you only need to fill in the "if", "then" and "else". Since you've already decided your output object, we will not use that one in the expression, which is different from the old Oracle Business Rules. So just enter the value that you want for this object and you'll be fine. You can also create nested expressions, as shown below:

One thing that I don't like, is that all the nesting needs to be done in the "else" part. I hope for Oracle to acknowledge this and create a new "if" section (for example with indent), where I can happily nest away in a more user-friendly manner. However, it works (use the Test feature to verify) and if you don't make things too complicated, it's mainly a minor display issue.

Calling an If Then Else Decision

Calling any Decision from a process is super easy. Just make sure to have a service created for your Decision and deploy it, so the process can find it. In Oracle Process Cloud's Process Composer, you can then select "Decision" as a system task, select the Decision Model that you want to use and the service within that Decision Model that you want to call:

From here, you can make your data associations and you're done. Obviously, a process is generally not as simple as this one, but using Decisions within processes is.

So that's the second part of this blog series. The third part will be an overview of other DMN functionality: Expression, Relation, List, Function and Context. I still think that we will mostly be using If/Then/Else and Decision Tables though, so for most use cases, the information in this blog and the previous one should provide you with a nice kickstart.

maandag 8 mei 2017

Oracle Process Cloud Service - Decision Model Notation part 1

Recently, Oracle Process Cloud Service (PCS) has made another major step forward through the addition of a whole new way of dealing with business rules. This brand new Decision Model Notation (DMN) feature is developed seperate from the actual processes and deployed as a microservice, so your decision models can be reused and everything is nicely loosely coupled. I like it.

What I also like about DMN is that it's much more (business) user friendly than the rule engine from Oracle SOA Suite, which was used until now. While it was performing well and somewhat agreeable for technical users, business users were often lost and leaving the business rule modelling to developers. With this new DMN feature, this is no longer necessary. Business users will be able to do much more, if not everything, themselves and actually enjoy the experience!

I've decided to write a series of blogs about the different types of decision models that can be created and how to use them. But first we need to turn it on.

Getting Started

When you're in the home screen, click on your login name in the top-right corner and choose 'Administration'. On the Admin page, go to 'UI Customization' and tick 'Enable DMN in Composer', then Save.

Now you're ready to go! You can go back to the home page now, click 'Develop Processes' and then under Create, you will have the option to create a New Decision Model. As you can see, these Decision Models are seperate from your normal PCS applications, but you can call them from your processes. Once you have created your Decision Model, your interface will show you Services on the left, Input Data on the right and Decision Models in the middle.

Input Data

The objects and the left and right can be expanded. Here's a brief explanation of what they contain, starting with the right: Input Data. When you expand it, you can see two options: Input Data and Type Definition. In Type Definitions, you can setup complex types for your input data, like lists or elements that contain attributes. Types can also refer to other types and so on and so on. It's pretty much a declarative way to make an XSD.

In Input Data, you can then refer to these Types, but also create strings, numbers and other basic stuff. In this case, I choose to make a SalesOrder, referring to the SalesOrderType I've created. This Input Data is obviously very important, because it will be the facts in your Decision Model and defining the interface of your Service.

Decision Table

So, now we know how to turn on DMN and how to create Input Data. Now let's create a simple Decision Table to make it work. Just click on the Blue + next to Decisions and choose Decision Table on the right. Since my Decision Table will decide the approval level needed for the Sales Order, the output will be a simple string value.

Once the Decision Table has been created, you obviously need to fill it. You start with Enter Expression on the left and just type the first letters of your Input Data object. DMN will suggest automatically what you want and you can just select it. In this case, I wanted to have SalesOrder.TotalAmount as input, but oops... I forgot to add it to the Type! No problem, you can always modify your Types later and the changes can be used immediately. Now we can enter our rules, which is also very nice and declarative. It could look something like this:

Absolutely no coding is necessary! To test it, you can use the test button in the top-right corner (the blue play button) and the test interface is very easy to use. Once you're satisfied, save your work.

Creating a Service

Believe it or not, creating a Service is even easier. Expand the menu on the left, create a Service, give it a name and drag the Input Data and Decision on the Input and Output fields. It will generate a REST Service and will give you the URL, as well as request and response payload when you click on Payload. Obviously, you'll have to fill in the data yourself, but all the types are described, so it will be very easy to use. Now you're ready to deploy, but the runtime aspects and calling the Decision Model from a process we will save for a later blog.


Oracle has created a significant improvement in Decision Modelling with their DMN-based feature. It's easy to use, business friendly and allows for fast development. Further blogs will get into more complex rules, different types of rules, calling decision services from processes and the runtime environment.

woensdag 29 maart 2017

Why you want to become an Oracle SOA developer

With a mixture of surprise and amusement, I've read mr. Sten Vesterli's statement below:

"You don’t want to become an Oracle SOA developer, for two reasons: SOA and Oracle."

Quite a powerful statement, so let's dive deeper into the two reasons mentioned above and explain why I strongly disagree with mr. Vesterli.

First of all, he makes a rightful claim that SOA has over-promised and under-delivered for a decade. I share this feeling, but I do not believe in the bleak picture of the future of SOA that he is painting.

When you look at the Gartner hype cycle, it's clear that SOA is currently in the through of disillusionment, which is a rather tough place to be in. However, after this phase come the slope of enlightenment and plateau of productivity, so is this really a good moment to stop being interested in SOA? I don't think so. We have made our mistakes, learned our lessons and now it's time for "SOA done right".

Of course, we can now jump into microservices, which are at the peak of inflated expectations and doomed to fail in their own way with all the downsides and requirements that they have, or we can adjust our perspective on SOA and modernize our architectures. Take elements from microservices, don't run from one extreme to the opposite extreme and find your way into Domain Driven SOA Design, in which I strongly believe. We can and will do this right if we can for once stop thinking so black-and-white.

So, having covered SOA, let's talk about Oracle. It is indeed true that Oracle is making a strong movement to the cloud, which I embrace and support. Now, according to mr. Vesterli, apparently an Oracle SOA developer will only work on-premise and will not be working with Oracle Integration Cloud (ICS). I think this is not true and I can use myself as an example, having done projects with both Oracle SOA Suite and ICS and happily using my skills both on-premise and in the cloud with Oracle's rapidly expanding PaaS portfolio.

Apart from that, SOA Suite on-premise and Oracle SOA Cloud Service are exactly the same from a developer's point of view. They are the same products, requiring the same type of code, being developed in the same JDeveloper. And while ICS is very good for integrating SaaS applications with each other, it's not going to be the cornerstone of anyone's enterprise architecture anytime soon. Therefore, SOA will remain relevant for a long time and when you know SOA, you can easily learn about ICS as well. The other way around will be significantly harder!

So, I'd like to conclude by turning mr. Vesterli's statement around: now is a great and exciting time to become an Oracle SOA developer.

dinsdag 10 januari 2017

Quick tech tip: using MDS Events in BPM

How to use MDS Events in your BPM processes?

With choreography gaining importance compared to orchestration, events will start playing an increasingly important role. In Oracle SOA Suite, it makes sense to put the related event definitions into MDS, so they can be used by multiple processes and services.

However, when you have your event in MDS and you try to use it in your BPM process, you will not be able to access it. You'll find that your BPM process will only look into the contents of the project that it's in and you can't use external events. Now here's the trick to still make it happen:
  1. Copy the event definition that you want to use into your project;
  2. Let your BPM process use the local event on design time;
  3. Open your composite.xml in source mode and change the import location of the event definition to the oramds: location;
  4. Remove the local copy;
  5. Deploy & enjoy!