Oracle Service Bus 12c (12.2.1) Native REST: Bug in HTTP GET in Pipeline?

While I was working on an Oracle tech presentation, I discovered the following issue with native REST and Oracle Service Bus 12c.

Version

SOA Quickstart / 12.2.1 OSB, running on RedHat derivative with Oracle JDK 8.

Description

OSB 12.2.1 Native REST pipelines don’t work with GET parameters.

Creating a native REST business services works fine, also adding a REST proxy service.
Once you insert a pipeline HTTP stops working correctly (since the URL parameters aren’t forwarded, a list will be returned by the backend service according to REST semantics), since URL parameters are not forwarded.

Steps to reproduce:

  • Use REST tech adapter to create a REST business service for an existing REST backend.
  • Define GET and POST methods. WADL will be created.
  • Test business service from WADL: both GET and POST will work.
  • Create proxy service from REST business service
  • Test proxy service, again GET and POST methods will work from OSB test client.
  • In JDev, drop a pipeline on the line connecting proxy and business service.
  • In JDev verify the pipeline configuration. it will display correct values.
  • Test the proxy service again, only POST will work. GET does not work anymore (now returns a whole list), since the URL parameters are not forwarded. Even an empty OSB pipeline will swallow the GET URL parameters.

Severity

IMHO this is a bug. I am currently in discussion with Oracle PM about it. Since I am working on another cloud gig, I cannot file a SR myself.

What is next?

I will let you know about updates / fixes or workarounds. Note, you could set the URL parameters as routing options to circumnavigate the issue for a particular use case.

Update 1 (Oct 2016)

I received no feedback from Oracle unfortunately. Anyway, if you experience the same issue let me know. It is important to share the knowledge here – I receive a lot of positive feedback from people with the same issues. Anyhow, also file a SR with MOS if you can. This is the official way to get it possibly fixed.

Update 2 (Jan-12, 2017)

There is a Patch 25184543 now with a backport to 12.2.1.2, see comments below. Gracias a Juan! Kudos for getting this through MOS and for sharing the knowledge.

Oracle Service Bus 12.2.1 JVM Settings: PermSize, Heap, Non-Heap, and ResourceManagement

Oracle Service Bus comes with JVM settings that cause questions to some customers. This posting provides answers to the most common questions I discussed in workshops or received so far.

Warning about PermSize Option

Question 1: “I see the following warning:

Does that mean that Oracle generates the startup scripts with wrong JVM flags?”

Answer: With Oracle JVM 8 the permanent space was removed. Not having a perm space was a JRockit “feature” that has been ported over to the Oracle JVM. The warnings of course are harmless. Startup scripts for WebLogic only domains are generated correctly for WebLogic 12.2.1. So Oracle needs to change this for OSB domains and they know about it.

Heap Size

Question 2: “How big is Oracle Service Bus now? I used to be able to create and run a cluster on my laptop with earlier versions but now I run into resource problems.”

Answer: Default startup parameters are: -Xms1024m -Xmx2048m, i.e. minimum heap size is 1 GB, maximum heap size is 2 GB. Hence you should expect your process size to be larger than 1 GB right from the start.

Screen Shot 2016-02-17 at 13.27.49 Screen Shot 2016-02-17 at 13.29.38

Roughly speaking after starting up a single OSB instance (everything hosted on the admin server), you should expect more than 400 Mb of heap used. Have a look at the screenshot above. The last drop in the first screenshot was caused by an external garbage collection request (I did it manually). In addition there is more than 500 Mb of non-heap used (100 Mb code cache and 400 Mb meta space, GC of course does not affect this area). This shows that 1GB as a minimum setting makes sense.

JVM ResourceManagement Flag

Question 3: “I see the following warning

Answer: You probably have read announcements that emphasize that OSB 12.2.1 is running on top of WebLogic 12.2.1 and WebLogic 12.2.1 supports a number of exciting new features. Nothing wrong with that, kind of marketing logic though.

It is important to understand that Oracle Service Bus 12.2.1 (and other up stack 12c products such as Oracle SOA Suite, Oracle BPM etc.) doesn’t use yet some really cool WebLogic 12.2.1 features such as domain partitioning or elastic cluster.

