I have to connect from IBM BPM (Business Process Manager) to Oracle AQ (Advanced Queueing) for a project. We have two legacy applications communicating over Oracle AQ. One of the applications is going BPM, the goal is executable BPMN on IBM BPM 8.5. The second application is a partner application and should not be changed at all. I have only access to the Oracle AQ that is the interface between both applications.
Writing a message in Oracle AQ is not a problem. You only have to create an Oracle stored procedure that enqueues the message and call the stored procedure in IBM using the JDBC adapter. The problem is to dequeue a message immediate as it is written to the Oracle AQ.
I found out that there are many ways how to connect both worlds. Here are just some of them:
- You can use the E-Business Adapter.
- You can expose oracle AQ as JMS queue on WebLogic, create a message bridge from a jms queue on WebLogic to a jms queue on WebSphere and use the jms queue in WebSphere in IBM BPM.
- You can use the IBM Event Store.
I did not like any of the options for my project for different reasons. I found some of the options too complex or they require additional software (WebLogic for example). Also I don’t like the ideas of polling for records and for creating more queues or tables and doing unnecessary IO (my primary job is performance tuning ;-)). Also I thought this all is the wrong direction.
I actually would like to communicate with SOAP messages with all my partners. In my case I would prefer, that the legacy application forwards me the message from the AQ as a SOAP message.
There are two features in the Oracle database that help to do this:
- You can register a stored procedure for notification on a queue. Oracle calls it when a message is being enqueued. The Stored Procedure can access the enqueued message.
- You can call a Web Service from Oracle stored procedure using UTL_HTTP, UTL_DBWS or Java in the database.
When you combine these two features you are able to forward a message from Oracle AQ to IBM BPM. There you can catch the message as an event and you can also use some attributes from the message to correlate it with a running process instance. You will not have to poll, but be informed by the database when message arrives. You also don’t need any additional queues, tables or software (as WebLogic).
If you also couple IBM BPM and Oracle AQ, it will be nice, if you share your experience.