JBoss.org Community Documentation
Up to this point we have looked at the standard JMS client/server architecture. The JMS specification defines an advanced set of interfaces that allow for concurrent processing of a destination's messages, and collectively this functionality is referred to as application server facilities (ASF). Two of the interfaces that support concurrent message processing, javax.jms.ServerSessionPool
and javax.jms.ServerSession
, must be provided by the application server in which the processing will occur. Thus, the set of components that make up the JBossMQ ASF involves both JBossMQ components as well as JBoss server components. The JBoss server MDB container utilizes the JMS service's ASF to concurrently process messages sent to MDBs.
The responsibilities of the ASF domains are well defined by the JMS specification and so we won't go into a discussion of how the ASF components are implemented. Rather, we want to discuss how ASF components used by the JBoss MDB layer are integrated using MBeans that allow either the application server interfaces, or the JMS provider interfaces to be replaced with alternate implementations.
Let's start with the org.jboss.jms.jndi.JMSProviderLoader
MBean. This MBean is responsible for loading an instance of the org.jboss.jms.jndi.JMSProviderAdaptor
interface into the JBoss server and binding it into JNDI. The JMSProviderAdaptor
interface is an abstraction that defines how to get the root JNDI context for the JMS provider, and an interface for getting and setting the JNDI names for the Context.PROVIDER_URL
for the root InitialContext
, and the QueueConnectionFactory
and TopicConnectionFactory
locations in the root context. This is all that is really necessary to bootstrap use of a JMS provider. By abstracting this information into an interface, alternate JMS ASF provider implementations can be used with the JBoss MDB container. The org.jboss.jms.jndi.JBossMQProvider
is the default implementation of JMSProviderAdaptor
interface, and provides the adaptor for the JBossMQ JMS provider. To replace the JBossMQ provider with an alternate JMS ASF implementation, simply create an implementation of the JMSProviderAdaptor
interface and configure the JMSProviderLoader with the class name of the implementation. We'll see an example of this in the configuration section.
In addition to being able to replace the JMS provider used for MDBs, you can also replace the javax.jms.ServerSessionPool interface implementation. This is possible by configuring the class name of the org.jboss.jms.asf.ServerSessionPoolFactory
implementation using the org.jboss.jms.asf.ServerSessionPoolLoader
MBean PoolFactoryClass
attribute. The default ServerSessionPoolFactory
factory implementation is the JBoss org.jboss.jms.asf.StdServerSessionPoolFactory
class.