Simplify JMS with the Facade Design Pattern. [Erik's Weblog]
This is a good article. JMS can sure use a Facade to make it easier to work with. Also right now too much deployment configuration and quality of service details need to be embedded into your application code when using JMS. The threading and pooling issues are also quite complex.
The Messenger project solves these problems, providing a simple facade over JMS (while keeping the core JMS interfaces of Message, MessageListener etc) with Session and MessageProducer pooling and a simple XML deployment descriptor to decouple how the JMS connections and sessions are created and what quality of service you need.
Messenger is particularly well suited when JMS is used in web tiers which is a powerful way to add reliable asynchronous procesing to your web tier while remaining loosely coupled from your back end services.