Summary
JMS applications have the following benefits:
The loose coupling nature of JMS applications gives developers the flexibility to implement business logic in a distributed environment.
Asynchronous communication enables the application to be deployed in a more scalable and fault-tolerant fashion than synchronous EJBs.
Portability is a big advantage for JMS applications, as JMS applications aren't tied to one vendor-proprietary API.
Guaranteed message delivery provided by the P2P model is inherent, relieving a developer of this coding responsibility.
Broadcast message delivery provided by the pub/sub model is another feature automatically provided by the JMS.
The goal of the JMS specification is to provide a common set of Java APIs to enable programmers to write messaging applications easily. JMS 1.02 addresses the common message and delivery API for messaging but doesn't address the underlying complicated services that can be implemented in different ways. The JMS 1.02 specification lets JMS providers implement these services as they see fit, and it's abstracted from programmers. However, the current version of JMS specification doesn't address load balancing and fault tolerance, error notification, security, administration, wire protocol, or message type repository. These issues are generally handled by the JMS provider vendor or handled by the J2EE 1.3 compliant application server framework.