From 5b5d494e6556839c43859afc2d47c3b7d55ecd41 Mon Sep 17 00:00:00 2001 From: "Timothy A. Bish" Date: Mon, 7 Mar 2011 22:49:17 +0000 Subject: [PATCH] Fix and test for: https://issues.apache.org/jira/browse/AMQ-2213 git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1079004 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/activemq/ActiveMQQueueSession.java | 18 +-- .../apache/activemq/ActiveMQTopicSession.java | 18 +-- .../org/apache/activemq/bugs/AMQ2213Test.java | 103 ++++++++++++++++++ 3 files changed, 125 insertions(+), 14 deletions(-) create mode 100644 activemq-core/src/test/java/org/apache/activemq/bugs/AMQ2213Test.java diff --git a/activemq-core/src/main/java/org/apache/activemq/ActiveMQQueueSession.java b/activemq-core/src/main/java/org/apache/activemq/ActiveMQQueueSession.java index d47b1bc669..272d4cd487 100755 --- a/activemq-core/src/main/java/org/apache/activemq/ActiveMQQueueSession.java +++ b/activemq-core/src/main/java/org/apache/activemq/ActiveMQQueueSession.java @@ -47,8 +47,8 @@ import javax.jms.TopicSubscriber; * other operations. The ActiveMQSessions implement both Topic and Queue * Sessions methods but the spec states that Queue session should throw * Exceptions if topic operations are attempted on it. - * - * + * + * */ public class ActiveMQQueueSession implements QueueSession { @@ -294,11 +294,15 @@ public class ActiveMQQueueSession implements QueueSession { /* * (non-Javadoc) - * + * * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object arg0) { - return next.equals(arg0); + if(this != arg0) { + return next.equals(arg0); + } + + return true; } /** @@ -327,7 +331,7 @@ public class ActiveMQQueueSession implements QueueSession { /* * (non-Javadoc) - * + * * @see java.lang.Object#hashCode() */ public int hashCode() { @@ -349,7 +353,7 @@ public class ActiveMQQueueSession implements QueueSession { } /** - * + * */ public void run() { next.run(); @@ -365,7 +369,7 @@ public class ActiveMQQueueSession implements QueueSession { /* * (non-Javadoc) - * + * * @see java.lang.Object#toString() */ public String toString() { diff --git a/activemq-core/src/main/java/org/apache/activemq/ActiveMQTopicSession.java b/activemq-core/src/main/java/org/apache/activemq/ActiveMQTopicSession.java index e6bba6600e..ea92a71a02 100755 --- a/activemq-core/src/main/java/org/apache/activemq/ActiveMQTopicSession.java +++ b/activemq-core/src/main/java/org/apache/activemq/ActiveMQTopicSession.java @@ -46,8 +46,8 @@ import javax.jms.TopicSubscriber; * other operations. The ActiveMQSessions implement both Topic and Queue * Sessions methods but the spec states that TopicSession should throw * Exceptions if queue operations are attempted on it. - * - * + * + * */ public class ActiveMQTopicSession implements TopicSession { @@ -294,11 +294,15 @@ public class ActiveMQTopicSession implements TopicSession { /* * (non-Javadoc) - * + * * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object arg0) { - return next.equals(arg0); + if(this != arg0) { + return next.equals(arg0); + } + + return true; } /** @@ -327,7 +331,7 @@ public class ActiveMQTopicSession implements TopicSession { /* * (non-Javadoc) - * + * * @see java.lang.Object#hashCode() */ public int hashCode() { @@ -349,7 +353,7 @@ public class ActiveMQTopicSession implements TopicSession { } /** - * + * */ public void run() { next.run(); @@ -365,7 +369,7 @@ public class ActiveMQTopicSession implements TopicSession { /* * (non-Javadoc) - * + * * @see java.lang.Object#toString() */ public String toString() { diff --git a/activemq-core/src/test/java/org/apache/activemq/bugs/AMQ2213Test.java b/activemq-core/src/test/java/org/apache/activemq/bugs/AMQ2213Test.java new file mode 100644 index 0000000000..34b8eaaabf --- /dev/null +++ b/activemq-core/src/test/java/org/apache/activemq/bugs/AMQ2213Test.java @@ -0,0 +1,103 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.activemq.bugs; + +import javax.jms.Connection; +import javax.jms.ConnectionFactory; +import javax.jms.JMSException; +import javax.jms.MessageConsumer; +import javax.jms.Queue; +import javax.jms.QueueConnection; +import javax.jms.QueueSession; +import javax.jms.Session; +import javax.jms.TopicConnection; +import javax.jms.TopicSession; + +import junit.framework.Assert; + +import org.apache.activemq.ActiveMQConnectionFactory; +import org.apache.activemq.broker.BrokerService; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class AMQ2213Test +{ + BrokerService broker; + ConnectionFactory factory; + Connection connection; + Session session; + Queue queue; + MessageConsumer consumer; + + public void createBroker(boolean deleteAll) throws Exception { + broker = new BrokerService(); + broker.setDeleteAllMessagesOnStartup(deleteAll); + broker.setDataDirectory("target/AMQ3145Test"); + broker.setUseJmx(true); + broker.getManagementContext().setCreateConnector(false); + broker.addConnector("tcp://localhost:0"); + broker.start(); + broker.waitUntilStarted(); + factory = new ActiveMQConnectionFactory(broker.getTransportConnectors().get(0).getConnectUri().toString()); + connection = factory.createConnection(); + connection.start(); + session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); + } + + @Before + public void createBroker() throws Exception { + createBroker(true); + } + + @After + public void tearDown() throws Exception { + if (consumer != null) { + consumer.close(); + } + session.close(); + connection.stop(); + connection.close(); + broker.stop(); + } + + @Test + public void testEqualsGenericSession() throws JMSException + { + Assert.assertNotNull(this.connection); + Session sess = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Assert.assertTrue(sess.equals(sess)); + } + + @Test + public void testEqualsTopicSession() throws JMSException + { + Assert.assertNotNull(this.connection); + Assert.assertTrue(this.connection instanceof TopicConnection); + TopicSession sess = ((TopicConnection)this.connection).createTopicSession(false, Session.AUTO_ACKNOWLEDGE); + Assert.assertTrue(sess.equals(sess)); + } + + @Test + public void testEqualsQueueSession() throws JMSException + { + Assert.assertNotNull(this.connection); + Assert.assertTrue(this.connection instanceof QueueConnection); + QueueSession sess = ((QueueConnection)this.connection).createQueueSession(false, Session.AUTO_ACKNOWLEDGE); + Assert.assertTrue(sess.equals(sess)); + } +}