[jboss-svn-commits] JBL Code SVN: r22477 - in labs/jbossesb/workspace/skeagh/commons/src: test/java/org/jboss/esb/jms and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Sep 7 05:35:49 EDT 2008
Author: tfennelly
Date: 2008-09-07 05:35:45 -0400 (Sun, 07 Sep 2008)
New Revision: 22477
Added:
labs/jbossesb/workspace/skeagh/commons/src/test/java/org/jboss/esb/jms/JMSTestRunner.java
labs/jbossesb/workspace/skeagh/commons/src/test/java/org/jboss/esb/jms/MockMessageListener.java
Modified:
labs/jbossesb/workspace/skeagh/commons/src/main/java/org/jboss/esb/jms/AbstractMessageListener.java
labs/jbossesb/workspace/skeagh/commons/src/test/java/org/jboss/esb/jms/MessageSendAndListenTest.java
Log:
More JMS Tests.
Added the JMSTestRunner.
Modified: labs/jbossesb/workspace/skeagh/commons/src/main/java/org/jboss/esb/jms/AbstractMessageListener.java
===================================================================
--- labs/jbossesb/workspace/skeagh/commons/src/main/java/org/jboss/esb/jms/AbstractMessageListener.java 2008-09-07 08:51:41 UTC (rev 22476)
+++ labs/jbossesb/workspace/skeagh/commons/src/main/java/org/jboss/esb/jms/AbstractMessageListener.java 2008-09-07 09:35:45 UTC (rev 22477)
@@ -28,12 +28,26 @@
* Abstract JMS Listener.
* <p/>
* Manages destination connection, close and cleanup.
+ * <p/>
+ * A message selector can be set on the listener by simply specifying a "{@link #MESSAGE_SELECTOR messageSelector}"
+ * property in the supplied properties set. For Topic subscribers, the "{@link #NO_LOCAL noLocal}" parameter can be
+ * set in the same way, by specifying a "{@link #NO_LOCAL noLocal}" property in the properties set ("true"/"false" - default "true"). See
+ * <a href="http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/jms/TopicSession.html#createSubscriber(javax.jms.Topic,%20java.lang.String,%20boolean)">TopicSession.html.createSubscriber Javadocs.</a>
*
* @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
*/
public abstract class AbstractMessageListener extends AbstractMessageHandler implements MessageListener
{
/**
+ * Message selector property key.
+ */
+ public static final String MESSAGE_SELECTOR = "messageSelector";
+ /**
+ * "noLocal" selector property key (Topics only).
+ */
+ public static final String NO_LOCAL = "noLocal";
+
+ /**
* Logger.
*/
private Logger logger;
@@ -41,6 +55,10 @@
* JMS Listener.
*/
private MessageConsumer messageConsumer;
+ /**
+ * JNDI properties.
+ */
+ private Properties properties;
/**
* Public constructor.
@@ -54,6 +72,7 @@
{
super(destinationName, jndiProperties);
logger = Logger.getLogger(getClass());
+ this.properties = jndiProperties;
}
/**
@@ -65,16 +84,31 @@
{
try
{
+ String messageSelector = properties.getProperty(MESSAGE_SELECTOR);
+
logger.debug("Attempting to connect listener '" + getClass().getName() + "' to JMS Destination '" + getDestinationName() + "'.");
// Bind "this" listener to the destination...
if (getDestination() instanceof Topic)
{
- messageConsumer = ((TopicSession) getSession()).createSubscriber((Topic) getDestination());
+ if (messageSelector == null)
+ {
+ messageConsumer = ((TopicSession) getSession()).createSubscriber((Topic) getDestination());
+ } else
+ {
+ boolean noLocal = !properties.getProperty(NO_LOCAL, "true").equals("false");
+ messageConsumer = ((TopicSession) getSession()).createSubscriber((Topic) getDestination(), messageSelector, noLocal);
+ }
messageConsumer.setMessageListener(this);
} else
{
- messageConsumer = ((QueueSession) getSession()).createReceiver((Queue) getDestination());
+ if (messageSelector == null)
+ {
+ messageConsumer = ((QueueSession) getSession()).createReceiver((Queue) getDestination());
+ } else
+ {
+ messageConsumer = ((QueueSession) getSession()).createReceiver((Queue) getDestination(), messageSelector);
+ }
messageConsumer.setMessageListener(this);
}
@@ -112,6 +146,7 @@
/**
* Is the handler connected.
+ *
* @return True if the connector is connected, otherwise false.
*/
public final boolean isConnected()
Added: labs/jbossesb/workspace/skeagh/commons/src/test/java/org/jboss/esb/jms/JMSTestRunner.java
===================================================================
--- labs/jbossesb/workspace/skeagh/commons/src/test/java/org/jboss/esb/jms/JMSTestRunner.java (rev 0)
+++ labs/jbossesb/workspace/skeagh/commons/src/test/java/org/jboss/esb/jms/JMSTestRunner.java 2008-09-07 09:35:45 UTC (rev 22477)
@@ -0,0 +1,72 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright XXXX, Red Hat Middleware LLC, and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * 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,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2008, JBoss Inc.
+ */
+package org.jboss.esb.jms;
+
+import org.apache.activemq.broker.BrokerService;
+import org.apache.activemq.jndi.ActiveMQInitialContextFactory;
+
+import javax.naming.Context;
+import java.io.File;
+import java.util.Properties;
+
+/**
+ * Starts a JMS broker and makes sure it gets shutdown.
+ * <p/>
+ * Search for usages.
+ *
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+public abstract class JMSTestRunner
+{
+ private Properties jndiProperties;
+ private String providerUrl;
+
+ public JMSTestRunner(String providerUrl)
+ {
+ jndiProperties = new Properties();
+ jndiProperties.setProperty(Context.INITIAL_CONTEXT_FACTORY, ActiveMQInitialContextFactory.class.getName());
+ jndiProperties.setProperty(Context.PROVIDER_URL, providerUrl);
+ this.providerUrl = providerUrl;
+ }
+
+ public Properties getJndiProperties()
+ {
+ return (Properties) jndiProperties.clone();
+ }
+
+ public void run() throws Exception
+ {
+ BrokerService broker = new BrokerService();
+
+ // configure the broker
+ broker.setDataDirectory(new File("./target/activeMQData"));
+ broker.addConnector(providerUrl);
+
+ broker.start();
+
+ try {
+ test();
+ } finally {
+ broker.stop();
+ }
+ }
+
+ public abstract void test() throws Exception;
+}
Property changes on: labs/jbossesb/workspace/skeagh/commons/src/test/java/org/jboss/esb/jms/JMSTestRunner.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossesb/workspace/skeagh/commons/src/test/java/org/jboss/esb/jms/MessageSendAndListenTest.java
===================================================================
--- labs/jbossesb/workspace/skeagh/commons/src/test/java/org/jboss/esb/jms/MessageSendAndListenTest.java 2008-09-07 08:51:41 UTC (rev 22476)
+++ labs/jbossesb/workspace/skeagh/commons/src/test/java/org/jboss/esb/jms/MessageSendAndListenTest.java 2008-09-07 09:35:45 UTC (rev 22477)
@@ -20,16 +20,11 @@
package org.jboss.esb.jms;
import junit.framework.TestCase;
-import org.apache.activemq.broker.BrokerService;
-import org.apache.activemq.jndi.ActiveMQInitialContextFactory;
-import javax.naming.Context;
import javax.jms.*;
import java.util.Properties;
import java.util.List;
-import java.util.ArrayList;
import java.util.Arrays;
-import java.io.File;
/**
* JMS Send and listen tests.
@@ -38,80 +33,136 @@
*/
public class MessageSendAndListenTest extends TestCase
{
-
private static final String TEST_PROVIDER_URL = "tcp://localhost:61717";
- private Properties jndiProperties;
- protected void setUp() throws Exception
+ public void test_Topic_noselector() throws Exception
{
- jndiProperties = new Properties();
- jndiProperties.setProperty(Context.INITIAL_CONTEXT_FACTORY, ActiveMQInitialContextFactory.class.getName());
- jndiProperties.setProperty(Context.PROVIDER_URL, TEST_PROVIDER_URL);
+ test_Destination_noselector(Topic.class, "jbossesb.testTopic");
}
- public void test_Topic() throws Exception
+ public void test_Queue_noselector() throws Exception
{
- test_Destination(Topic.class, "jbossesb.testTopic");
+ test_Destination_noselector(Queue.class, "jbossesb.testQueue");
}
- public void test_Queue() throws Exception
+ public void test_Topic_withselector() throws Exception
{
- test_Destination(Queue.class, "jbossesb.testQueue");
+ test_Destination_withselector(Topic.class, "jbossesb.testTopic");
}
- public void test_Destination(Class<? extends Destination> destType, String destName) throws Exception
+ public void test_Queue_withselector() throws Exception
{
- BrokerService broker = new BrokerService();
+ test_Destination_withselector(Queue.class, "jbossesb.testQueue");
+ }
- // configure the broker
- broker.setDataDirectory(new File("./target/activeMQData"));
- broker.addConnector(TEST_PROVIDER_URL);
+ private void test_Destination_noselector(final Class<? extends Destination> destType, final String destName) throws Exception
+ {
+ new JMSTestRunner(TEST_PROVIDER_URL) {
+ public void test() throws Exception
+ {
+ Properties jndiProperties = getJndiProperties();
- broker.start();
+ if(destType == Topic.class) {
+ jndiProperties.setProperty("topic." + destName, destName);
+ } else {
+ jndiProperties.setProperty("queue." + destName, destName);
+ }
- try{
- final List<TextMessage> messagesReceived = new ArrayList<TextMessage>();
+ MockMessageListener listener = new MockMessageListener(destName, jndiProperties, null);
- if(destType == Topic.class) {
- jndiProperties.setProperty("topic." + destName, destName);
- } else {
- jndiProperties.setProperty("queue." + destName, destName);
+ listener.connect();
+ assertTrue(destType.isAssignableFrom(listener.getDestination().getClass()));
+ try {
+ MessageSender sender = new MessageSender(destName, jndiProperties);
+ List<String> messagesSent = Arrays.asList(new String[] {"message 1", "message 2", "message 3"});
+
+ sender.connect();
+ assertTrue(destType.isAssignableFrom(sender.getDestination().getClass()));
+ try {
+ for (String message : messagesSent)
+ {
+ sender.send(sender.getSession().createTextMessage(message));
+ }
+ } finally {
+ sender.close();
+ }
+
+ Thread.sleep(1000);
+ assertEquals(3, listener.messagesReceived.size());
+ assertTrue(messagesSent.contains(listener.messagesReceived.get(0).getText()));
+ assertTrue(messagesSent.contains(listener.messagesReceived.get(1).getText()));
+ assertTrue(messagesSent.contains(listener.messagesReceived.get(2).getText()));
+ } finally {
+ listener.close();
+ }
}
+ }.run();
+ }
- AbstractMessageListener listener = new AbstractMessageListener(destName, jndiProperties) {
- public void onMessage(Message message)
- {
- messagesReceived.add((TextMessage) message);
+ private void test_Destination_withselector(final Class<? extends Destination> destType, final String destName) throws Exception
+ {
+ new JMSTestRunner(TEST_PROVIDER_URL) {
+ public void test() throws Exception
+ {
+ Properties jndiProperties = getJndiProperties();
+
+ if(destType == Topic.class) {
+ jndiProperties.setProperty("topic." + destName, destName);
+ } else {
+ jndiProperties.setProperty("queue." + destName, destName);
}
- };
- listener.connect();
- assertTrue(destType.isAssignableFrom(listener.getDestination().getClass()));
- try {
- MessageSender sender = new MessageSender(destName, jndiProperties);
- List<String> messagesSent = Arrays.asList(new String[] {"message 1", "message 2", "message 2"});
+ MockMessageListener service1 = new MockMessageListener(destName, jndiProperties, "serviceId='service1'");
+ MockMessageListener service2 = new MockMessageListener(destName, jndiProperties, "serviceId='service2'");
+ List<String> service1Messages = Arrays.asList(new String[] {"message 1", "message 2", "message 3"});
+ List<String> service2Messages = Arrays.asList(new String[] {"message 4", "message 5", "message 6"});
- sender.connect();
- assertTrue(destType.isAssignableFrom(sender.getDestination().getClass()));
+ service1.connect();
try {
- for (String message : messagesSent)
- {
- sender.send(sender.getSession().createTextMessage(message));
+ service2.connect();
+ try {
+ MessageSender sender = new MessageSender(destName, jndiProperties);
+
+ sender.connect();
+ try {
+ for (String message : service1Messages)
+ {
+ send(sender, message, "service1");
+ }
+ for (String message : service2Messages)
+ {
+ send(sender, message, "service2");
+ }
+ } finally {
+ sender.close();
+ }
+
+ Thread.sleep(1000);
+
+ assertEquals(3, service1.messagesReceived.size());
+ assertTrue(service1Messages.contains(service1.messagesReceived.get(0).getText()));
+ assertTrue(service1Messages.contains(service1.messagesReceived.get(1).getText()));
+ assertTrue(service1Messages.contains(service1.messagesReceived.get(2).getText()));
+
+ assertEquals(3, service2.messagesReceived.size());
+ assertTrue(service2Messages.contains(service2.messagesReceived.get(0).getText()));
+ assertTrue(service2Messages.contains(service2.messagesReceived.get(1).getText()));
+ assertTrue(service2Messages.contains(service2.messagesReceived.get(2).getText()));
+ } finally {
+ service2.close();
}
} finally {
- sender.close();
+ service1.close();
}
-
- Thread.sleep(1000);
- assertEquals(3, messagesReceived.size());
- assertTrue(messagesSent.contains(messagesReceived.get(0).getText()));
- assertTrue(messagesSent.contains(messagesReceived.get(1).getText()));
- assertTrue(messagesSent.contains(messagesReceived.get(2).getText()));
- } finally {
- listener.close();
}
- } finally {
- broker.stop();
- }
+ }.run();
}
+
+ private void send(MessageSender sender, String message, String service)
+ throws JMSException
+ {
+ TextMessage jmsMessage = sender.getSession().createTextMessage(message);
+ jmsMessage.setStringProperty("serviceId", service);
+ sender.send(jmsMessage);
+ }
}
Added: labs/jbossesb/workspace/skeagh/commons/src/test/java/org/jboss/esb/jms/MockMessageListener.java
===================================================================
--- labs/jbossesb/workspace/skeagh/commons/src/test/java/org/jboss/esb/jms/MockMessageListener.java (rev 0)
+++ labs/jbossesb/workspace/skeagh/commons/src/test/java/org/jboss/esb/jms/MockMessageListener.java 2008-09-07 09:35:45 UTC (rev 22477)
@@ -0,0 +1,54 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright XXXX, Red Hat Middleware LLC, and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * 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,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2008, JBoss Inc.
+ */
+package org.jboss.esb.jms;
+
+import javax.jms.TextMessage;
+import javax.jms.Message;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Properties;
+
+/**
+ * Mock MessageListener implementation.
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+*/
+class MockMessageListener extends AbstractMessageListener {
+
+ public final List<TextMessage> messagesReceived = new ArrayList<TextMessage>();
+
+ protected MockMessageListener(final String destinationName, final Properties jndiProperties, final String selector)
+ {
+ super(destinationName, addSelector(jndiProperties, selector));
+ }
+
+ public void onMessage(Message message)
+ {
+ messagesReceived.add((TextMessage) message);
+ }
+
+ private static Properties addSelector(Properties jndiProperties, String selector)
+ {
+ if(selector != null) {
+ jndiProperties = (Properties) jndiProperties.clone();
+ jndiProperties.setProperty(AbstractMessageListener.MESSAGE_SELECTOR, selector);
+ }
+ return jndiProperties;
+ }
+}
Property changes on: labs/jbossesb/workspace/skeagh/commons/src/test/java/org/jboss/esb/jms/MockMessageListener.java
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the jboss-svn-commits
mailing list