You should go to Tomcat documentation and read JNDI Resources HOW-TO, especially part: Configure Tomcat's Resource Factory.

ActiveMQ has ready JNDI resource factory for all its administered objects: ConnectionFactory and destinations.

You must provide it as a parameter factory for your resources:

<Context ...>
  ...
  <Resource name="jms/ConnectionFactory" auth="Container"
            type="org.apache.activemq.ActiveMQConnectionFactory"/>
  <ResourceParams name="jms/ConnectionFactory">
    <parameter>
      <name>factory</name>
      <value>org.activemq.jndi.JNDIReferenceFactory</value>
    </parameter>
    <parameter>
      <name>brokerURL</name>
      <value>vm://localhost</value>
    </parameter>
    <parameter>
      <name>brokerName</name>
      <value>LocalActiveMQBroker</value>
    </parameter>
    <parameter>
      <name>useEmbeddedBroker</name>
      <value>true</value>
    </parameter>
  </ResourceParams>
  ...
</Context>

 

If you are using Tomcat 5.5 or later then try this instead...

<Context>
    ...
  <Resource name="jms/ConnectionFactory" auth="Container" type="org.apache.activemq.ActiveMQConnectionFactory" description="JMS Connection Factory"
        factory="org.apache.activemq.jndi.JNDIReferenceFactory" brokerURL="vm://localhost" brokerName="LocalActiveMQBroker"/>
    ....
</Context>

 

Also, don't forget to put ActiveMQ and dependent jars to tomcat shared lib directory.

Creating destinations in Tomcat 5.5 or later

This is completely untested but should work

<Context>
    ...
  <Resource name="jms/someTopic" auth="Container" type="org.apache.activemq.command.ActiveMQTopic" description="my Topic"
        factory="org.apache.activemq.jndi.JNDIReferenceFactory" physicalName="FOO.BAR"/>

  <Resource name="jms/aQueue" auth="Container" type="org.apache.activemq.command.ActiveMQQueue" description="my Queue"
        factory="org.apache.activemq.jndi.JNDIReferenceFactory" physicalName="FOO.BAR"/>
    ....
</Context>

 

JMX Tip when working with Tomcat

If you want to use JMX with Tomcat and then connect via JConsole to view the JMX MBeans of the server then set the following

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 \
    -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
Graphic Design By Hiram