[jboss-cvs] JBoss Messaging SVN: r6370 - in trunk: examples/jms and 8 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Apr 8 11:55:54 EDT 2009


Author: gaohoward
Date: 2009-04-08 11:55:54 -0400 (Wed, 08 Apr 2009)
New Revision: 6370

Added:
   trunk/examples/jms/queue-selector/
   trunk/examples/jms/queue-selector/build.xml
   trunk/examples/jms/queue-selector/readme.html
   trunk/examples/jms/queue-selector/server0/
   trunk/examples/jms/queue-selector/server0/client-jndi.properties
   trunk/examples/jms/queue-selector/server0/jbm-configuration.xml
   trunk/examples/jms/queue-selector/server0/jbm-jms.xml
   trunk/examples/jms/queue-selector/server0/jbm-queues.xml
   trunk/examples/jms/queue-selector/server0/jbm-security.xml
   trunk/examples/jms/queue-selector/server0/jbm-standalone-beans.xml
   trunk/examples/jms/queue-selector/src/
   trunk/examples/jms/queue-selector/src/org/
   trunk/examples/jms/queue-selector/src/org/jboss/
   trunk/examples/jms/queue-selector/src/org/jboss/jms/
   trunk/examples/jms/queue-selector/src/org/jboss/jms/example/
   trunk/examples/jms/queue-selector/src/org/jboss/jms/example/QueueSelectorExample.java
Modified:
   trunk/.classpath
   trunk/examples/jms/topic-selector-example2/readme.html
Log:
added queue selector example


Modified: trunk/.classpath
===================================================================
--- trunk/.classpath	2009-04-08 15:40:39 UTC (rev 6369)
+++ trunk/.classpath	2009-04-08 15:55:54 UTC (rev 6370)
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry excluding="**/.svn/**/*" kind="src" path="src/main"/>
+	<classpathentry kind="src" path="examples/jms/queue-selector/src"/>
 	<classpathentry kind="src" path="build/src"/>
 	<classpathentry kind="src" path="tests/config"/>
 	<classpathentry kind="src" path="src/config"/>

Added: trunk/examples/jms/queue-selector/build.xml
===================================================================
--- trunk/examples/jms/queue-selector/build.xml	                        (rev 0)
+++ trunk/examples/jms/queue-selector/build.xml	2009-04-08 15:55:54 UTC (rev 6370)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE project [
+      <!ENTITY libraries SYSTEM "../../../thirdparty/libraries.ent">
+      ]>
+
+<!-- =========================================================================================== -->
+<!--                                                                                             -->
+<!-- JBoss, Home of Professional Open Source                                                     -->
+<!-- Copyright 2005, JBoss Inc., and individual contributors as indicated                        -->
+<!-- by the @authors tag. See the copyright.txt in the distribution for a                        -->
+<!-- full listing of individual contributors.                                                    -->
+<!--                                                                                             -->
+<!-- This is free software; you can redistribute it and/or modify it                             -->
+<!-- under the terms of the GNU Lesser General Public License as                                 -->
+<!-- published by the Free Software Foundation; either version 2.1 of                            -->
+<!-- the License, or (at your option) any later version.                                         -->
+<!--                                                                                             -->
+<!-- This software is distributed in the hope that it will be useful,                            -->
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of                              -->
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU                            -->
+<!-- Lesser General Public License for more details.                                             -->
+<!--                                                                                             -->
+<!-- You should have received a copy of the GNU Lesser General Public                            -->
+<!-- License along with this software; if not, write to the Free                                 -->
+<!-- Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA                          -->
+<!-- 02110-1301 USA, or see the FSF site: http://www.fsf.org.                                    -->
+<!--                                                                                             -->
+<!-- =========================================================================================== -->
+
+
+<project default="run" name="JBoss Messaging JMS Queue Selector Example">
+
+   <import file="../common/build.xml"/>
+
+   <target name="run">
+      <antcall target="runExample">
+         <param name="example.classname" value="org.jboss.jms.example.QueueSelectorExample"/>
+      </antcall>
+   </target>
+
+   <target name="runRemote">
+      <antcall target="runExample">
+         <param name="example.classname" value="org.jboss.jms.example.QueueSelectorExample"/>
+         <param name="jbm.example.runServer" value="false"/>
+      </antcall>
+   </target>
+
+</project>

