Something I was researching for a pet project of mine:
In many messaging topologies there are JMS Brokers (server side) and a JMS client side. Often it makes sense to deploy a broker within your JVM. This allows you to optimise away a network hop; making the networking of JMS as efficient as pure RMI, but with all the usual JMS features of location independence, reliability, load balancing etc.
[From Apache ActiveMQ ™ -- How do I embed a Broker inside a Connection]