This document provides a high level view of the JBoss Messaging JMS Facade design.
JBoss Messaging will be a fully compliant JMS 1.1 message provider. It is architected to work as a sum of two relatively independent layers:
The JBoss Messaging Core, a framework that can be used to create distributed and reliable message transport systems. JBoss Messaging Core doesn't have any dependencies on the JMS API. Its design is presented in the JBoss Messaging Core design document.
The JMS Facade, a collection of classes and configuration files that add a JMS 1.1 compliant facade to the Messaging Core. This layer takes care of simple JMS requirements and translates other requests into the more generic messaging API (the delegate interfaces). The JMS Facade makes possible for any JMS 1.1 client to connect to a JBoss Messaging server, send and receive messages and use any other facilities mandated by the JMS specifications. It is also possible to add different facades (SMTP, SOAP) in top of the Messaging Core, but this subject is outside the scope of this document.
The JMS Facade layer provides implementation for the following JMS API elements:
The delegates are interfaces that define a subset of the JMS API. They take the verbosity out of JMS and leave only strictly necessary method calls. The JMS Facade uses implementations of the delegates at two levels:
A set of dynamic proxies implement the delegate interfaces. For each proxy, the InvocationHandlers acts as container for the client-side interceptors.
Actual instances implement the delegate interfaces. These instances are factories for dependent proxies and also hold state on the behalf of clients.
The last interceptor in the ConnectionFactoryDelegate proxy chain is
that delegates the invocation to JBoss Remoting.
In the case the client-side dynamic proxies are colocated with the server, remoting is no longer necessary, the invocation can be performed directly.
These services are uded by the interceptors to perform the real work.