In short: Oracle JVM 8 resource management is used as a commercial feature together with G1 garbage collector to track JVM resource usage on the JVM level per partition. Based on the collected data about memory, file and thread usage WebLogic can then react and ensure that a WebLogic partition within one domain doesn’t steal too many resources from another partition. It’s important to understand that the magic (the reaction) happens in WebLogic and it’s based on the data provided by the JVM.

So will the -XX:+ResourceManagement setting improve OSB 12.2.1 performance? I’d say no. It will only have benefits when used with partions which are so far not supported by OSB 12.2.1.

 

 

Opatch for Oracle WebLogic 12c or Oracle Fusion Middlware

Those of you who blog will know that the most useful postings are the ones that you lookup yourself now and then. This one I was pulling out of my virtual class room drawer several times when asked by customers.

opatch webcast

Quite a while ago I did a webcast about the new patching utility opatch (read the original Oracle opatch documentation for 12.2.1 here). Opatch is now used with Oracle WebLogic Server 12c but also with Oracle Fusion Middleware products such as service bus and SOA suite.

P.S. opatch is of course covered in my latest Oracle WebLogic Server 12c book.

 

WebLogic with Docker in the Cloud

docker

Docker has been without any doubt the most hyped technology this summer. Apart from incrementally and quickly creating light-weight containers that can be hooked up together it seems to become the de-facto standard for spinning up instances locally and in the cloud. In the past there was no real compatibility between cloud providers on an OS/instance-level and also import/export features were “demanding” at best.

Linux containers for clean sandboxing do exist since much longer, e.g. Google is starting over 2 billion Linux containers every week. With Docker there is an open source based de-facto standard now that customers want to use (honestly, few people looked into lxc and kernel namespaces before Docker had it’s appearance)

Docker and WebLogic?

Oracle WebLogic Server currently does not officially support WebLogic running Docker, yet there is a github project to start with created by Bruno Borges. This project contains the Dockerfile with all necessary WLST-scripts to create a Docker container running WebLogic.

Screen Shot 2014-09-21 at 12.19.11

You can run Docker itself in Oracle Enterprise Linux like in most other Linux distributions such as CentOS, Ubuntu etc. Docker containers always run Linux; e.g. you could have WebLogic running on Ubuntu in a Docker container which is running on CentOS.

Docker Hub Registry

The Docker hub registry is best known as a public registry for Docker images to start with but it can be used to store private images as well.

The Docker Registry contains base Docker images for Java, Ubuntu etc., yet there are no official images from Oracle at the moment. Let’s hope that Oracle will not repeat the rather sad story of poor support for Oracle product AMIs for Amazon Cloud.

Public Clouds can either deploy Docker containers directly from github by creating a container on the fly based on a Dockerfile on github, or by accessing an Docker image stored in the Docker registry. I will demonstrate below how to deploy WebLogic as Docker container straight from the Docker registry.

https://hub.docker.com

Clouds: Amazon, Google, …

Amazon Beanstalk, same as the Google Cloud, support Docker containers as well! So you can dockerize your application (including WebLogic) and run the same Docker image on the cloud. To the best of my knowledge there is currently no information available if Oracle has plans to support Docker in the Oracle cloud.

AWS Beanstalk Cloud

HowTo Run Your WebLogic in a Docker Container on Amazon Beanstalk

The following web cast gives a brief overview of the steps involved. It’s not intended as a A-Z tutorial, rather a quick recording to illustrate the point saving you from dozens of boring screen shots. I am using CentOS 7 to run Docker and create the local Docker container.

The following steps are shown:

  1. Create a running Docker container with WebLogic
  2. Create a new image based on the container
  3. Upload the image to Docker hub
  4. Create the Amazon Beanstalk JSON file for running a Docker container
  5. Create an AWS Beanstalk environment that runs the image from Docker hub
  6. To prove that 1. to 5. are working run a demo app in the cloud

 

If you want to know more, I recommend to get a good book about Clouds, and WebLogic, read Bruno Borges blog entry, the Docker documentation, and the AWS Beanstalk documentation.

Oracle supports the licensing of certain AWS/EC2 instances, also different versions of Oracle Database are available at the Amazon cloud, so ask your Oracle sales rep about the licensing with Docker and Beanstalk.

Enjoy!

Update

I just learned that this posting with the web cast made into the Docker Weekly. Cool, thanks!

Update 2

Soon there will be Microsoft in the boat as well. So Amazon, Google and Microsoft amongst others will support Docker containers. I am curious to see what this will mean for Oracle’s own cloud offering.