Added: trunk/examples/jms/queue-selector/readme.html
===================================================================
--- trunk/examples/jms/queue-selector/readme.html	                        (rev 0)
+++ trunk/examples/jms/queue-selector/readme.html	2009-04-08 15:55:54 UTC (rev 6370)
@@ -0,0 +1,144 @@
+<html>
+  <head>
+    <title>JBoss Messaging JMS Queue Selector Example</title>
+    <link rel="stylesheet" type="text/css" href="../common/common.css">
+  </head>
+  <body>
+     <h1>JMS Queue Selector Example</h1>
+     <br>
+     <p>This example shows you how to selectively consume messages using message selectors with queue consumers.</p>
+     
+     <p>Message selectors are strings with special syntax that can be used in creating consumers. Message consumers
+     that are thus created only receive messages that match its selector. On message delivering, the JBoss Message
+     Server evaluates the corresponding message headers of the messages against each selector, if any, and then delivers
+     the 'matched' messages to its consumer. Please consult the JMS 1.1 specification for full details.</p>
+     
+     <p>In this example, three message consumers are created on a queue. The first consumer is created with selector
+     <code>'color=red'</code>, it only receives messages that
+     have a 'color' string property of 'red' value; the second is created with selector <code>'color=green'</code>, it 
+     only receives messages who have a 'color' string property of 
+     'green' value; and the thrid without a selector, which means it receives all messages. To illustrate, three messages 
+     with different 'color' property values are created and sent.</p>
+
+     <p>Selectors can be used with both queue consumers and topic consumers. The difference is that with queue consumers,
+     a message is only delivered to one consumer on the queue, while topic consumers the message will be delivered to every
+     matching consumers. In this example, if the third consumer (anyConsumer) were the first consumer created, it will 
+     consume the first message delivered, therefore there is no chance for the next consumer to get the message, even if it
+     matches the selector.</p>
+     
+     <br>
+     <h2>Example step-by-step</h2>
+     <p><i>To run the example, simply type <code>ant</code> from this directory</i></p>
+     <br>
+     <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>client-jndi.properties</code> file in the directory <code>../common/config</code></li>
+        <pre>
+           <code>InitialContext initialContext = getContext();</code>
+        </pre>
+
+        <li>We look-up the JMS queue object from JNDI</li>
+        <pre>
+           <code>Queue queue = (Queue) initialContext.lookup("/queue/exampleQueue");</code>
+        </pre>
+
+        <li>We look-up the JMS connection factory object from JNDI</li>
+        <pre>
+           <code>ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("/ConnectionFactory");</code>
+        </pre>
+
+        <li>We create a JMS connection</li>
+        <pre>
+           <code>connection = cf.createConnection();</code>
+        </pre>
+
+        <li>We start the connection</li>
+        <pre>
+           <code>connection.start();</code>
+        </pre>
+
+        <li>We create a JMS session. The session is created as non transacted and will auto acknowledge messages.</li>
+        <pre>
+           <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>
+          <code>MessageProducer messageProducer = session.createProducer(topic);</code>
+       </pre>
+
+        <li>We create two selectors.</li>
+         <pre>
+           <code>
+           String redSelector = "color='red'";
+           String greenSelector = "color='green'";
+           </code>
+         </pre>
+
+        <li>We Create a JMS Message Consumer that receives 'red' messages.</li>
+        <pre>
+          <code>
+          MessageConsumer redConsumer = session.createConsumer(queue, redSelector);
+          redConsumer.setMessageListener(new SimpleMessageListener("red"));
+         </code>
+        </pre>
+
+        <li>We Create a second JMS Message Consumer that receives 'green' messages.</li>
+        <pre>
+          <code>
+          MessageConsumer greenConsumer = session.createConsumer(queue, greenSelector);
+          greenConsumer.setMessageListener(new SimpleMessageListener("green"));
+         </code>
+        </pre>
+
+        <li>We Create another JMS Message Consumer that receives all messages. Please not that the order
+        of consumers on a queue is of significance. If the anyConsumer is created before the above two, the 
+        result will be totally different.</li>
+        <pre>
+          <code>
+          MessageConsumer anyConsumer = session.createConsumer(queue);
+          anyConsumer.setMessageListener(new SimpleMessageListener("any"));
+         </code>
+        </pre>
+
+        <li>We Create three messages, each has a different color property.</li>
+        <pre>
+           <code>
+           TextMessage redMessage = session.createTextMessage("Red");
+           redMessage.setStringProperty("color", "red");
+           TextMessage greenMessage = session.createTextMessage("Green");
+           greenMessage.setStringProperty("color", "green");
+           TextMessage blueMessage = session.createTextMessage("Blue");
+           blueMessage.setStringProperty("color", "blue");
+           </code>
+        </pre>
+
+        <li>We send the messages to the topic</li>
+        <pre>
+           <code>
+           producer.send(redMessage);
+           System.out.println("Message sent: " + redMessage.getText());
+           producer.send(greenMessage);
+           System.out.println("Message sent: " + greenMessage.getText());
+           producer.send(blueMessage);
+           System.out.println("Message sent: " + blueMessage.getText());
+           </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>
+           <code>finally
+           {
+              if (initialContext != null)
+              {
+                initialContext.close();
+              }
+              if (connection != null)
+              {
+                 connection.close();
+              }
+           }</code>
+        </pre>
+     </ol>
+  </body>
+</html>
\ No newline at end of file

