Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 126 lines (102 sloc) 5.131 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
<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 an AS 7 instance and deploy the MDB.</p>

     <h2>Example step-by-step</h2>
     <p><i>download AS 7.1.1.final from <a href="http://www.jboss.org/jbossas/downloads/">here</a> and install.</i></p>
     <p><i>set the JBOSS_HOME property to point to AS7 install directory</i></p>
     <p><i>To run the example simply type <code>mvn test</code>from the example directory</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">
           <code>initialContext = new InitialContext();</code>
        </pre>

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

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

        <li>We create a JMS connection</li>
        <pre class="prettyprint">
           <code>connection = cf.createConnection();</code>
        </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>
Something went wrong with that request. Please try again.