Configuring a Session Bean to send messages to ActiveMQ

In the attached example application, the three MDBs use the SenderEJB to send JMS messages to an ActiveMQ queue. In this example, I will be explaining how to:

Configure and deploy an ActiveMQ Queue to JBoss

Configure and deploy an ActiveMQ QueueConnectionFactory to JBoss

Configure an EJB, deployed to JBoss, to reference the above two.

The Bean

In the ejb-jar.xml deployment descriptor, the SenderEJB is declared as follows:

ejb-jar.xml – session bean declaration

The jms/MyQueueConnectionFactory is the JNDI name the SenderEJB will use to lookup a javax.jms.QueueConnectionFactory. We will configure it to point to an ActiveMQ QueueConnectionFactory.

The jms/LogQueue is the JNDI name the SenderEJB will use to lookup the javax.jms.Queue it will send messages to. We use the message-destination-link element to refer to the LoggingQueue which is declared in the assembly-descriptor section of the ejb-jar.xml deployment descriptor as:

This first snippet configures the QueueConnectionFactory, declared above, and places it in JNDI at activemq/QueueConnectionFactory:

panacya-jms-ds.xml – The QueueConnectionFactory

This second snippet configures the Queue, declared above, and places it in JNDI at activemq/queue/outbound:

panacya-jms-ds.xml – The Queue

In the panacya-jms-ds.xml file section shown above, the value of the Properties element is set to PhysicalName=queue.outbound. This value is the physical name of the ActiveMQ destination the SenderEJB will be sending messages to and not a JNDI name. In other words, the value of the PhysicalName property has no meaning to JBoss. It is purely an ActiveMQ setting.