Added: trunk/examples/jms/queue-selector/server0/client-jndi.properties
===================================================================
--- trunk/examples/jms/queue-selector/server0/client-jndi.properties	                        (rev 0)
+++ trunk/examples/jms/queue-selector/server0/client-jndi.properties	2009-04-08 15:55:54 UTC (rev 6370)
@@ -0,0 +1,3 @@
+java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
+java.naming.provider.url=jnp://localhost:1099
+java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

Added: trunk/examples/jms/queue-selector/server0/jbm-configuration.xml
===================================================================
--- trunk/examples/jms/queue-selector/server0/jbm-configuration.xml	                        (rev 0)
+++ trunk/examples/jms/queue-selector/server0/jbm-configuration.xml	2009-04-08 15:55:54 UTC (rev 6370)
@@ -0,0 +1,27 @@
+<deployment xmlns="urn:jboss:messaging"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="urn:jboss:messaging ../schemas/jbm-configuration.xsd">
+   <configuration>
+
+      <!-- Connectors -->
+
+      <connector name="netty-connector">
+         <factory-class>org.jboss.messaging.integration.transports.netty.NettyConnectorFactory</factory-class>
+         <param key="jbm.remoting.netty.port" value="5445" type="Integer"/>
+      </connector>
+
+      <!-- Acceptors -->
+
+      <acceptor name="netty-acceptor">
+         <factory-class>org.jboss.messaging.integration.transports.netty.NettyAcceptorFactory</factory-class>
+         <param key="jbm.remoting.netty.port" value="5445" type="Integer"/>
+      </acceptor>
+
+
+      <!-- Other config -->
+
+      <journal-min-files>2</journal-min-files>
+
+   </configuration>
+
+</deployment>

Added: trunk/examples/jms/queue-selector/server0/jbm-jms.xml
===================================================================
--- trunk/examples/jms/queue-selector/server0/jbm-jms.xml	                        (rev 0)
+++ trunk/examples/jms/queue-selector/server0/jbm-jms.xml	2009-04-08 15:55:54 UTC (rev 6370)
@@ -0,0 +1,18 @@
+<deployment xmlns="urn:jboss:messaging"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="urn:jboss:messaging ../schemas/jbm-jms.xsd ">
+   <!--the connection factory used by the example-->
+   <connection-factory name="ConnectionFactory">
+      <connector-ref connector-name="netty-connector"/>
+      <entry name="ConnectionFactory"/>
+      <entry name="XAConnectionFactory"/>
+      <entry name="java:/ConnectionFactory"/>
+      <entry name="java:/XAConnectionFactory"/>
+   </connection-factory>
+
+   <!--the queue used by the example-->
+   <queue name="exampleQueue">
+      <entry name="/queue/exampleQueue"/>
+   </queue>
+
+</deployment>
\ No newline at end of file

Added: trunk/examples/jms/queue-selector/server0/jbm-queues.xml
===================================================================
--- trunk/examples/jms/queue-selector/server0/jbm-queues.xml	                        (rev 0)
+++ trunk/examples/jms/queue-selector/server0/jbm-queues.xml	2009-04-08 15:55:54 UTC (rev 6370)
@@ -0,0 +1,15 @@
+<settings xmlns="urn:jboss:messaging"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="urn:jboss:messaging ../schemas/jbm-queues.xsd ">
+
+   <!--security for example queue-->
+   <security match="jms.queue.exampleQueue">
+      <permission type="createDurableQueue" roles="guest"/>
+      <permission type="deleteDurableQueue" roles="guest"/>
+      <permission type="createTempQueue" roles="guest"/>
+      <permission type="deleteTempQueue" roles="guest"/>
+      <permission type="consume" roles="guest"/>
+      <permission type="send" roles="guest"/>
+   </security>
+
+</settings>

