So it has been a busy week in terms of seeing articles published that I’ve at least contributed to. It’s funny the gap between writing and publishing can be several weeks. So whilst we’re thinking about new things we see the twitter pickup etc or work several weeks old.
Anyway, first up was a contribution to Leon Smiers‘ blog on integrating chatbots. The latest in a series of excellent blog posts looking at the capabilities a chatbot solution needs etc. The latest post is about integration, hence my contribution. My contributions to the blog series go back to the conversations Leon and I had whilst at the Oracle Partner event earlier this year. Since then, I have helped Leon by providing a critical eye and offering suggestions.
The big event, has been to have an article published on Oracle Technology Network(OTN). This is a bit of an honour as we where invited to write. My piece can be found at here. It is actually a part of a pair of articles written for OTN. With article was written by Luis Weir, and is the parent article about API management.
My article came about as a result several discussions with Luis whilst travelling to and from a client about the relationship between between microservice registries, load balancers and API Gateways. Particularly as API Gateways have a natural relationship with microservices. I’ll say no more, go read the article.
The background to this post, and the OTN Appreciation Day can be seen at Oracle-Base.
Oracle Messaging Cloud Service (OMCS) is I think an overlooked gem of Oracle iPaaS portfolio. I say this as it offers a JMS 1.1 compliant Java library but at the same time provides a means through which integration through REST APIs can be performed. This means it is possible to pretty transparently connect legacy JMS based integrations with new REST based products. The magic sauce (and therefore my favourite feature) is the concept of the Push Listener. Through the REST API it is possible to register a REST URL as a target for queues and topics to have messages sent to. Once registered when a message appears on the queue or topic it will get passed on as a REST call. Whilst is is possible to do with with a little bit of Java code. the Push Listener simplifies the job to a REST call with a bit of XML configuration.
There is one small challenge that makes the integration completely transparent to the recipient of the PushListener today, and that is it currently demands that authentication process take place on initial contact. This is not a complicated or challenging thing to address, but does require a tiny bit of code to address.
So we’re back home from a week in San Francisco and the city dominating Oracle Open World conference and almost straightened up after the jet lag (don’t remember ever suffering from it this much).
A very interesting, very busy week that was absolutely shattering (it didn’t help our Hotel was in the middle if the city, but not very sound insulated or air conditioned – so if you don’t sleep well not the best).
I’ll piece together a presentation deck, but briefly, what we picked up/did:
- Oracle is a cloud company now – with the word cloud presented so many times in a week that the early morning mist (or is that thin cloud) on a couple of days in SF I wasn’t sure if I was hallucinating it or whether it was genuine – it had disappeared by the time I was seeing presentations with the word cloud.
- Oracle is getting hip with adoption of Docker and Open Stack.
- Weblogic 12.2 announcements just before OOW somewhat swallowed up in all the other messages but I think this release will have some longer term subtle impacts, just like multi Tenancy database announcements lead the subsequent cloud transition.
- Oracle cloud isn’t all sales story – early adopters such as GE talked about their experiences
- For those of you who want the benefit of cloud on premise – the hyperconvergence of Oracle hardware to SaaS solutions can be deployed on premise – or just the apps.
- Conversations with Oracle Press and Bob Rhubart of OTN fame.
- A day with the SOA product leadership – as part of the Customer Advisory Board. Can’t say what is happening but let’s say its all exciting.
- Various meetings & receptions with Oracle UK and our strategic SIs, plus of course the obligatory Oracle Appreciation event
- Investment in hardware to provide better security to protect against attacks like Heartbleed & Venom and some fancy new memory coming from Intel.
Checkout blogs such as this one and I’m sure a lot of other material will start coming through.
So continuing from my previous posts:
We’re going to use the Prowl API and create the equivalent classic “Hello World” App using the push framework – but cutting out the need for Growl etc. For this blog post we’re not going to use the Oracle Java Cloud as we need to see the code working locally and get ready to promote the code to the cloud. Once we’ve got some code working we can look at setting up the Java Cloud environment, package and promote what we have here using our IDE into the cloud environment.
As we’re cutting Java code now – you can obviously use your own preferred IDE, I’m going to use JDeveloper 12c if for no other reason than it being a huge improvement on 11g (download here) and I’ve become somewhat disappointed with Eclipse. Whilst talking about IDEs; you should be aware that Oracle provide an Oracle Cloud SDK which integrates with a number of IDEs to make some of the interactions with the cloud straight forward.
The SDK provides Ant and Maven scripts to help the build and deploy process – so we will be using those later, plus command line tools to help manage other activities, a number of code examples and HTML documentation. To setup the SDK you will need to unpack the file into a folder and add that folder into your PATH environment variables. The bundle includes a readme that contains just enough to show what is required to get unpacked and make the command line tools work.
To download from Oracle you will need to setup an Oracle Technology Network (OTN) account – so if you don’t have one now is the time to create one – there is no cost to this, we’re going to need
We could use the REST based API that is provided by the ProwlApp, but at least to start with we’re going to follow the approach using a library to make using the API very simple. By using the API provided on SourceForge (jProwlAPI). Using an API will allow us to show the use of 3rd party libraries in the cloud deployment but also follows some of the Oracle ideas of offering ‘adaptors’ to simplify integration.
So you need to download:
- JDeveloper 12c – http://www.oracle.com/technetwork/developer-tools/jdev/downloads/index.html (if you want to use JDeveloper as shown)
- The jProwlAPI from SourceForge
- Oracle Cloud SDK
So with this downloaded we are going to:
Setup an new Maven based project (or copy my file structure into place and import) using a maven quickstart archtetype (org.apache.maven.archetypes:maven-archetype-quickstart) . We will probably need to modify this later to leverage the full cloud capable archetype. This will build your project environment and retrieve a bunch of plugins you might need.
Next lets take a peak inside of the jProwlAPI download. You’ll see an example bit of java that shows how to fire the API. Rather than tinker with this we have created a small package and JUnit test as we would if writing a proper solution created with the maven archetype.
We also need to make the JProwlAPI jar file available to the project. So we use maven pattern, and create a folder called lib and copy the jar file into it. We then add the lib folder to project setup.
To be able to create the deployable artefact we need to load the jar file into the local repository, which we can do with a command line instruction (presuming maven is also available by your PATH variable).
mvn install:install-file -Dfile=./lib/JProwlAPI-0.5.jar -DgroupId=prowl -DartefactId=JProwlAPI -Dversion=12.1.3-0-0 -Dpackage=jar
We’ll come back to the command line in a bit, but within JDeveloper the code I have provided needs 1 change from yourself – replace the references to –YourAPIKey– in the run execute command and in the JUnit class with your own key.
In the the ProwlProcessor class I have included a man in method so we can just execute the class to see things working. So having done that we can then repeat by running the class via the JUnit test. You should see the same result. When we we’ve deployed or class to the cloud we can use the JUnit test to invoke the cloud.
The last step, within the IDE we have been compiling to get the class, but not creating a deployable jar file. We could do this with the IDE but we would also in a real development condition be creating artefacts via a Continuous Integration tooling which will effectively fire the maven command line like interface. So let’s do that to create the jar files, using the following command:
mvn clean package
You should then see a folder created if not already there and a jar file reflecting the values in the POM file, that we can see below.
So we have enough now we could in theory deploy a jar to a weblogic container and fire it from a Unit test. In the next post we’ll deploy and execute the unit test, and throw a crude front end into the mix.
When it comes to understanding the range of products and how product families fit together Oracle have created some helpful block diagrams, such as the one below.
This really helpful – particuarly when trying to understand potential licensing relationships. However there doesn’t appear to be an equivalent diagram (certainly not on OTN). So after a bit of navigating around OTN we have produced the following diagram:
If you find it useful, help yourself but a nod would be appreciated.