My experiences with JMS are lackluster when it comes to performance. We need all of our queues to be persisted, so that slows us down a bit. And under heavy load, the system can come to its knees.
Since the main reason for using JMS is to enable asynchronous processing, why not drop JMS in favor of:
1.) A stateless session bean that persists the object to be processed in a database. (optional)
2.) Use a timer service that queries for those persisted objects and then process them in batch order.
I am wondering if all of that queue management stuff that goes on in JBoss is really worth it in certain circumstances. Especially if most of the consumers to your queues are MDBs.
In fact, you really would not even need to write a stateless session bean if you didn't want to. You could just use hibernate to put a record in a table somewhere that the timer finds.