<div class="wiki-content maincontent"><p>Create the file &lt;webapp-root&gt;/META-INF/context.xml.  Here is an example:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
&lt;Context antiJARLocking=&quot;true&quot;&gt;
    &lt;Resource
        name=&quot;jms/ConnectionFactory&quot;
        auth=&quot;Container&quot;
        type=&quot;org.apache.activemq.ActiveMQConnectionFactory&quot;
        description=&quot;JMS Connection Factory&quot;
        factory=&quot;org.apache.activemq.jndi.JNDIReferenceFactory&quot;
        brokerURL=&quot;tcp://localhost:61616&quot;
        brokerName=&quot;LocalActiveMQBroker&quot;
        useEmbeddedBroker=&quot;false&quot;/&gt;

    &lt;Resource name=&quot;jms/topic/MyTopic&quot;
        auth=&quot;Container&quot;
        type=&quot;org.apache.activemq.command.ActiveMQTopic&quot;
        factory=&quot;org.apache.activemq.jndi.JNDIReferenceFactory&quot;
        physicalName=&quot;MY.TEST.FOO&quot;/&gt;
    &lt;Resource name=&quot;jms/queue/MyQueue&quot;
        auth=&quot;Container&quot;
        type=&quot;org.apache.activemq.command.ActiveMQQueue&quot;
        factory=&quot;org.apache.activemq.jndi.JNDIReferenceFactory&quot;
        physicalName=&quot;MY.TEST.FOO.QUEUE&quot;/&gt;
&lt;/Context&gt;
]]></script>
</div></div>
<p>This will setup the JNDI for the ConectionFactory and Topic to work within Tomcat.</p>

<p>Here is some example code that will publish a test message to the MY.TEST.FOO Topic:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
try {
    InitialContext initCtx = new InitialContext();
    Context envContext = (Context) initCtx.lookup(&quot;java:comp/env&quot;);
    ConnectionFactory connectionFactory = (ConnectionFactory) envContext.lookup(&quot;jms/ConnectionFactory&quot;);
    Connection connection = connectionFactory.createConnection();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    MessageProducer producer = session.createProducer((Destination) envContext.lookup(&quot;jms/topic/MyTopic&quot;));

    Message testMessage = session.createMessage();
    testMessage.setStringProperty(&quot;testKey&quot;, &quot;testValue&quot;);
    producer.send(testMessage);
} catch (NamingException e) {
    // TODO handle exception
} catch (JMSException e) {
    // TODO handle exception
}
]]></script>
</div></div></div>

