I'm about to implement an OpenMQ HA cluster with the Oracle database configured as a Real Application Cluster (RAC).
The Oracle RAC database will have two nodes.
I'm trying to understand the behaviour I can expect from OpenMQ if one of the database nodes fails whilst a broker is connected.
* Is the node failure hidden to consumers of a broker?
* Does the broker automatically reconnect to the database or is some application level processing required?
* Do database transactions get automatically re-applied after re-connecting to the remaining database node?
Does anyone have any experience of using OpenMQ and Oracle RAC that might be able to help? Else can someone please provide me with an OpenMQ source code reference such that I might be able to investigate further?
You should use at least 4.4u2 for there are important improvements in 4.4u2 and 4.5 for OpenMQ enhanced cluster support.
The broker provides database connection validation capability. If a database connection fails on validation, the connection will be destroyed and a new connection will be created where the broker relies on the underline database driver ConnectionPoolDataSource to return a valid connection. So you should use a ConnectionPoolDataSource for imq.persist.jdbc.oracle.driver.
In case of node failure, it depends on how transparent to the application (broker) layer from the underline database and driver. When a SQLException occurs, the broker attempts to rollback the transaction and retry the operation based on a retry strategy that is completely vendor dependent (not using JDBC4 yet). Therefore it's possible not all retryable errors are captured. If the failed operation can not be retried, it will be propagated up.
You can download latest OpenMQ binary and source at
Is a final build of 4.4u2 available yet, either the open source (OpenMQ) or Sun System Message Queue version? I've also looked for a v4.5 of Sun System Message Queue version, but can't find this. (we may be looking for commercial support hence looking at Sun System Message Queue version)
( this link states 4.4u2 its not yet available, but is dated from May - http://forums.sun.com/thread.jspa?threadID=5435090 )
Do you know if there is any support within 4.4 or 4.5 for Fast application Failover (FAN) the event based mechanism used to communicate Oracle RAC node failure? Or any other Oracle specific functionality?
Finally, is there a mechanism for switching off the retry behaviour, such that the application can take responsibility for all retry behaviour?
4.4u2 has been released with GlassFish 3.0.1 and 2.1.1 patch 7. The latest 4.5 build are available at
You can specify any valid Oracle JDBC driver URL via broker property
and any other valid Oracle JDBC driver properties,
However not all Oracle features that can be specified by these have been tested with MQ.
The retry logic is internal to the broker and currently not pluggable. However certain JDBC driver may provide interface to intercept SQLException.