First I'll write what I think the process should be to solve my problem before I lose you attention. My problem and existing setup are further below. Here's what I think should happen to allow for future flexibility. Please advise:
The triple queuing, MSSQL, Oracle and RabbitMQ, seems like overkill but on the other hand they all perform different things.
I have a greenfield messaging/ESB/middleware/SOA environment and would like to set it up properly to handle, at first, the problem below.
Both LOB apps need to interact with the document management system by signalling when new policies, customers, etc. are created as well as when they are modified. We don't have access to LOB-A source code for modification. We do have access to LOB-B source code but developers are busy on other projects. Anyway we think it is easier to have the database alert the DMS when a record has changed instead of locating all the places in the app's source code where the record might be changed and doing the alert via the application layer.
I know that Database-as-IPC is an anti-pattern, although I've read recommendations on how to best achieve this, at least for SQL Server: Best way to use a DB table as a message/job queue and http://rusanu.com/2010/03/26/using-tables-as-queues/. I'm already signalling the DMS from LOB-A by using SQL Service Broker External Activation in a point to point manner.
Whew! What do you think?
Disclaimer: I am the CTO of AdroitLogic, which builds the UltraESB mentioned in the question
You can easily get the ESB itself to poll the MS SQL and Oracle Databases for new actions to be performed. This could be scheduled in the ESB giving a cron schedule etc, or a simple delay (e.g. every hour). The ESB can enrich, transform and route etc, but you will need a way to track which records have been successfully processed - maybe a new column in the polled tables? Once that's available, you really do not need a persistent message queue, since the ESB can poll for un-processed records, do whatever is expected over them, and post them to the DMS - and update status as successful or failed. Unless the DMS rejects or becomes unavailable, there is no real point in-retrying, but you may want to do that, and that's possible too. If DMS accepts the record, the ESB can directly update the table columns. If you really want to use a message queue - that too is certainly possible, and depends on your selection.