In this post, I am looking into the relative performance of the transformation technologies in Service Bus 12c. Having searched the internet, I could not find a lot of specific information regarding the performance in Oracle Service Bus, but only qualitative opinions like “XSLT performs better for large documents”, or “Service Bus is optimized for XQuery”, without any supporting data [ORAFORUM].
In an attempt to offload some of the production load from the SOA clusters, a migration project has been initiated to migrate services implemented in SOA Suite 11g (as BPEL processes) to the Oracle Service Bus cluster.
Although these services are not directly exposed to consumers, the intention is to reuse – without modification- as much artefacts as possible, including WSDL, JCA adapter definitons and the transformation logic – currently implemented in XSLT. Fortunately, the XSLT is version 1.0 since our Service Bus 22.214.171.124 does not yet support version 2.0.
Although the environment where the question originates currently runs SOA/OSB 11g, migration to 12c is being planned. Liking life on the bleeding edge of technology, I decided to setup a test for 12c.
To quickly create a (reproducible) SOA 12c installation, I have used the scripts [BIEMOND] provided by Edwin Biemond to leverage Vagrant for the creation of two virtual machines (one for the DB and one for the middleware) (). Since my laptop has enough memory available, I have assigned 8 GB to the middleware virtual machine. Furthermore, the memory settings for the OSB-server have been increased to 1536 MB (initial = maximum memory).
On my laptop, I have also installed SoapUI [SOAPUI] (for functional testing – verifying that the testcase using different technologies yields the same result) and Apache Jmeter 2.13[JMeter] (for the actual performance testing).
For the time being I want to primarily focus on the relative performance of XQuery when compared to XSLT, over multiple transformations with varying payloads. So, the only metric I am interested in is the response time of the service, assuming that -with all other things being equal- equal actions will add equal overhead: the total response time of the service will be taken as the main indicator.
To support different transformations for testing, there should both be XQuery and XSLT versions of the transformation. Ideally, we should have different proxies per scenario and transformation technology, but actually I am too lazy to set up this scenario. Initially, I was thinking about setting up different testcases in the same proxy and switching between these testcases based on a value in the payload or operation, this has the suspicion that it works like a case statement (or nested if-then-else): evaluating the conditions for the fourth case might take more time than for the first case.
Fortunately, Service Bus also supports “Dynamic Transformations”[OSBDYNTRANS] for both XQuery and XSLT: this lets you dynamically assign the name of a transformation resource to apply, and also dynamically assign the payload to this transformation (see the Dynamic XQuery example below):
OSB Dynamic Assign Operation
The project I have come up with consists of a single proxy exposing a single operation and five pipelines: Read the whole article here.
For regular information on Oracle SOA Suite become a member in the SOA & BPM Partner Community for registration please visit www.oracle.com/goto/emea/soa (OPN account required) If you need support with your account please contact the Oracle Partner Business Center.