"JMS can be a real win from a scalability, caching, and avoiding-vendor-lock-in standpoint. More specific to the system and/or application is how JMS relates to performance, security, processing order, and data integrity. One thing is well understood: JMS integration into a distributed system is complicated.
Avoid JMS unless its benefits far outweigh its liabilities. In making this determination, your JMS system analysis should focus on both system-dependent and system-independent features. If your analysis suggests benefiting from caching, performance, and scalability from multiple JMS servers, JMS may be appropriate for your system. However, many simpler alternatives can provide the requisite layer of abstraction between client and server while taking advantage of HTTP and XML, and offer desired scalability and synchronous/asynchronous communication," says Thomas Laramee in this JavaWorld article: