I had the same problem, to process the message sequentially in a cluster yet using MDBs. It was only achieved at the database level. The message was inserted into the DB, there was a Timestamp field to indicate the insertion time. A
thread picks up one message at a time from DB and processes it.
The solution had performance drawbacks but I guess we would be able to live with it.