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].
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
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 18.104.22.168 does not yet support
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).
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
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
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.
SOA & BPM Partner Community
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.
Blog Twitter LinkedIn Facebook Wiki