Added: trunk/examples/jms/queue-selector/server0/jbm-security.xml
===================================================================
--- trunk/examples/jms/queue-selector/server0/jbm-security.xml	                        (rev 0)
+++ trunk/examples/jms/queue-selector/server0/jbm-security.xml	2009-04-08 15:55:54 UTC (rev 6370)
@@ -0,0 +1,7 @@
+<deployment xmlns="urn:jboss:messaging" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="urn:jboss:messaging ../schemas/jbm-security.xsd ">
+   <!-- the default user.  this is used where username is null-->
+   <defaultuser name="guest" password="guest">
+      <role name="guest"/>
+   </defaultuser>
+</deployment>
\ No newline at end of file

Added: trunk/examples/jms/queue-selector/server0/jbm-standalone-beans.xml
===================================================================
--- trunk/examples/jms/queue-selector/server0/jbm-standalone-beans.xml	                        (rev 0)
+++ trunk/examples/jms/queue-selector/server0/jbm-standalone-beans.xml	2009-04-08 15:55:54 UTC (rev 6370)
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+   <bean name="Naming" class="org.jnp.server.NamingBeanImpl"/>
+
+   <!-- JNDI server. Disable this if you don't want JNDI -->
+   <bean name="JNDIServer" class="org.jnp.server.Main">
+      <property name="namingInfo">
+         <inject bean="Naming"/>
+      </property>
+      <property name="port">1099</property>
+      <property name="bindAddress">localhost</property>
+      <property name="rmiPort">1098</property>
+      <property name="rmiBindAddress">localhost</property>
+   </bean>
+
+   <bean name="DeploymentManager" class="org.jboss.messaging.core.deployers.impl.FileDeploymentManager">
+      <constructor>
+         <!-- The scan time in milliseconds -->
+         <parameter>5000</parameter>
+      </constructor>
+   </bean>
+   
+   <bean name="Configuration" class="org.jboss.messaging.core.config.impl.FileConfiguration"/>
+
+   <!--<bean name="JBMSecurityManager" class="org.jboss.messaging.core.security.impl.JBossASSecurityManager"/>-->
+
+   <bean name="JBMSecurityManager" class="org.jboss.messaging.core.security.impl.JBMSecurityManagerImpl">
+   </bean>
+
+   <bean name="BasicSecurityDeployer" class="org.jboss.messaging.core.deployers.impl.BasicSecurityDeployer">
+      <constructor>
+         <parameter>
+            <inject bean="DeploymentManager"/>
+         </parameter>
+      </constructor>
+      <property name="jbmSecurityManager">
+         <inject bean="JBMSecurityManager"/>
+      </property>
+   </bean>
+
+   <bean name="MessagingServer" class="org.jboss.messaging.core.server.impl.MessagingServerImpl">
+      <depends>AddressSettingsDeployer</depends>
+      <depends>QueueDeployer</depends>
+      
+      <property name="storageManager">
+         <inject bean="StorageManager"/>
+      </property>
+      <property name="remotingService">
+         <inject bean="RemotingService"/>
+      </property>
+      <property name="configuration">
+         <inject bean="Configuration"/>
+      </property>
+      <property name="securityManager">
+         <inject bean="JBMSecurityManager"/>
+      </property>
+      <property name="managementService">
+         <inject bean="ManagementService"/>
+      </property>      
+   </bean>
+
+   <bean name="StorageManager" class="org.jboss.messaging.core.persistence.impl.journal.JournalStorageManager">
+      <constructor>
+         <parameter>
+            <inject bean="Configuration"/>
+         </parameter>
+      </constructor>
+   </bean>
+
+   <bean name="RemotingService" class="org.jboss.messaging.core.remoting.server.impl.RemotingServiceImpl">
+      <constructor>
+         <parameter>
+            <inject bean="Configuration"/>
+         </parameter>
+      </constructor>
+      <property name="managementService">
+         <inject bean="ManagementService"/>
+      </property>
+   </bean>
+   
+   <bean name="JMSServerManager" class="org.jboss.messaging.jms.server.impl.JMSServerManagerImpl">
+      <constructor>
+         <parameter>
+            <inject bean="MessagingServer" property="serverManagement"/>
+         </parameter>
+         <parameter>
+            <inject bean="MessagingServer" property="postOffice"/>
+         </parameter>
+         <parameter>
+            <inject bean="MessagingServer" property="storageManager"/>
+         </parameter>
+         <parameter>
+            <inject bean="MessagingServer" property="addressSettingsRepository"/>
+         </parameter>
+         <parameter>
+            <inject bean="JMSManagementService"/>
+         </parameter>
+      </constructor>
+   </bean>
+
+   <bean name="JMSServerDeployer" class="org.jboss.messaging.jms.server.impl.JMSServerDeployer">
+      <constructor>
+         <parameter>
+            <inject bean="DeploymentManager"/>
+         </parameter>
+          <parameter>
+            <inject bean="Configuration"/>
+         </parameter>
+      </constructor>
+      <property name="jmsServerManager">
+         <inject bean="JMSServerManager"/>
+      </property>
+   </bean>
+
+   <bean name="AddressSettingsDeployer" class="org.jboss.messaging.core.deployers.impl.AddressSettingsDeployer">
+      <constructor>
+         <parameter>
+            <inject bean="DeploymentManager"/>
+         </parameter>
+         <parameter>
+            <inject bean="MessagingServer" property="addressSettingsRepository" state="Configured"/>
+         </parameter>
+      </constructor>
+   </bean>
+
+   <bean name="QueueDeployer" class="org.jboss.messaging.core.deployers.impl.QueueDeployer">
+      <constructor>
+         <parameter>
+            <inject bean="DeploymentManager"/>
+         </parameter>
+         <parameter>
+            <inject bean="Configuration"/>
+         </parameter>
+      </constructor>
+   </bean>
+   
+   <bean name="SecurityDeployer" class="org.jboss.messaging.core.deployers.impl.SecurityDeployer">
+      <constructor>
+         <parameter>
+            <inject bean="DeploymentManager"/>
+         </parameter>
+         <parameter>
+            <inject bean="MessagingServer" property="securityRepository"/>
+         </parameter>
+      </constructor>
+   </bean>
+
+   <bean name="ManagementService" class="org.jboss.messaging.core.management.impl.ManagementServiceImpl">
+      <constructor>
+         <parameter>
+            <inject bean="MBeanServer"/>
+         </parameter>
+         <parameter>
+            <inject bean="Configuration" property="JMXManagementEnabled" />
+         </parameter>
+      </constructor>
+   </bean>
+   
+   <bean name="JMSManagementService" class="org.jboss.messaging.jms.server.management.impl.JMSManagementServiceImpl">
+      <constructor>
+         <parameter>
+            <inject bean="ManagementService"/>
+         </parameter>
+      </constructor>
+   </bean>
+   
+   <bean name="MBeanServer" class="javax.management.MBeanServer">
+      <constructor factoryClass="java.lang.management.ManagementFactory"
+                   factoryMethod="getPlatformMBeanServer"/>
+   </bean> 
+   
+</deployment>
\ No newline at end of file

