activemq-artemis/examples/javaee/mdb-message-selector
Clebert Suconic 9a587c5633 ACTIVEMQ6-3 renaming package names from activemq6 to activemq
https://issues.apache.org/jira/browse/ACTIVEMQ6-3

We are renaming packages from activemq6 to activemq as that's more generic and version independent
The previous commit renamed the directories. On this commit now I'm changing the code.
If we changed the code and the directories on the same commit git would remove and add a lot of files
without recognizing the renames.
2014-11-17 09:33:53 -05:00
..
server/standalone/configuration ACTIVEMQ6-1 - Initial HornetQ Donation Commit 2014-11-10 10:31:25 -06:00
src ACTIVEMQ6-3 renaming package names from activemq6 to activemq 2014-11-17 09:33:53 -05:00
pom.xml ACTIVEMQ6-3 renaming package names from activemq6 to activemq 2014-11-17 09:33:53 -05:00
readme.html ACTIVEMQ6-1 - Initial HornetQ Donation Commit 2014-11-10 10:31:25 -06:00

readme.html

<html>
  <head>
    <title>HornetQ Java EE MDB Message Selector Example</title>
    <link rel="stylesheet" type="text/css" href="../../common/common.css" />
    <link rel="stylesheet" type="text/css" href="../../common/prettify.css" />
    <script type="text/javascript" src="../../common/prettify.js"></script>
  </head>
  <body onload="prettyPrint()">
     <h1>Java EE MDB Message Selector Example</h1>

     <p>This example shows you how to send a message to an MDB that is configured to use a message selector</p>
     <p>The example will send deploy a simple MDB and demonstrate sending a message and the MDB consuming only the message that matches the message selector.</p>

     <p>The example leverages the JBoss Arquillian framework to run a WildFly instance and deploy the MDB.</p>

     <h2>Example step-by-step</h2>

     <p><i>download WildFly 8.0.0.Final from <a href="http://wildfly.org/downloads/">here</a> and install.</i></p>
     <p><i>set the JBOSS_HOME property to point to the WildFly install directory</i></p>
     <p><i>type <code>mvn verify</code> from the example directory to run</i></p>

     <ol>
        <li>First we need to get an initial context so we can look-up the JMS connection factory and destination objects from JNDI. This initial context will get it's properties from the <code>jndi.properties</code> file in the directory <code>config</code></li>
        <pre class="prettyprint">
           final Properties env = new Properties();

           env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");

           env.put(Context.PROVIDER_URL, "http-remoting://localhost:8080");

           initialContext = new InitialContext(env);
        </pre>

        <li>We look up the JMS queue object from JNDI</li>
        <pre class="prettyprint">
           Queue queue = (Queue)initialContext.lookup("jms/queues/testQueue");
        </pre>

        <li>We look up the JMS connection factory object from JNDI</li>
        <pre class="prettyprint">
           ConnectionFactory cf = (ConnectionFactory)initialContext.lookup("/jms/RemoteConnectionFactory");
        </pre>

        <li>We create a JMS connection</li>
        <pre class="prettyprint">
           connection = cf.createConnection("guest", "password");
        </pre>

        <li>We create a JMS session. The session is created as non transacted and will auto acknowledge messages.</li>
        <pre class="prettyprint">
           <code>Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);</code>
        </pre>

        <li>We create a JMS message producer on the session. This will be used to send the messages.</li>
        <pre class="prettyprint">
          <code>MessageProducer messageProducer = session.createProducer(queue);</code>
       </pre>

        <li>We create a JMS text messages that we are going to send.</li>
        <pre class="prettyprint">
           <code> TextMessage blueMessage = session.createTextMessage("This is a text message");</code>
        </pre>

        <li>Set the color property on the message to 'BLUE'.</li>
        <pre class="prettyprint">
           <code> blueMessage.setStringProperty("color", "BLUE");</code>
        </pre>

        <li>We send messages to the queue</li>
        <pre class="prettyprint">
           <code>messageProducer.send(blueMessage);</code>
        </pre>

         <li>We create a second JMS text message that we are going to send.</li>
        <pre class="prettyprint">
           <code> TextMessage redMessage = session.createTextMessage("This is a text message");</code>
        </pre>

        <li>Set the color property on the message to 'RED'.</li>
        <pre class="prettyprint">
           <code> redMessage.setStringProperty("color", "RED");</code>
        </pre>

        <li>We send messages to the queue</li>
        <pre class="prettyprint">
           <code>messageProducer.send(redMessage);</code>
        </pre>
        
        <li>The MDB receives the message<br />
            We know the message is a TextMessage so we cast to it.
            </li>
        <pre class="prettyprint">
           <code>TextMessage tm = (TextMessage)message;</code>
        </pre>

         <li>We get the color property to check it
            </li>
        <pre class="prettyprint">
           <code>String color = textMessage.getStringProperty("color");</code>
        </pre>
            
        <li>The MDB gets the text and color and print it
        </li>
        <pre class="prettyprint">
            <code>String text = tm.getText();
            System.out.println("message " + text + " received color=" + color);
            </code>
        </pre>
        
        <li>And finally, <b>always</b> remember to close your JMS connections and resources after use, in a <code>finally</code> block. Closing a JMS connection will automatically close all of its sessions, consumers, producer and browser objects</li>

        <pre class="prettyprint">
           <code>finally
           {
              if (initialContext != null)
              {
                initialContext.close();
              }
              if (connection != null)
              {
                 connection.close();
              }
           }</code>
        </pre>
     </ol>
  </body>
</html>