[jboss-cvs] JBoss Messaging SVN: r2639 - trunk/tests/src/org/jboss/test/messaging/jms.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri May 4 05:36:08 EDT 2007
Author: timfox
Date: 2007-05-04 05:36:07 -0400 (Fri, 04 May 2007)
New Revision: 2639
Added:
trunk/tests/src/org/jboss/test/messaging/jms/DurableSubscriptionTest.java
Removed:
trunk/tests/src/org/jboss/test/messaging/jms/DurableSubscriberTest.java
Log:
Renamed test
Deleted: trunk/tests/src/org/jboss/test/messaging/jms/DurableSubscriberTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/DurableSubscriberTest.java 2007-05-04 09:35:14 UTC (rev 2638)
+++ trunk/tests/src/org/jboss/test/messaging/jms/DurableSubscriberTest.java 2007-05-04 09:36:07 UTC (rev 2639)
@@ -1,563 +0,0 @@
-/*
- * 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.
- */
-package org.jboss.test.messaging.jms;
-
-import java.util.List;
-
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.DeliveryMode;
-import javax.jms.IllegalStateException;
-import javax.jms.InvalidDestinationException;
-import javax.jms.InvalidSelectorException;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageProducer;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-import javax.jms.Topic;
-import javax.jms.TopicSubscriber;
-import javax.management.ObjectName;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-
-import org.jboss.jms.server.destination.SubscriptionInfo;
-import org.jboss.test.messaging.MessagingTestCase;
-import org.jboss.test.messaging.tools.ServerManagement;
-
-
-/**
- * Tests focused on durable subscription behavior. More durable subscription tests can be found in
- * MessageConsumerTest.
- *
- * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
- * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
- *
- * $Id: DurableSubscriberTest.java 1319 2006-09-19 17:17:53Z ovidiu.feodorov at jboss.com $
- */
-public class DurableSubscriberTest extends MessagingTestCase
-{
- // Constants -----------------------------------------------------
-
- // Static --------------------------------------------------------
-
- // Attributes ----------------------------------------------------
-
- protected InitialContext ic;
-
- // Constructors --------------------------------------------------
-
- public DurableSubscriberTest(String name)
- {
- super(name);
- }
-
- // Public --------------------------------------------------------
-
- public void setUp() throws Exception
- {
- super.setUp();
-
- ServerManagement.start("all");
-
- ServerManagement.undeployTopic("Topic");
- ServerManagement.deployTopic("Topic");
-
- ic = new InitialContext(ServerManagement.getJNDIEnvironment());
-
- log.debug("setup done");
- }
-
- public void tearDown() throws Exception
- {
- log.debug("starting tear down");
-
- ic.close();
-
- ServerManagement.undeployTopic("Topic");
-
- super.tearDown();
- }
-
- public void testSimplestDurableSubscription() throws Exception
- {
- ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
- Topic topic = (Topic)ic.lookup("/topic/Topic");
- Connection conn = cf.createConnection();
-
- conn.setClientID("brookeburke");
-
- Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
- MessageProducer prod = s.createProducer(topic);
- prod.setDeliveryMode(DeliveryMode.PERSISTENT);
-
- s.createDurableSubscriber(topic, "monicabelucci");
-
- ObjectName destObjectName =
- new ObjectName("jboss.messaging.destination:service=Topic,name=Topic");
- List subs = (List)ServerManagement.invoke(destObjectName, "listAllSubscriptions", null, null);
-
- assertNotNull(subs);
-
- assertEquals(1, subs.size());
-
- SubscriptionInfo info = (SubscriptionInfo)subs.get(0);
-
- assertEquals("monicabelucci", info.getName());
-
- prod.send(s.createTextMessage("k"));
-
- conn.close();
-
- subs = (List)ServerManagement.invoke(destObjectName, "listAllSubscriptions", null, null);
-
- assertEquals(1, subs.size());
-
- info = (SubscriptionInfo)subs.get(0);
-
- assertEquals("monicabelucci", info.getName());
-
- conn = cf.createConnection();
- conn.setClientID("brookeburke");
-
- s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- MessageConsumer durable = s.createDurableSubscriber(topic, "monicabelucci");
-
- conn.start();
-
- TextMessage tm = (TextMessage)durable.receive(1000);
- assertEquals("k", tm.getText());
-
- Message m = durable.receive(1000);
- assertNull(m);
-
- conn.close();
- }
-
-
- /**
- * JMS 1.1 6.11.1: A client can change an existing durable subscription by creating a durable
- * TopicSubscriber with the same name and a new topic and/or message selector, or NoLocal
- * attribute. Changing a durable subscription is equivalent to deleting and recreating it.
- *
- * Test with a different topic (a redeployed topic is a different topic).
- */
- public void testDurableSubscriptionOnNewTopic() throws Exception
- {
- ServerManagement.deployTopic("CompletelyNewTopic");
-
- ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
- Topic topic = (Topic)ic.lookup("/topic/CompletelyNewTopic");
- Connection conn = cf.createConnection();
-
- conn.setClientID("brookeburke");
-
- Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
- MessageProducer prod = s.createProducer(topic);
- prod.setDeliveryMode(DeliveryMode.PERSISTENT);
-
- s.createDurableSubscriber(topic, "monicabelucci");
-
- prod.send(s.createTextMessage("one"));
-
- conn.close();
-
- ServerManagement.deployTopic("CompletelyNewTopic2");
-
- Topic topic2 = (Topic)ic.lookup("/topic/CompletelyNewTopic2");
- conn = cf.createConnection();
-
- conn.setClientID("brookeburke");
-
- s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
- MessageConsumer durable = s.createDurableSubscriber(topic2, "monicabelucci");
-
- conn.start();
-
- Message m = durable.receive(1000);
- assertNull(m);
-
- ServerManagement.undeployTopic("CompletelyNewTopic");
- ServerManagement.undeployTopic("CompletelyNewTopic2");
-
- conn.close();
- }
-
- /**
- * JMS 1.1 6.11.1: A client can change an existing durable subscription by creating a durable
- * TopicSubscriber with the same name and a new topic and/or message selector, or NoLocal
- * attribute. Changing a durable subscription is equivalent to deleting and recreating it.
- *
- * Test with a different selector.
- */
- public void testDurableSubscriptionDifferentSelector() throws Exception
- {
- ServerManagement.deployTopic("CompletelyNewTopic2");
-
- ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
- Topic topic = (Topic)ic.lookup("/topic/Topic");
- Connection conn = cf.createConnection();
-
- conn.setClientID("brookeburke");
-
- Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
- MessageProducer prod = s.createProducer(topic);
- prod.setDeliveryMode(DeliveryMode.PERSISTENT);
-
-
- //fails here
- MessageConsumer durable =
- s.createDurableSubscriber(topic,
- "monicabelucci",
- "color = 'red' AND shape = 'square'",
- false);
-
- TextMessage tm = s.createTextMessage("A red square message");
- tm.setStringProperty("color", "red");
- tm.setStringProperty("shape", "square");
- prod.send(tm);
-
- conn.start();
-
- TextMessage rm = (TextMessage)durable.receive(5000);
- assertEquals("A red square message", rm.getText());
-
- tm = s.createTextMessage("Another red square message");
- tm.setStringProperty("color", "red");
- tm.setStringProperty("shape", "square");
- prod.send(tm);
-
- // TODO: when subscriptions/durable subscription will be registered as MBean, use the JMX
- // interface to make sure the 'another red square message' is maintained by the
- // durable subascription
- // http://jira.jboss.org/jira/browse/JBMESSAGING-217
-
- conn.close();
-
- conn = cf.createConnection();
-
- conn.setClientID("brookeburke");
-
- s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- // modify the selector
- durable = s.createDurableSubscriber(topic,
- "monicabelucci",
- "color = 'red'",
- false);
-
- conn.start();
-
- Message m = durable.receive(1000);
-
- // the durable subscription is destroyed and re-created. The red square message stored by
- // the previous durable subscription is lost and (hopefully) garbage collected.
- assertNull(m);
-
- ServerManagement.undeployTopic("CompletelyNewTopic2");
-
- conn.close();
- }
-
- /**
- * JMS 1.1 6.11.1: A client can change an existing durable subscription by creating a durable
- * TopicSubscriber with the same name and a new topic and/or message selector, or NoLocal
- * attribute. Changing a durable subscription is equivalent to deleting and recreating it.
- *
- * Test with a different noLocal flag.
- */
- // Disabled until the validity of the test is established:
- // http://jira.jboss.org/jira/browse/JBMESSAGING-566
-// public void testDurableSubscriptionDifferentNoLocal() throws Exception
-// {
-// ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
-// Topic topic = (Topic)ic.lookup("/topic/Topic");
-//
-// Connection conn = cf.createConnection();
-// conn.setClientID("ID0");
-//
-// Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
-// MessageProducer prod = s.createProducer(topic);
-// prod.setDeliveryMode(DeliveryMode.PERSISTENT);
-//
-// MessageConsumer durable = s.createDurableSubscriber(topic, "mySubscription", null, false);
-//
-// TextMessage tm = null;
-// tm = s.createTextMessage("Message One");
-// prod.send(tm);
-// tm = s.createTextMessage("Message Two");
-// prod.send(tm);
-//
-//
-// conn.start();
-//
-// TextMessage rm = (TextMessage)durable.receive(5000);
-// assertEquals("Message One", rm.getText());
-//
-// conn.close();
-//
-// conn = cf.createConnection();
-// conn.setClientID("ID0");
-// s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
-//
-// // modify the nolocal flag
-// durable = s.createDurableSubscriber(topic, "mySubscription", null, true);
-//
-// conn.start();
-//
-// Message m = durable.receive(1000);
-//
-// // the durable subscription is destroyed and re-created. "Message Two" stored by the previous
-// // durable subscription is lost and (hopefully) garbage collected.
-// assertNull(m);
-// }
-
- public void testDurableSubscriptionOnTemporaryTopic() throws Exception
- {
- ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
- Connection conn = cf.createConnection();
- conn.setClientID("doesn't actually matter");
- Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
- Topic temporaryTopic = s.createTemporaryTopic();
-
- try
- {
- s.createDurableSubscriber(temporaryTopic, "mySubscription");
- fail("this should throw exception");
- }
- catch(InvalidDestinationException e)
- {
- // OK
- }
-
- conn.close();
- }
-
- /**
- * Topic undeployment/redeployment has an activation/deactivation semantic, so undeploying a
- * topic for which there are durable subscriptions preserves the content of those durable
- * subscriptions, which can be then access upon topic redeployment.
- * @throws Exception
- */
- public void testDurableSubscriptionOnTopicRedeployment() throws Exception
- {
- try
- {
- ic.lookup("/topic/TopicToBeRedeployed");
- fail("should throw exception, topic shouldn't be deployed on the server");
- }
- catch(NamingException e)
- {
- // OK
- }
-
- ServerManagement.deployTopic("TopicToBeRedeployed");
-
- ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
- Topic topic = (Topic)ic.lookup("/topic/TopicToBeRedeployed");
-
- Connection conn = cf.createConnection();
- conn.setClientID("brookeburke");
-
- Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
- MessageProducer prod = s.createProducer(topic);
- prod.setDeliveryMode(DeliveryMode.PERSISTENT);
- MessageConsumer ds = s.createDurableSubscriber(topic, "monicabelucci");
- conn.start();
-
- prod.send(s.createTextMessage("one"));
- prod.send(s.createTextMessage("two"));
-
- TextMessage tm = (TextMessage)ds.receive();
- assertEquals("one", tm.getText());
- conn.close();
-
- ServerManagement.undeployTopic("TopicToBeRedeployed");
- log.debug("topic undeployed");
-
- try
- {
- topic = (Topic)ic.lookup("/topic/TopicToBeRedeployed");
- fail("should throw exception");
- }
- catch(NamingException e)
- {
- // OK
- }
-
- conn = cf.createConnection();
- conn.setClientID("brookeburke");
-
- s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- try
- {
- s.createDurableSubscriber(topic, "monicabelucci");
- fail("should throw exception");
- }
- catch(JMSException e)
- {
- // OK
- }
-
- ServerManagement.deployTopic("TopicToBeRedeployed");
- log.debug("topic redeployed");
-
- // since redeployment has an activation semantic, I expect to find the messages there
-
- topic = (Topic)ic.lookup("/topic/TopicToBeRedeployed");
- ds = s.createDurableSubscriber(topic, "monicabelucci");
- conn.start();
-
- tm = (TextMessage)ds.receive(1000);
- assertEquals("two", tm.getText());
-
- conn.close();
- ServerManagement.undeployTopic("TopicToBeRedeployed");
- }
-
- public void testUnsubscribeDurableSubscription() throws Exception
- {
- ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
- Topic topic = (Topic)ic.lookup("/topic/Topic");
-
- Connection conn = cf.createConnection();
- conn.setClientID("ak47");
-
- Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
- MessageConsumer cons = s.createDurableSubscriber(topic, "uzzi");
- MessageProducer prod = s.createProducer(topic);
- prod.setDeliveryMode(DeliveryMode.PERSISTENT);
-
- prod.send(s.createTextMessage("one"));
-
- log.debug("unsubscribing ...");
-
- cons.close();
- s.unsubscribe("uzzi");
-
- log.debug("resubscribing ...");
-
- MessageConsumer ds = s.createDurableSubscriber(topic, "uzzi");
- conn.start();
-
- assertNull(ds.receive(1000));
-
- ds.close();
-
- s.unsubscribe("uzzi");
-
- conn.close();
- }
-
- public void testInvalidSelectorException() throws Exception
- {
- ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
- Topic topic = (Topic)ic.lookup("/topic/Topic");
- Connection c = cf.createConnection();
- c.setClientID("sofiavergara");
- Session s = c.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- try
- {
- s.createDurableSubscriber(topic, "mysubscribption", "=TEST 'test'", true);
- fail("this should fail");
- }
- catch(InvalidSelectorException e)
- {
- // OK
- }
-
- c.close();
- }
-
-
- //See JMS 1.1. spec sec 6.11
- public void testUnsubscribeWithActiveConsumer() throws Exception
- {
- ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
- Topic topic = (Topic)ic.lookup("/topic/Topic");
-
- Connection conn = cf.createConnection();
- conn.setClientID("zeke");
-
- Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- TopicSubscriber dursub = s.createDurableSubscriber(topic, "dursub0");
-
- try
- {
- s.unsubscribe("dursub0");
- fail();
- }
- catch (IllegalStateException e)
- {
- //Ok - it is illegal to ubscribe a subscription if it has active consumers
- }
-
- dursub.close();
-
- s.unsubscribe("dursub0");
-
- conn.close();
- }
-
- public void testSubscribeWithActiveSubscription() throws Exception
- {
- ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
- Topic topic = (Topic)ic.lookup("/topic/Topic");
-
- Connection conn = cf.createConnection();
- conn.setClientID("zeke");
-
- Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- TopicSubscriber dursub1 = s.createDurableSubscriber(topic, "dursub1");
-
- try
- {
- s.createDurableSubscriber(topic, "dursub1");
- fail();
- }
- catch (IllegalStateException e)
- {
- //Ok - it is illegal to have more than one active subscriber on a subscrtiption at any one time
- }
-
- dursub1.close();
-
- s.unsubscribe("dursub1");
-
- conn.close();
- }
-
- // Package protected ---------------------------------------------
-
- // Protected -----------------------------------------------------
-
- // Private -------------------------------------------------------
-
- // Inner classes -------------------------------------------------
-
-}
Copied: trunk/tests/src/org/jboss/test/messaging/jms/DurableSubscriptionTest.java (from rev 2638, trunk/tests/src/org/jboss/test/messaging/jms/DurableSubscriberTest.java)
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/DurableSubscriptionTest.java (rev 0)
+++ trunk/tests/src/org/jboss/test/messaging/jms/DurableSubscriptionTest.java 2007-05-04 09:36:07 UTC (rev 2639)
@@ -0,0 +1,563 @@
+/*
+ * 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.
+ */
+package org.jboss.test.messaging.jms;
+
+import java.util.List;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.DeliveryMode;
+import javax.jms.IllegalStateException;
+import javax.jms.InvalidDestinationException;
+import javax.jms.InvalidSelectorException;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.jms.Topic;
+import javax.jms.TopicSubscriber;
+import javax.management.ObjectName;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.jboss.jms.server.destination.SubscriptionInfo;
+import org.jboss.test.messaging.MessagingTestCase;
+import org.jboss.test.messaging.tools.ServerManagement;
+
+
+/**
+ * Tests focused on durable subscription behavior. More durable subscription tests can be found in
+ * MessageConsumerTest.
+ *
+ * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ *
+ * $Id: DurableSubscriberTest.java 1319 2006-09-19 17:17:53Z ovidiu.feodorov at jboss.com $
+ */
+public class DurableSubscriberTest extends MessagingTestCase
+{
+ // Constants -----------------------------------------------------
+
+ // Static --------------------------------------------------------
+
+ // Attributes ----------------------------------------------------
+
+ protected InitialContext ic;
+
+ // Constructors --------------------------------------------------
+
+ public DurableSubscriberTest(String name)
+ {
+ super(name);
+ }
+
+ // Public --------------------------------------------------------
+
+ public void setUp() throws Exception
+ {
+ super.setUp();
+
+ ServerManagement.start("all");
+
+ ServerManagement.undeployTopic("Topic");
+ ServerManagement.deployTopic("Topic");
+
+ ic = new InitialContext(ServerManagement.getJNDIEnvironment());
+
+ log.debug("setup done");
+ }
+
+ public void tearDown() throws Exception
+ {
+ log.debug("starting tear down");
+
+ ic.close();
+
+ ServerManagement.undeployTopic("Topic");
+
+ super.tearDown();
+ }
+
+ public void testSimplestDurableSubscription() throws Exception
+ {
+ ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
+ Topic topic = (Topic)ic.lookup("/topic/Topic");
+ Connection conn = cf.createConnection();
+
+ conn.setClientID("brookeburke");
+
+ Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ MessageProducer prod = s.createProducer(topic);
+ prod.setDeliveryMode(DeliveryMode.PERSISTENT);
+
+ s.createDurableSubscriber(topic, "monicabelucci");
+
+ ObjectName destObjectName =
+ new ObjectName("jboss.messaging.destination:service=Topic,name=Topic");
+ List subs = (List)ServerManagement.invoke(destObjectName, "listAllSubscriptions", null, null);
+
+ assertNotNull(subs);
+
+ assertEquals(1, subs.size());
+
+ SubscriptionInfo info = (SubscriptionInfo)subs.get(0);
+
+ assertEquals("monicabelucci", info.getName());
+
+ prod.send(s.createTextMessage("k"));
+
+ conn.close();
+
+ subs = (List)ServerManagement.invoke(destObjectName, "listAllSubscriptions", null, null);
+
+ assertEquals(1, subs.size());
+
+ info = (SubscriptionInfo)subs.get(0);
+
+ assertEquals("monicabelucci", info.getName());
+
+ conn = cf.createConnection();
+ conn.setClientID("brookeburke");
+
+ s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ MessageConsumer durable = s.createDurableSubscriber(topic, "monicabelucci");
+
+ conn.start();
+
+ TextMessage tm = (TextMessage)durable.receive(1000);
+ assertEquals("k", tm.getText());
+
+ Message m = durable.receive(1000);
+ assertNull(m);
+
+ conn.close();
+ }
+
+
+ /**
+ * JMS 1.1 6.11.1: A client can change an existing durable subscription by creating a durable
+ * TopicSubscriber with the same name and a new topic and/or message selector, or NoLocal
+ * attribute. Changing a durable subscription is equivalent to deleting and recreating it.
+ *
+ * Test with a different topic (a redeployed topic is a different topic).
+ */
+ public void testDurableSubscriptionOnNewTopic() throws Exception
+ {
+ ServerManagement.deployTopic("CompletelyNewTopic");
+
+ ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
+ Topic topic = (Topic)ic.lookup("/topic/CompletelyNewTopic");
+ Connection conn = cf.createConnection();
+
+ conn.setClientID("brookeburke");
+
+ Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ MessageProducer prod = s.createProducer(topic);
+ prod.setDeliveryMode(DeliveryMode.PERSISTENT);
+
+ s.createDurableSubscriber(topic, "monicabelucci");
+
+ prod.send(s.createTextMessage("one"));
+
+ conn.close();
+
+ ServerManagement.deployTopic("CompletelyNewTopic2");
+
+ Topic topic2 = (Topic)ic.lookup("/topic/CompletelyNewTopic2");
+ conn = cf.createConnection();
+
+ conn.setClientID("brookeburke");
+
+ s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ MessageConsumer durable = s.createDurableSubscriber(topic2, "monicabelucci");
+
+ conn.start();
+
+ Message m = durable.receive(1000);
+ assertNull(m);
+
+ ServerManagement.undeployTopic("CompletelyNewTopic");
+ ServerManagement.undeployTopic("CompletelyNewTopic2");
+
+ conn.close();
+ }
+
+ /**
+ * JMS 1.1 6.11.1: A client can change an existing durable subscription by creating a durable
+ * TopicSubscriber with the same name and a new topic and/or message selector, or NoLocal
+ * attribute. Changing a durable subscription is equivalent to deleting and recreating it.
+ *
+ * Test with a different selector.
+ */
+ public void testDurableSubscriptionDifferentSelector() throws Exception
+ {
+ ServerManagement.deployTopic("CompletelyNewTopic2");
+
+ ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
+ Topic topic = (Topic)ic.lookup("/topic/Topic");
+ Connection conn = cf.createConnection();
+
+ conn.setClientID("brookeburke");
+
+ Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ MessageProducer prod = s.createProducer(topic);
+ prod.setDeliveryMode(DeliveryMode.PERSISTENT);
+
+
+ //fails here
+ MessageConsumer durable =
+ s.createDurableSubscriber(topic,
+ "monicabelucci",
+ "color = 'red' AND shape = 'square'",
+ false);
+
+ TextMessage tm = s.createTextMessage("A red square message");
+ tm.setStringProperty("color", "red");
+ tm.setStringProperty("shape", "square");
+ prod.send(tm);
+
+ conn.start();
+
+ TextMessage rm = (TextMessage)durable.receive(5000);
+ assertEquals("A red square message", rm.getText());
+
+ tm = s.createTextMessage("Another red square message");
+ tm.setStringProperty("color", "red");
+ tm.setStringProperty("shape", "square");
+ prod.send(tm);
+
+ // TODO: when subscriptions/durable subscription will be registered as MBean, use the JMX
+ // interface to make sure the 'another red square message' is maintained by the
+ // durable subascription
+ // http://jira.jboss.org/jira/browse/JBMESSAGING-217
+
+ conn.close();
+
+ conn = cf.createConnection();
+
+ conn.setClientID("brookeburke");
+
+ s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ // modify the selector
+ durable = s.createDurableSubscriber(topic,
+ "monicabelucci",
+ "color = 'red'",
+ false);
+
+ conn.start();
+
+ Message m = durable.receive(1000);
+
+ // the durable subscription is destroyed and re-created. The red square message stored by
+ // the previous durable subscription is lost and (hopefully) garbage collected.
+ assertNull(m);
+
+ ServerManagement.undeployTopic("CompletelyNewTopic2");
+
+ conn.close();
+ }
+
+ /**
+ * JMS 1.1 6.11.1: A client can change an existing durable subscription by creating a durable
+ * TopicSubscriber with the same name and a new topic and/or message selector, or NoLocal
+ * attribute. Changing a durable subscription is equivalent to deleting and recreating it.
+ *
+ * Test with a different noLocal flag.
+ */
+ // Disabled until the validity of the test is established:
+ // http://jira.jboss.org/jira/browse/JBMESSAGING-566
+// public void testDurableSubscriptionDifferentNoLocal() throws Exception
+// {
+// ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
+// Topic topic = (Topic)ic.lookup("/topic/Topic");
+//
+// Connection conn = cf.createConnection();
+// conn.setClientID("ID0");
+//
+// Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+// MessageProducer prod = s.createProducer(topic);
+// prod.setDeliveryMode(DeliveryMode.PERSISTENT);
+//
+// MessageConsumer durable = s.createDurableSubscriber(topic, "mySubscription", null, false);
+//
+// TextMessage tm = null;
+// tm = s.createTextMessage("Message One");
+// prod.send(tm);
+// tm = s.createTextMessage("Message Two");
+// prod.send(tm);
+//
+//
+// conn.start();
+//
+// TextMessage rm = (TextMessage)durable.receive(5000);
+// assertEquals("Message One", rm.getText());
+//
+// conn.close();
+//
+// conn = cf.createConnection();
+// conn.setClientID("ID0");
+// s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+//
+// // modify the nolocal flag
+// durable = s.createDurableSubscriber(topic, "mySubscription", null, true);
+//
+// conn.start();
+//
+// Message m = durable.receive(1000);
+//
+// // the durable subscription is destroyed and re-created. "Message Two" stored by the previous
+// // durable subscription is lost and (hopefully) garbage collected.
+// assertNull(m);
+// }
+
+ public void testDurableSubscriptionOnTemporaryTopic() throws Exception
+ {
+ ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
+ Connection conn = cf.createConnection();
+ conn.setClientID("doesn't actually matter");
+ Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ Topic temporaryTopic = s.createTemporaryTopic();
+
+ try
+ {
+ s.createDurableSubscriber(temporaryTopic, "mySubscription");
+ fail("this should throw exception");
+ }
+ catch(InvalidDestinationException e)
+ {
+ // OK
+ }
+
+ conn.close();
+ }
+
+ /**
+ * Topic undeployment/redeployment has an activation/deactivation semantic, so undeploying a
+ * topic for which there are durable subscriptions preserves the content of those durable
+ * subscriptions, which can be then access upon topic redeployment.
+ * @throws Exception
+ */
+ public void testDurableSubscriptionOnTopicRedeployment() throws Exception
+ {
+ try
+ {
+ ic.lookup("/topic/TopicToBeRedeployed");
+ fail("should throw exception, topic shouldn't be deployed on the server");
+ }
+ catch(NamingException e)
+ {
+ // OK
+ }
+
+ ServerManagement.deployTopic("TopicToBeRedeployed");
+
+ ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
+ Topic topic = (Topic)ic.lookup("/topic/TopicToBeRedeployed");
+
+ Connection conn = cf.createConnection();
+ conn.setClientID("brookeburke");
+
+ Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ MessageProducer prod = s.createProducer(topic);
+ prod.setDeliveryMode(DeliveryMode.PERSISTENT);
+ MessageConsumer ds = s.createDurableSubscriber(topic, "monicabelucci");
+ conn.start();
+
+ prod.send(s.createTextMessage("one"));
+ prod.send(s.createTextMessage("two"));
+
+ TextMessage tm = (TextMessage)ds.receive();
+ assertEquals("one", tm.getText());
+ conn.close();
+
+ ServerManagement.undeployTopic("TopicToBeRedeployed");
+ log.debug("topic undeployed");
+
+ try
+ {
+ topic = (Topic)ic.lookup("/topic/TopicToBeRedeployed");
+ fail("should throw exception");
+ }
+ catch(NamingException e)
+ {
+ // OK
+ }
+
+ conn = cf.createConnection();
+ conn.setClientID("brookeburke");
+
+ s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ try
+ {
+ s.createDurableSubscriber(topic, "monicabelucci");
+ fail("should throw exception");
+ }
+ catch(JMSException e)
+ {
+ // OK
+ }
+
+ ServerManagement.deployTopic("TopicToBeRedeployed");
+ log.debug("topic redeployed");
+
+ // since redeployment has an activation semantic, I expect to find the messages there
+
+ topic = (Topic)ic.lookup("/topic/TopicToBeRedeployed");
+ ds = s.createDurableSubscriber(topic, "monicabelucci");
+ conn.start();
+
+ tm = (TextMessage)ds.receive(1000);
+ assertEquals("two", tm.getText());
+
+ conn.close();
+ ServerManagement.undeployTopic("TopicToBeRedeployed");
+ }
+
+ public void testUnsubscribeDurableSubscription() throws Exception
+ {
+ ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
+ Topic topic = (Topic)ic.lookup("/topic/Topic");
+
+ Connection conn = cf.createConnection();
+ conn.setClientID("ak47");
+
+ Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ MessageConsumer cons = s.createDurableSubscriber(topic, "uzzi");
+ MessageProducer prod = s.createProducer(topic);
+ prod.setDeliveryMode(DeliveryMode.PERSISTENT);
+
+ prod.send(s.createTextMessage("one"));
+
+ log.debug("unsubscribing ...");
+
+ cons.close();
+ s.unsubscribe("uzzi");
+
+ log.debug("resubscribing ...");
+
+ MessageConsumer ds = s.createDurableSubscriber(topic, "uzzi");
+ conn.start();
+
+ assertNull(ds.receive(1000));
+
+ ds.close();
+
+ s.unsubscribe("uzzi");
+
+ conn.close();
+ }
+
+ public void testInvalidSelectorException() throws Exception
+ {
+ ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
+ Topic topic = (Topic)ic.lookup("/topic/Topic");
+ Connection c = cf.createConnection();
+ c.setClientID("sofiavergara");
+ Session s = c.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ try
+ {
+ s.createDurableSubscriber(topic, "mysubscribption", "=TEST 'test'", true);
+ fail("this should fail");
+ }
+ catch(InvalidSelectorException e)
+ {
+ // OK
+ }
+
+ c.close();
+ }
+
+
+ //See JMS 1.1. spec sec 6.11
+ public void testUnsubscribeWithActiveConsumer() throws Exception
+ {
+ ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
+ Topic topic = (Topic)ic.lookup("/topic/Topic");
+
+ Connection conn = cf.createConnection();
+ conn.setClientID("zeke");
+
+ Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ TopicSubscriber dursub = s.createDurableSubscriber(topic, "dursub0");
+
+ try
+ {
+ s.unsubscribe("dursub0");
+ fail();
+ }
+ catch (IllegalStateException e)
+ {
+ //Ok - it is illegal to ubscribe a subscription if it has active consumers
+ }
+
+ dursub.close();
+
+ s.unsubscribe("dursub0");
+
+ conn.close();
+ }
+
+ public void testSubscribeWithActiveSubscription() throws Exception
+ {
+ ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
+ Topic topic = (Topic)ic.lookup("/topic/Topic");
+
+ Connection conn = cf.createConnection();
+ conn.setClientID("zeke");
+
+ Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ TopicSubscriber dursub1 = s.createDurableSubscriber(topic, "dursub1");
+
+ try
+ {
+ s.createDurableSubscriber(topic, "dursub1");
+ fail();
+ }
+ catch (IllegalStateException e)
+ {
+ //Ok - it is illegal to have more than one active subscriber on a subscrtiption at any one time
+ }
+
+ dursub1.close();
+
+ s.unsubscribe("dursub1");
+
+ conn.close();
+ }
+
+ // Package protected ---------------------------------------------
+
+ // Protected -----------------------------------------------------
+
+ // Private -------------------------------------------------------
+
+ // Inner classes -------------------------------------------------
+
+}
More information about the jboss-cvs-commits
mailing list