Added: trunk/examples/jms/queue-selector/src/org/jboss/jms/example/QueueSelectorExample.java
===================================================================
--- trunk/examples/jms/queue-selector/src/org/jboss/jms/example/QueueSelectorExample.java	                        (rev 0)
+++ trunk/examples/jms/queue-selector/src/org/jboss/jms/example/QueueSelectorExample.java	2009-04-08 15:55:54 UTC (rev 6370)
@@ -0,0 +1,158 @@
+/*
+   * JBoss, Home of Professional Open Source
+   * Copyright 2005-2008, Red Hat Middleware LLC, and individual contributors
+   * by the @authors tag. See the copyright.txt in the distribution for a
+   * full listing of individual contributors.
+   *
+   * This is free software; you can redistribute it and/or modify it
+   * under the terms of the GNU Lesser General Public License as
+   * published by the Free Software Foundation; either version 2.1 of
+   * the License, or (at your option) any later version.
+   *
+   * This software is distributed in the hope that it will be useful,
+   * but WITHOUT ANY WARRANTY; without even the implied warranty of
+   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+   * Lesser General Public License for more details.
+   *
+   * You should have received a copy of the GNU Lesser General Public
+   * License along with this software; if not, write to the Free
+   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+   */
+package org.jboss.jms.example;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageListener;
+import javax.jms.MessageProducer;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.naming.InitialContext;
+
+/**
+ * A simple JMS example that uses selectors with queue consumers.
+ *
+ * @author <a href="hgao at redhat.com">Howard Gao</a>
+ */
+public class QueueSelectorExample extends JMSExample
+{
+   private volatile boolean result = true;
+
+   public static void main(String[] args)
+   {
+      new QueueSelectorExample().run(args);
+   }
+
+   public boolean runExample() throws Exception
+   {
+      Connection connection = null;
+      InitialContext initialContext = null;
+      try
+      {
+         //Step 1. Create an initial context to perform the JNDI lookup.
+         initialContext = getContext(0);
+
+         //Step 2. look-up the JMS queue object from JNDI
+         Queue queue = (Queue) initialContext.lookup("/queue/exampleQueue");
+
+         //Step 3. look-up the JMS connection factory object from JNDI
+         ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("/ConnectionFactory");
+
+         //Step 4. Create a JMS Connection
+         connection = cf.createConnection();
+         
+         //Step 5. Start the connection
+         connection.start();
+
+         //Step 5. Create a JMS Session
+         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+         //Step 6. Create a JMS Message Producer
+         MessageProducer producer = session.createProducer(queue);
+         
+         //Step 8. Prepare two selectors
+         String redSelector = "color='red'";
+         String greenSelector = "color='green'";
+
+         //Step 9. Create a JMS Message Consumer that receives 'red' messages
+         MessageConsumer redConsumer = session.createConsumer(queue, redSelector);
+         redConsumer.setMessageListener(new SimpleMessageListener("red"));
+
+         //Step 10. Create a second JMS message consumer that receives 'green' messages
+         MessageConsumer greenConsumer = session.createConsumer(queue, greenSelector);
+         greenConsumer.setMessageListener(new SimpleMessageListener("green"));
+         
+         //Step 11. Create another JMS message consumer that receives any messages.
+         MessageConsumer anyConsumer = session.createConsumer(queue);
+         anyConsumer.setMessageListener(new SimpleMessageListener("any"));
+         
+         //Step 12. Create three messages, each has a color property
+         TextMessage redMessage = session.createTextMessage("Red");
+         redMessage.setStringProperty("color", "red");
+         TextMessage greenMessage = session.createTextMessage("Green");
+         greenMessage.setStringProperty("color", "green");
+         TextMessage blueMessage = session.createTextMessage("Blue");
+         blueMessage.setStringProperty("color", "blue");
+
+         //Step 13. Send the Messages
+         producer.send(redMessage);
+         System.out.println("Message sent: " + redMessage.getText());
+         producer.send(greenMessage);
+         System.out.println("Message sent: " + greenMessage.getText());
+         producer.send(blueMessage);
+         System.out.println("Message sent: " + blueMessage.getText());
+         
+         Thread.sleep(5000);
+         
+         return result;
+      }
+      finally
+      {
+         //Step 12. Be sure to close our JMS resources!
+         if (initialContext != null)
+         {
+            initialContext.close();
+         }
+         if(connection != null)
+         {
+            connection.close();
+         }
+      }
+   }
+   
+   public class SimpleMessageListener implements MessageListener
+   {
+
+      private String name;
+      
+      public SimpleMessageListener(String listener)
+      {
+         name = listener;
+      }
+
+      public void onMessage(Message msg)
+      {
+         TextMessage textMessage = (TextMessage)msg;
+         try
+         {
+            String colorProp = msg.getStringProperty("color");
+            System.out.println("Receiver " + name + " receives message [" + textMessage.getText() + "] with color property: " + colorProp);
+            if ((!colorProp.equals(name)) && (!name.equals("any")))
+            {
+               result = false;
+            }
+         }
+         catch (JMSException e)
+         {
+            e.printStackTrace();
+            result = false;
+         }
+      }
+      
+   }
+
+}

Modified: trunk/examples/jms/topic-selector-example2/readme.html
===================================================================
--- trunk/examples/jms/topic-selector-example2/readme.html	2009-04-08 15:40:39 UTC (rev 6369)
+++ trunk/examples/jms/topic-selector-example2/readme.html	2009-04-08 15:55:54 UTC (rev 6370)
@@ -4,9 +4,9 @@
     <link rel="stylesheet" type="text/css" href="../common/common.css">
   </head>
   <body>
-     <h1>JMS Selector Example 2</h1>
+     <h1>JMS Topic Selector Example 2</h1>
      <br>
-     <p>This example shows you how to selectively consume messages using message selectors.</p>
+     <p>This example shows you how to selectively consume messages using message selectors with topic consumers.</p>
      
      <p>Message selectors are strings with special syntax that can be used in creating consumers. Message consumers
      that are thus created only receive messages that match its selector. On message delivering, the JBoss Message




More information about the jboss-cvs-commits mailing list