Currently, client side JMS functionality is implemented in a set of aspects: SessionAspect, TransactionAspect, FactoryAspect, etc. There seems no good reason to have these as separate aspects since we either provide all the jms functionality or none of it.
Having the functionality distributed across several aspects makes it hard to communicate between them meaning the code is messy and hard to follow.
We should consolidate into one aspect, from which hang a set of classes Session, Connection, Consumer etc which implement the jms functionality in a nice OO way. This will make the code simpler and easier to understand and possibly more performant since we would avoid unnecessary calls through the stack.
The classes should be chosen to represent generic messaging, not just JMS (e.g. no need for a producer).
We also need to have an extension point so customers can add their own vanilla interceptors.