Transactions in OSB. Reliable Messaging. (DRAFT)

How to store-and-forward messages in OSB and never lose them.


In asynchronous mode, a caller disconnects before OSB delivers the message.

If there is a temporary error, OSB has to save the message and retry the delivery later.

How to implement it correctly? What typical mistakes should we avoid?

Read more ›

These 2 Transports Don’t Play Nice Together

How 2 standard services – JMS and SMTP – may fail when they get connected.


Everyone knows JMS proxies. They are simple – just specify the URL and the proxy will read the messages from a queue.

Everyone also knows SMTP Biz services. They are, too, very simple – just provide the email text and a few required SMTP headers, and the email is sent.

There is barely any space to make a mistake, right?

Read more ›

Upgrading OSB’s SSL/TLS Implementation

Default SSL implementation is deprecated. Upgrading to JSSE however can make your oldest services fail.
Update: eventually we installed nginx as a SSL/TLS proxy between OSB and the outdated backends. We could control all properties of the TLS connection from nginx downstream, including what SSL/TLS protocol to use, what certificate to present, and what ciphers are available. Removing the direct dependency this way, we were able to upgrade OSB and backend systems separately, each on its own schedule.
Update 2: Here’s an example of a nginx configuration entry we use to arbitrage the TLS properties for one connection. Not all lines here are important. Main thing is that ESB connects to port 18401, and then nginx re-opens the connection to target backend server with SSLv3. Bingo!

server {
    listen       18401 ssl;
    keepalive_timeout 600;

    ssl_certificate      /srvrs/bsideproxy/nginx/ssl/nginx.crt;
    ssl_certificate_key  /srvrs/bsideproxy/nginx/ssl/nginx.key;

    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets on;
    ssl_buffer_size 8k;
    ssl_session_timeout  10m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    location / {
        proxy_ssl_protocols SSLv3;
        proxy_connect_timeout 5s;
        proxy_read_timeout 30s;

The default SSL implementation in Weblogic (and OSB) is Certicom.

However, support for the Certicom SSL implementation is deprecated and will eventually be removed.

We need a plan for switching to JSSE, the default JRE implementation.

And it is not as easy as clicking a checkbox.

Read more ›

How to Use Unit of Order with OSB

Using Unit-of-Order with OSB. Download the test project.


Unit-of-Order (UOO) is an Oracle (BEA) extension to standard JMS.

It enforces the order of messages with the same key so that the messages are consumed in the order they were added to the queue.

This functionality works in a cluster, too, by assigning each UOO key to one and only one managed server.

Read more ›

Dynamic Routing to Foreign Pipelines and Flows

Dynamic routing to other projects’ pipelines and flows using thunks.


OSB 12 is out.

The dynamic routing functionality in OSB 12 has been extended with the ability to call pipelines and flows (a.k.a. split-joins) directly.

Read more ›

How To Hide Dependency Libraries in an OSB Callout JAR

How to place dependency libraries into a JAR and hide them from the callout dialog.


Sometimes we have to use OSB’s Java callouts. On many occasions the callout Java code requires the use of external libraries (dependency JARs).

Here comes the problem: how to deploy these dependency JARs?

Read more ›

JSON Proxies: Inspecting & Modifying the Payload

How to read and update JSON in OSB. Download the full example.
UPDATE from future!

DO NOT CONVERT JSON to XML! It is a pain if you need to convert it back! Use Javascript!
Using Javascript to Inspect & Modify JSON Payload


We can make a pass-through JSON proxy in OSB pretty easily.

Sometimes this is not enough, however, and we need to inspect or even modify the JSON payload.

Read more ›

OSB and JSON Proxies: Gathering Statistics

How to collect OSB per-operation statistics for a JSON proxy. Download the full example.


(Special thanks to Saeed Awan for the reference implementation.)

In one of my previous posts, I demonstrated how to implement a simple pass-through JSON proxy.

The implementation though has one important deficiency – there are no statistics visible in the OSB console.

Read more ›

GenericParallel Primer: Passing the User Headers

How to pass OSB user headers to and from the backend service in a parallel call.


A split-join service drops all user headers. End of story.

This is because split-join is not really an OSB service, but an implementation of a BPEL engine. It has no idea of OSB-specific concepts such as user headers.

As usual, GenericParallel has a built-in workaround for this limitation.

Read more ›

Split-Join: Getting Fault Details in CatchAll

To get fault details in split-join’s CatchAll, call an intermediary proxy.


When split-join invokes an OSB business service and that call fails, CatchAll does not help.

Instead of detailed information of what went wrong, the fault variable contains only a single element <soapFault> from the BPEL extensions namespace.

Read more ›