[jboss-cvs] JBoss Messaging SVN: r4499 - in trunk: src/main/org/jboss/messaging/core/client/impl and 5 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Jun 17 07:18:59 EDT 2008
Author: ataylor
Date: 2008-06-17 07:18:59 -0400 (Tue, 17 Jun 2008)
New Revision: 4499
Modified:
trunk/src/main/org/jboss/messaging/core/client/ClientBrowser.java
trunk/src/main/org/jboss/messaging/core/client/ClientConnection.java
trunk/src/main/org/jboss/messaging/core/client/ClientConsumer.java
trunk/src/main/org/jboss/messaging/core/client/ClientProducer.java
trunk/src/main/org/jboss/messaging/core/client/ClientSession.java
trunk/src/main/org/jboss/messaging/core/client/impl/ClientBrowserImpl.java
trunk/src/main/org/jboss/messaging/core/client/impl/ClientConnectionImpl.java
trunk/src/main/org/jboss/messaging/core/client/impl/ClientConsumerImpl.java
trunk/src/main/org/jboss/messaging/core/client/impl/ClientProducerImpl.java
trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java
trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MinaConnector.java
trunk/src/main/org/jboss/messaging/jms/client/JBossConnection.java
trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientBrowserImplTest.java
trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientConnectionImplTest.java
trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientConsumerImplTest.java
trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientProducerImplTest.java
trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientSessionImplTest.java
trunk/tests/src/org/jboss/messaging/tests/unit/jms/JBossTemporaryTopicTest.java
trunk/tests/src/org/jboss/messaging/tests/unit/jms/client/JBossConnectionTest.java
trunk/tests/src/org/jboss/messaging/tests/unit/jms/client/JBossSessionTest.java
Log:
added methods to clean up a connections resources. This is triggered by the underlying transport failing.
Modified: trunk/src/main/org/jboss/messaging/core/client/ClientBrowser.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/ClientBrowser.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/src/main/org/jboss/messaging/core/client/ClientBrowser.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -13,6 +13,7 @@
* @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
* @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
* @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
+ * @author <a href="mailto:ataylor at redhat.com">Andy Taylor</a>
*/
public interface ClientBrowser
{
@@ -25,4 +26,6 @@
void close() throws MessagingException;
boolean isClosed();
- }
+
+ void cleanUp();
+}
Modified: trunk/src/main/org/jboss/messaging/core/client/ClientConnection.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/ClientConnection.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/src/main/org/jboss/messaging/core/client/ClientConnection.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -13,6 +13,7 @@
/**
* @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
* @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
+ * @author <a href="mailto:ataylor at redhat.com">Andy Taylor</a>
*/
public interface ClientConnection
{
@@ -36,4 +37,6 @@
Version getServerVersion();
ClientConnectionFactory getConnectionFactory();
+
+ void cleanUp();
}
Modified: trunk/src/main/org/jboss/messaging/core/client/ClientConsumer.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/ClientConsumer.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/src/main/org/jboss/messaging/core/client/ClientConsumer.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -12,6 +12,7 @@
/**
* @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
* @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
+ * @author <a href="mailto:ataylor at redhat.com">Andy Taylor</a>
*/
public interface ClientConsumer
{
@@ -30,4 +31,6 @@
boolean isClosed();
boolean isDirect();
+
+ void cleanUp();
}
Modified: trunk/src/main/org/jboss/messaging/core/client/ClientProducer.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/ClientProducer.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/src/main/org/jboss/messaging/core/client/ClientProducer.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -12,6 +12,7 @@
/**
* @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:ataylor at redhat.com">Andy Taylor</a>
*/
public interface ClientProducer
{
@@ -36,4 +37,6 @@
int getMaxRate();
int getInitialWindowSize();
+
+ void cleanUp();
}
Modified: trunk/src/main/org/jboss/messaging/core/client/ClientSession.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/ClientSession.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/src/main/org/jboss/messaging/core/client/ClientSession.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -7,17 +7,18 @@
package org.jboss.messaging.core.client;
-import javax.transaction.xa.XAResource;
-
import org.jboss.messaging.core.exception.MessagingException;
import org.jboss.messaging.core.remoting.impl.wireformat.SessionBindingQueryResponseMessage;
import org.jboss.messaging.core.remoting.impl.wireformat.SessionQueueQueryResponseMessage;
import org.jboss.messaging.util.SimpleString;
+import javax.transaction.xa.XAResource;
+
/**
*
* @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
* @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
+ * @author <a href="mailto:ataylor at redhat.com">Andy Taylor</a>
*/
public interface ClientSession extends XAResource
{
@@ -78,5 +79,7 @@
int getLazyAckBatchSize();
- boolean isXA();
+ boolean isXA();
+
+ void cleanUp();
}
Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ClientBrowserImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ClientBrowserImpl.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ClientBrowserImpl.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -33,6 +33,7 @@
* @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
* @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
* @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
+ * @author <a href="mailto:ataylor at redhat.com">Andy Taylor</a>
*
* @version <tt>$Revision: 3602 $</tt>
*
@@ -86,6 +87,13 @@
}
}
+ public synchronized void cleanUp()
+ {
+ session.removeBrowser(this);
+
+ closed = true;
+ }
+
public boolean isClosed()
{
return closed;
Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ClientConnectionImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ClientConnectionImpl.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ClientConnectionImpl.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -21,9 +21,6 @@
*/
package org.jboss.messaging.core.client.impl;
-import java.util.HashSet;
-import java.util.Set;
-
import org.jboss.messaging.core.client.ClientConnectionFactory;
import org.jboss.messaging.core.client.ClientSession;
import org.jboss.messaging.core.client.RemotingSessionListener;
@@ -36,6 +33,9 @@
import org.jboss.messaging.core.version.Version;
import org.jboss.messaging.util.ConcurrentHashSet;
+import java.util.HashSet;
+import java.util.Set;
+
/**
* The client-side Connection connectionFactory class.
*
@@ -43,6 +43,7 @@
* @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
* @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
* @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * @author <a href="mailto:ataylor at redhat.com">Andy Taylor</a>
*
* @version <tt>$Revision: 3602 $</tt>
*
@@ -161,6 +162,12 @@
}
}
+ public synchronized void cleanUp()
+ {
+ cleanUpChildren();
+ closed = true;
+ }
+
public boolean isClosed()
{
return closed;
@@ -226,6 +233,18 @@
}
}
+ private void cleanUpChildren()
+ {
+ //We copy the set of sessions to prevent ConcurrentModificationException which would occur
+ //when the child trues to remove itself from its parent
+ Set<ClientSession> childrenClone = new HashSet<ClientSession>(sessions);
+
+ for (ClientSession session: childrenClone)
+ {
+ session.cleanUp();
+ }
+ }
+
// Inner Classes --------------------------------------------------------------------------------
}
Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ClientConsumerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ClientConsumerImpl.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ClientConsumerImpl.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -21,10 +21,6 @@
*/
package org.jboss.messaging.core.client.impl;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
import org.jboss.messaging.core.client.ClientMessage;
import org.jboss.messaging.core.client.MessageHandler;
import org.jboss.messaging.core.exception.MessagingException;
@@ -35,11 +31,16 @@
import org.jboss.messaging.core.remoting.impl.wireformat.ConsumerFlowCreditMessage;
import org.jboss.messaging.core.remoting.impl.wireformat.PacketImpl;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
/**
* @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
* @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
* @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
* @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
+ * @author <a href="mailto:ataylor at redhat.com">Andy Taylor</a>
*
* @version <tt>$Revision: 3603 $</tt>
*
@@ -281,6 +282,45 @@
}
}
+ public synchronized void cleanUp()
+ {
+ try
+ {
+ // Now we wait for any current handler runners to run.
+ waitForOnMessageToComplete();
+
+ closed = true;
+
+ if (receiverThread != null)
+ {
+ synchronized (this)
+ {
+ // Wake up any receive() thread that might be waiting
+ notify();
+ }
+ }
+
+ handler = null;
+
+ receiverThread = null;
+
+ remotingConnection.getPacketDispatcher().unregister(clientTargetID);
+ }
+ finally
+ {
+ try
+ {
+ session.removeConsumer(this);
+ }
+ catch (MessagingException e)
+ {
+ log.warn("Unable to clean up consumer:" + this);
+ }
+ }
+ }
+
+
+
public boolean isClosed()
{
return closed;
Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ClientProducerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ClientProducerImpl.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ClientProducerImpl.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -21,8 +21,6 @@
*/
package org.jboss.messaging.core.client.impl;
-import java.util.concurrent.Semaphore;
-
import org.jboss.messaging.core.client.AcknowledgementHandler;
import org.jboss.messaging.core.client.ClientMessage;
import org.jboss.messaging.core.exception.MessagingException;
@@ -32,11 +30,14 @@
import org.jboss.messaging.util.SimpleString;
import org.jboss.messaging.util.TokenBucketLimiter;
+import java.util.concurrent.Semaphore;
+
/**
* The client-side Producer connectionFactory class.
*
* @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
* @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
+ * @author <a href="mailto:ataylor at redhat.com">Andy Taylor</a>
*
* @version <tt>$Revision$</tt>
*
@@ -161,6 +162,15 @@
closed = true;
}
+ public void cleanUp()
+ {
+ session.removeProducer(this);
+
+ remotingConnection.getPacketDispatcher().unregister(clientTargetID);
+
+ closed = true;
+ }
+
public boolean isClosed()
{
return closed;
Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -21,18 +21,6 @@
*/
package org.jboss.messaging.core.client.impl;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.XAResource;
-import javax.transaction.xa.Xid;
-
import org.jboss.messaging.core.client.ClientBrowser;
import org.jboss.messaging.core.client.ClientConsumer;
import org.jboss.messaging.core.client.ClientProducer;
@@ -40,45 +28,23 @@
import org.jboss.messaging.core.logging.Logger;
import org.jboss.messaging.core.remoting.Packet;
import org.jboss.messaging.core.remoting.RemotingConnection;
-import org.jboss.messaging.core.remoting.impl.wireformat.ConsumerFlowCreditMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.PacketImpl;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionAcknowledgeMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionAddDestinationMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionBindingQueryMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionBindingQueryResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCancelMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateBrowserMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateBrowserResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateConsumerMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateConsumerResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateProducerMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateProducerResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateQueueMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionDeleteQueueMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionQueueQueryMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionQueueQueryResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionRemoveDestinationMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXACommitMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAEndMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAForgetMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAGetInDoubtXidsResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAGetTimeoutResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAJoinMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAPrepareMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAResumeMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXARollbackMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXASetTimeoutMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXASetTimeoutResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAStartMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.*;
import org.jboss.messaging.util.SimpleString;
import org.jboss.messaging.util.TokenBucketLimiterImpl;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
/**
* @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
* @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
* @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
* @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * @author <a href="mailto:ataylor at redhat.com">Andy Taylor</a>
*
* @version <tt>$Revision: 3603 $</tt>
*
@@ -515,6 +481,19 @@
closed = true;
}
}
+
+
+ public synchronized void cleanUp()
+ {
+ cleanUpChildren();
+ executorService.shutdown();
+
+ connection.removeSession(this);
+
+ closed = true;
+ }
+
+
public boolean isClosed()
{
@@ -550,7 +529,6 @@
{
return xa;
}
-
// ClientSessionInternal implementation ------------------------------------------------------------
public long getServerTargetID()
@@ -981,6 +959,30 @@
browser.close();
}
}
+
+ private void cleanUpChildren()
+ {
+ Set<ClientConsumer> consumersClone = new HashSet<ClientConsumer>(consumers);
+
+ for (ClientConsumer consumer: consumersClone)
+ {
+ consumer.cleanUp();
+ }
+
+ Set<ClientProducer> producersClone = new HashSet<ClientProducer>(producers);
+
+ for (ClientProducer producer: producersClone)
+ {
+ producer.cleanUp();
+ }
+
+ Set<ClientBrowser> browsersClone = new HashSet<ClientBrowser>(browsers);
+
+ for (ClientBrowser browser: browsersClone)
+ {
+ browser.cleanUp();
+ }
+ }
// Inner Classes --------------------------------------------------------------------------------
Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MinaConnector.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MinaConnector.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MinaConnector.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -6,26 +6,7 @@
*/
package org.jboss.messaging.core.remoting.impl.mina;
-import static org.jboss.messaging.core.remoting.impl.mina.FilterChainSupport.addCodecFilter;
-import static org.jboss.messaging.core.remoting.impl.mina.FilterChainSupport.addSSLFilter;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.mina.common.CloseFuture;
-import org.apache.mina.common.ConnectFuture;
-import org.apache.mina.common.DefaultIoFilterChainBuilder;
-import org.apache.mina.common.IdleStatus;
-import org.apache.mina.common.IoService;
-import org.apache.mina.common.IoServiceListener;
-import org.apache.mina.common.IoSession;
+import org.apache.mina.common.*;
import org.apache.mina.filter.ssl.SslFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.jboss.messaging.core.client.ConnectionParams;
@@ -36,21 +17,22 @@
import org.jboss.messaging.core.logging.Logger;
import org.jboss.messaging.core.ping.Pinger;
import org.jboss.messaging.core.ping.impl.PingerImpl;
-import org.jboss.messaging.core.remoting.CleanUpNotifier;
-import org.jboss.messaging.core.remoting.Packet;
-import org.jboss.messaging.core.remoting.PacketDispatcher;
-import org.jboss.messaging.core.remoting.PacketHandler;
-import org.jboss.messaging.core.remoting.PacketReturner;
-import org.jboss.messaging.core.remoting.RemotingConnector;
-import org.jboss.messaging.core.remoting.RemotingSession;
-import org.jboss.messaging.core.remoting.ResponseHandler;
-import org.jboss.messaging.core.remoting.TransportType;
+import org.jboss.messaging.core.remoting.*;
import org.jboss.messaging.core.remoting.impl.ResponseHandlerImpl;
+import static org.jboss.messaging.core.remoting.impl.mina.FilterChainSupport.addCodecFilter;
+import static org.jboss.messaging.core.remoting.impl.mina.FilterChainSupport.addSSLFilter;
import org.jboss.messaging.core.remoting.impl.wireformat.Ping;
import org.jboss.messaging.core.remoting.impl.wireformat.Pong;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.*;
+
/**
* @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * @author <a href="mailto:ataylor at redhat.com">Andy Taylor</a>
* @version <tt>$Revision$</tt>
*/
public class MinaConnector implements RemotingConnector, CleanUpNotifier
@@ -212,10 +194,10 @@
}
alive = false;
scheduledExecutor.shutdownNow();
+ connector.removeListener(ioListener);
CloseFuture closeFuture = session.close().awaitUninterruptibly();
boolean closed = closeFuture.isClosed();
- connector.removeListener(ioListener);
connector.dispose();
threadPool.shutdown();
@@ -293,6 +275,9 @@
{
listener.sessionDestroyed(sessionID, me);
}
+
+ session = null;
+ connector = null;
}
public void fireCleanup(long sessionID)
Modified: trunk/src/main/org/jboss/messaging/jms/client/JBossConnection.java
===================================================================
--- trunk/src/main/org/jboss/messaging/jms/client/JBossConnection.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/src/main/org/jboss/messaging/jms/client/JBossConnection.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -21,37 +21,19 @@
*/
package org.jboss.messaging.jms.client;
-import javax.jms.Connection;
-import javax.jms.ConnectionConsumer;
-import javax.jms.ConnectionMetaData;
-import javax.jms.Destination;
-import javax.jms.ExceptionListener;
-import javax.jms.IllegalStateException;
-import javax.jms.JMSException;
-import javax.jms.Queue;
-import javax.jms.QueueConnection;
-import javax.jms.QueueSession;
-import javax.jms.ServerSessionPool;
-import javax.jms.Session;
-import javax.jms.Topic;
-import javax.jms.TopicConnection;
-import javax.jms.TopicSession;
-import javax.jms.XAConnection;
-import javax.jms.XAQueueConnection;
-import javax.jms.XAQueueSession;
-import javax.jms.XASession;
-import javax.jms.XATopicConnection;
-import javax.jms.XATopicSession;
-
import org.jboss.messaging.core.client.ClientConnection;
import org.jboss.messaging.core.client.ClientSession;
import org.jboss.messaging.core.client.RemotingSessionListener;
import org.jboss.messaging.core.exception.MessagingException;
import org.jboss.messaging.core.logging.Logger;
+import javax.jms.*;
+import javax.jms.IllegalStateException;
+
/**
* @author <a href="mailto:ovidiu at feodorov.com">Ovidiu Feodorov</a>
* @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:ataylor at redhat.com">Andy Taylor</a>
* @version <tt>$Revision$</tt>
*
* $Id$
@@ -100,6 +82,16 @@
this.clientID = clientID;
this.dupsOKBatchSize = dupsOKBatchSize;
+
+ try
+ {
+ connection.setRemotingSessionListener(new JMSFailureListener());
+ }
+ catch (MessagingException e)
+ {
+ log.warn("Unable to set remoting session listener");
+ }
+
}
// Connection implementation --------------------------------------------------------------------
@@ -160,24 +152,7 @@
public void setExceptionListener(final ExceptionListener listener) throws JMSException
{
- try
- {
- if (listener == null)
- {
- connection.setRemotingSessionListener(null);
- }
- else
- {
- connection.setRemotingSessionListener(new JMSFailureListener());
- }
-
- exceptionListener = listener;
- }
- catch (MessagingException e)
- {
- throw JMSExceptionHelper.convertFromMessagingException(e);
- }
-
+ exceptionListener = listener;
justCreated = false;
}
@@ -191,7 +166,6 @@
{
throw JMSExceptionHelper.convertFromMessagingException(e);
}
-
justCreated = false;
}
@@ -424,12 +398,17 @@
{
if (me == null)
return;
-
- JMSException je = new JMSException(me.toString());
-
- je.initCause(me);
-
- exceptionListener.onException(je);
+
+ if (exceptionListener != null)
+ {
+ JMSException je = new JMSException(me.toString());
+
+ je.initCause(me);
+
+ exceptionListener.onException(je);
+ }
+
+ connection.cleanUp();
}
}
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientBrowserImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientBrowserImplTest.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientBrowserImplTest.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -206,5 +206,27 @@
assertEquals(has, hasNext);
EasyMock.verify(session, connection, rc);
- }
+ }
+
+ public void testCleanUp() throws Exception
+ {
+ ClientSessionInternal session = EasyMock.createStrictMock(ClientSessionInternal.class);
+ ClientConnectionInternal connection = EasyMock.createStrictMock(ClientConnectionInternal.class);
+ RemotingConnection rc = EasyMock.createStrictMock(RemotingConnection.class);
+
+ EasyMock.expect(session.getConnection()).andReturn(connection);
+ EasyMock.expect(connection.getRemotingConnection()).andReturn(rc);
+
+ EasyMock.replay(session, connection, rc);
+
+ ClientBrowser browser =
+ new ClientBrowserImpl(session, 67567576);
+ EasyMock.verify(session, connection, rc);
+ EasyMock.reset(session, connection, rc);
+ session.removeBrowser(browser);
+ EasyMock.replay(session, connection, rc);
+ browser.cleanUp();
+ EasyMock.verify(session, connection, rc);
+
+ }
}
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientConnectionImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientConnectionImplTest.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientConnectionImplTest.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -21,19 +21,9 @@
*/
package org.jboss.messaging.tests.unit.core.client.impl;
-import java.util.Set;
-
import org.easymock.EasyMock;
-import org.jboss.messaging.core.client.ClientConnection;
-import org.jboss.messaging.core.client.ClientConnectionFactory;
-import org.jboss.messaging.core.client.ClientSession;
-import org.jboss.messaging.core.client.Location;
-import org.jboss.messaging.core.client.RemotingSessionListener;
-import org.jboss.messaging.core.client.impl.ClientConnectionFactoryImpl;
-import org.jboss.messaging.core.client.impl.ClientConnectionImpl;
-import org.jboss.messaging.core.client.impl.ClientConnectionInternal;
-import org.jboss.messaging.core.client.impl.ClientSessionInternal;
-import org.jboss.messaging.core.client.impl.LocationImpl;
+import org.jboss.messaging.core.client.*;
+import org.jboss.messaging.core.client.impl.*;
import org.jboss.messaging.core.exception.MessagingException;
import org.jboss.messaging.core.logging.Logger;
import org.jboss.messaging.core.remoting.RemotingConnection;
@@ -45,6 +35,8 @@
import org.jboss.messaging.core.version.impl.VersionImpl;
import org.jboss.messaging.tests.util.UnitTestCase;
+import java.util.Set;
+
/**
*
* A ClientConnectionImplTest
@@ -356,4 +348,75 @@
EasyMock.verify(rc);
}
+
+ public void testSessionCleanedUp() throws Exception
+ {
+ RemotingConnection rc = EasyMock.createStrictMock(RemotingConnection.class);
+
+ Location location = new LocationImpl(TransportType.TCP, "oranges");
+
+ ClientConnectionFactory cf = new ClientConnectionFactoryImpl(location);
+
+
+
+ final int connTargetID = 17267162;
+
+ Version version = new VersionImpl("uqysuyqs", 1, 1, 1, 12, "uqysuays");
+
+ ClientConnection conn = new ClientConnectionImpl(cf, connTargetID, rc, version);
+
+ ConnectionCreateSessionMessage request = new ConnectionCreateSessionMessage(true, true, true);
+
+ final int sessionTargetID = 12127162;
+
+ ConnectionCreateSessionResponseMessage response = new ConnectionCreateSessionResponseMessage(sessionTargetID);
+
+ EasyMock.expect(rc.sendBlocking(connTargetID, connTargetID, request)).andReturn(response);
+
+ EasyMock.replay(rc);
+ ClientSession session = conn.createClientSession(true, true, true, 1);
+ conn.cleanUp();
+ assertTrue(session.isClosed());
+ assertTrue(conn.isClosed());
+ EasyMock.verify(rc);
+
+ }
+
+
+ public void testSessionsCleanedUp() throws Exception
+ {
+ RemotingConnection rc = EasyMock.createStrictMock(RemotingConnection.class);
+
+ Location location = new LocationImpl(TransportType.TCP, "oranges");
+
+ ClientConnectionFactory cf = new ClientConnectionFactoryImpl(location);
+
+
+
+ final int connTargetID = 17267162;
+
+ Version version = new VersionImpl("uqysuyqs", 1, 1, 1, 12, "uqysuays");
+
+ ClientConnection conn = new ClientConnectionImpl(cf, connTargetID, rc, version);
+
+ ConnectionCreateSessionMessage request = new ConnectionCreateSessionMessage(true, true, true);
+
+ final int sessionTargetID = 12127162;
+
+ ConnectionCreateSessionResponseMessage response = new ConnectionCreateSessionResponseMessage(sessionTargetID);
+
+ EasyMock.expect(rc.sendBlocking(connTargetID, connTargetID, request)).andReturn(response).anyTimes();
+
+ EasyMock.replay(rc);
+ ClientSession session = conn.createClientSession(true, true, true, 1);
+ ClientSession session2 = conn.createClientSession(true, true, true, 2);
+ ClientSession session3 = conn.createClientSession(true, true, true, 3);
+ conn.cleanUp();
+ assertTrue(session.isClosed());
+ assertTrue(session2.isClosed());
+ assertTrue(session3.isClosed());
+ assertTrue(conn.isClosed());
+ EasyMock.verify(rc);
+
+ }
}
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientConsumerImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientConsumerImplTest.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientConsumerImplTest.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -21,10 +21,6 @@
*/
package org.jboss.messaging.tests.unit.core.client.impl;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ExecutorService;
-
import org.easymock.EasyMock;
import org.jboss.messaging.core.client.ClientMessage;
import org.jboss.messaging.core.client.MessageHandler;
@@ -33,9 +29,14 @@
import org.jboss.messaging.core.client.impl.ClientConsumerInternal;
import org.jboss.messaging.core.client.impl.ClientSessionInternal;
import org.jboss.messaging.core.logging.Logger;
+import org.jboss.messaging.core.remoting.PacketDispatcher;
import org.jboss.messaging.core.remoting.RemotingConnection;
import org.jboss.messaging.tests.util.UnitTestCase;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+
/**
*
* A ClientConsumerImplTest
@@ -481,7 +482,34 @@
assertNull(consumer.receiveImmediate());
}
-
+
+ public void testCleanUp() throws Exception
+ {
+ ClientSessionInternal session = EasyMock.createStrictMock(ClientSessionInternal.class);
+ ClientConnectionInternal connection = EasyMock.createStrictMock(ClientConnectionInternal.class);
+ RemotingConnection rc = EasyMock.createStrictMock(RemotingConnection.class);
+ ExecutorService executor = EasyMock.createStrictMock(ExecutorService.class);
+
+ EasyMock.expect(session.getExecutorService()).andReturn(executor);
+ EasyMock.expect(session.getConnection()).andReturn(connection);
+ EasyMock.expect(connection.getRemotingConnection()).andReturn(rc);
+
+ EasyMock.replay(session, connection, rc);
+
+ ClientConsumerInternal consumer =
+ new ClientConsumerImpl(session, 1, 2, 3, true);
+
+ EasyMock.verify(session, connection, rc);
+
+ EasyMock.reset(session, connection, rc);
+ PacketDispatcher packetDispatcher = EasyMock.createStrictMock(PacketDispatcher.class);
+ EasyMock.expect(rc.getPacketDispatcher()).andReturn(packetDispatcher);
+ packetDispatcher.unregister(2);
+ session.removeConsumer(consumer);
+ EasyMock.replay(session, connection, rc, packetDispatcher);
+ consumer.cleanUp();
+ EasyMock.verify(session, connection, rc, packetDispatcher);
+ }
// Private -----------------------------------------------------------------------------------------------------------
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientProducerImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientProducerImplTest.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientProducerImplTest.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -198,6 +198,36 @@
EasyMock.verify(session, connection, rc, pd);
}
+
+ public void testCleanUp() throws Exception
+ {
+ ClientSessionInternal session = EasyMock.createStrictMock(ClientSessionInternal.class);
+ ClientConnectionInternal connection = EasyMock.createStrictMock(ClientConnectionInternal.class);
+ RemotingConnection rc = EasyMock.createStrictMock(RemotingConnection.class);
+
+ EasyMock.expect(session.getConnection()).andReturn(connection);
+ EasyMock.expect(connection.getRemotingConnection()).andReturn(rc);
+
+ SimpleString address = new SimpleString("uhasuuhs");
+
+ EasyMock.replay(session, connection, rc);
+
+ ClientProducerInternal producer =
+ new ClientProducerImpl(session, 7876L, 76767L, address, null,
+ true, true, 1);
+
+ EasyMock.verify(session, connection, rc);
+
+ EasyMock.reset(session, connection, rc);
+ PacketDispatcher packetDispatcher = EasyMock.createStrictMock(PacketDispatcher.class);
+ session.removeProducer(producer);
+ EasyMock.expect(rc.getPacketDispatcher()).andReturn(packetDispatcher);
+ packetDispatcher.unregister(76767L);
+ EasyMock.replay(session, connection, rc, packetDispatcher);
+ producer.cleanUp();
+
+ EasyMock.verify(session, connection, rc, packetDispatcher);
+ }
// Private ----------------------------------------------------------------------------------------
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientSessionImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientSessionImplTest.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientSessionImplTest.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -21,67 +21,28 @@
*/
package org.jboss.messaging.tests.unit.core.client.impl;
-import static org.jboss.messaging.tests.util.RandomUtil.randomXid;
-
-import java.util.Arrays;
-
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.XAResource;
-import javax.transaction.xa.Xid;
-
import org.easymock.EasyMock;
import org.jboss.messaging.core.client.ClientBrowser;
import org.jboss.messaging.core.client.ClientConnectionFactory;
import org.jboss.messaging.core.client.ClientSession;
import org.jboss.messaging.core.client.Location;
-import org.jboss.messaging.core.client.impl.ClientConnectionInternal;
-import org.jboss.messaging.core.client.impl.ClientConsumerInternal;
-import org.jboss.messaging.core.client.impl.ClientConsumerPacketHandler;
-import org.jboss.messaging.core.client.impl.ClientProducerInternal;
-import org.jboss.messaging.core.client.impl.ClientProducerPacketHandler;
-import org.jboss.messaging.core.client.impl.ClientSessionImpl;
-import org.jboss.messaging.core.client.impl.ClientSessionInternal;
-import org.jboss.messaging.core.client.impl.LocationImpl;
+import org.jboss.messaging.core.client.impl.*;
import org.jboss.messaging.core.exception.MessagingException;
import org.jboss.messaging.core.logging.Logger;
import org.jboss.messaging.core.remoting.Packet;
import org.jboss.messaging.core.remoting.PacketDispatcher;
import org.jboss.messaging.core.remoting.RemotingConnection;
import org.jboss.messaging.core.remoting.TransportType;
-import org.jboss.messaging.core.remoting.impl.wireformat.ConsumerFlowCreditMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.PacketImpl;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionAcknowledgeMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionAddDestinationMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionBindingQueryMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionBindingQueryResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCancelMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateBrowserMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateBrowserResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateConsumerMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateConsumerResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateProducerMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateProducerResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateQueueMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionDeleteQueueMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionQueueQueryMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionQueueQueryResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionRemoveDestinationMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXACommitMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAEndMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAForgetMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAGetInDoubtXidsResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAGetTimeoutResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAJoinMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAPrepareMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAResumeMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXARollbackMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXASetTimeoutMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXASetTimeoutResponseMessage;
-import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAStartMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.*;
+import static org.jboss.messaging.tests.util.RandomUtil.randomXid;
import org.jboss.messaging.tests.util.UnitTestCase;
import org.jboss.messaging.util.SimpleString;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+import java.util.Arrays;
+
/**
*
* A ClientSessionImplTest
@@ -1034,7 +995,37 @@
testXAStart(XAResource.TMRESUME, true);
testXAStart(XAResource.TMNOFLAGS, true);
}
-
+
+ public void testCleanUp() throws Exception
+ {
+ ClientConnectionInternal conn = EasyMock.createStrictMock(ClientConnectionInternal.class);
+
+ RemotingConnection rc = EasyMock.createStrictMock(RemotingConnection.class);
+
+ EasyMock.expect(conn.getRemotingConnection()).andReturn(rc);
+
+ SessionCreateQueueMessage request = new SessionCreateQueueMessage(new SimpleString("blah"), new SimpleString("hagshg"),
+ new SimpleString("jhjhs"), false, false);
+
+ final int targetID = 121;
+
+ EasyMock.expect(rc.sendBlocking(targetID, targetID, request)).andReturn(null);
+
+ EasyMock.replay(conn, rc);
+
+ ClientSessionInternal session = new ClientSessionImpl(conn, targetID, false, -1, false, false, false, false);
+
+ session.createQueue(request.getAddress(), request.getQueueName(), request.getFilterString(), request.isDurable(), request.isTemporary());
+
+ EasyMock.verify(conn, rc);
+
+ EasyMock.reset(conn, rc);
+ conn.removeSession(session);
+ EasyMock.replay(conn, rc);
+ session.cleanUp();
+ EasyMock.verify(conn, rc);
+ }
+
public void notXA() throws Exception
{
ClientConnectionInternal conn = EasyMock.createStrictMock(ClientConnectionInternal.class);
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/jms/JBossTemporaryTopicTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/jms/JBossTemporaryTopicTest.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/jms/JBossTemporaryTopicTest.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -6,26 +6,22 @@
*/
package org.jboss.messaging.tests.unit.jms;
-import static org.easymock.EasyMock.createStrictMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-import static org.jboss.messaging.tests.util.RandomUtil.randomString;
-
-import java.util.ArrayList;
-
-import javax.jms.Session;
-
import junit.framework.TestCase;
-
+import org.easymock.EasyMock;
+import static org.easymock.EasyMock.*;
import org.jboss.messaging.core.client.ClientConnection;
import org.jboss.messaging.core.client.ClientSession;
+import org.jboss.messaging.core.client.RemotingSessionListener;
import org.jboss.messaging.core.remoting.impl.wireformat.SessionBindingQueryResponseMessage;
import org.jboss.messaging.jms.JBossTemporaryTopic;
import org.jboss.messaging.jms.client.JBossConnection;
import org.jboss.messaging.jms.client.JBossSession;
+import static org.jboss.messaging.tests.util.RandomUtil.randomString;
import org.jboss.messaging.util.SimpleString;
+import javax.jms.Session;
+import java.util.ArrayList;
+
/**
* @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
*
@@ -49,6 +45,7 @@
String topicName = randomString();
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
replay(clientConn, clientSession);
@@ -71,6 +68,7 @@
JBossTemporaryTopic.JMS_TEMP_TOPIC_ADDRESS_PREFIX + topicName);
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
SessionBindingQueryResponseMessage resp = new SessionBindingQueryResponseMessage(
true, new ArrayList<SimpleString>());
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/jms/client/JBossConnectionTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/jms/client/JBossConnectionTest.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/jms/client/JBossConnectionTest.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -6,31 +6,10 @@
*/
package org.jboss.messaging.tests.unit.jms.client;
-import static org.easymock.EasyMock.createStrictMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-import static org.jboss.messaging.tests.util.RandomUtil.randomString;
-
-import javax.jms.ConnectionConsumer;
-import javax.jms.ConnectionMetaData;
-import javax.jms.Destination;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.Queue;
-import javax.jms.QueueSession;
-import javax.jms.ServerSessionPool;
-import javax.jms.Session;
-import javax.jms.Topic;
-import javax.jms.TopicSession;
-import javax.jms.XAQueueSession;
-import javax.jms.XASession;
-import javax.jms.XATopicSession;
-
import junit.framework.TestCase;
-
import org.easymock.EasyMock;
+import static org.easymock.EasyMock.*;
+import org.easymock.IArgumentMatcher;
import org.jboss.messaging.core.client.ClientConnection;
import org.jboss.messaging.core.client.ClientSession;
import org.jboss.messaging.core.client.RemotingSessionListener;
@@ -38,7 +17,10 @@
import org.jboss.messaging.core.version.Version;
import org.jboss.messaging.jms.client.JBossConnection;
import org.jboss.messaging.tests.util.RandomUtil;
+import static org.jboss.messaging.tests.util.RandomUtil.randomString;
+import javax.jms.*;
+
/**
* @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
*
@@ -60,7 +42,7 @@
public void testGetClientConnection() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
-
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
replay(clientConn);
JBossConnection connection = new JBossConnection(clientConn,
@@ -74,6 +56,7 @@
public void testStart() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
clientConn.start();
expectLastCall().once();
@@ -90,6 +73,7 @@
public void testStartThrowsException() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
clientConn.start();
expectLastCall().andThrow(new MessagingException());
@@ -112,6 +96,7 @@
public void testStop() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
clientConn.stop();
expectLastCall().once();
@@ -128,6 +113,7 @@
public void testStopThrowsException() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
clientConn.stop();
expectLastCall().andThrow(new MessagingException());
@@ -150,6 +136,7 @@
public void testCloseThrowsException() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
clientConn.close();
expectLastCall().andThrow(new MessagingException());
@@ -172,6 +159,7 @@
public void testUsingClosedConnection() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
clientConn.close();
expectLastCall().once();
expect(clientConn.isClosed()).andReturn(true);
@@ -197,6 +185,7 @@
{
String clientID = randomString();
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
expect(clientConn.isClosed()).andReturn(false);
replay(clientConn);
@@ -211,6 +200,7 @@
public void testSetClientID() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
expect(clientConn.isClosed()).andStubReturn(false);
replay(clientConn);
@@ -228,6 +218,7 @@
public void testSetClientIDFailsIfClientIDAlreadyExists() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
expect(clientConn.isClosed()).andStubReturn(false);
replay(clientConn);
@@ -253,6 +244,7 @@
public void testSetClientIDFailsIfConnectionAlreadyUsed() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
expect(clientConn.isClosed()).andStubReturn(false);
clientConn.start();
expectLastCall().once();
@@ -277,6 +269,7 @@
public void testGetMetaData() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
expect(clientConn.isClosed()).andStubReturn(false);
Version version = createStrictMock(Version.class);
expect(clientConn.getServerVersion()).andReturn(version);
@@ -312,7 +305,7 @@
public void testSetNullExceptionListener() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
- clientConn.setRemotingSessionListener(null);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
expectLastCall().once();
ExceptionListener listener = createStrictMock(ExceptionListener.class);
replay(clientConn, listener);
@@ -330,6 +323,7 @@
public void testCreateConnectionConsumerFromDestination() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
Destination destination = createStrictMock(Destination.class);
ServerSessionPool sessionPool = createStrictMock(ServerSessionPool.class);
@@ -347,6 +341,7 @@
public void testCreateConnectionConsumerFromQueue() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
Queue queue = createStrictMock(Queue.class);
ServerSessionPool sessionPool = createStrictMock(ServerSessionPool.class);
@@ -364,6 +359,7 @@
public void testCreateConnectionConsumerFromTopic() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
Topic topic = createStrictMock(Topic.class);
ServerSessionPool sessionPool = createStrictMock(ServerSessionPool.class);
@@ -381,6 +377,7 @@
public void testCreateDurableConnectionConsumerFromQueueConnection() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
Topic topic = createStrictMock(Topic.class);
ServerSessionPool sessionPool = createStrictMock(ServerSessionPool.class);
@@ -404,6 +401,7 @@
public void testCreateSessionThrowsException() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(false, false, false, -1, false, false)).andThrow(new MessagingException());
replay(clientConn, clientSession);
@@ -425,6 +423,7 @@
public void testCreateTransactedQueueSession() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(false, false, false, -1, false, false)).andReturn(clientSession);
replay(clientConn, clientSession);
@@ -441,6 +440,7 @@
public void testCreateAutoAckQueueSession() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(false, true, true, 1)).andReturn(clientSession);
replay(clientConn, clientSession);
@@ -457,6 +457,7 @@
public void testCreateDupsOKQueueSession() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(false, true, true, -1)).andReturn(clientSession);
replay(clientConn, clientSession);
@@ -473,6 +474,7 @@
public void testCreateClientAckQueueSession() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(false, true, false, -1, false, false)).andReturn(clientSession);
replay(clientConn, clientSession);
@@ -489,6 +491,7 @@
public void testCreateQueueSessionWithInvalidAckMode() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
replay(clientConn, clientSession);
@@ -509,6 +512,7 @@
public void testCreateTopicSession() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(false, true, true, 1)).andReturn(clientSession);
replay(clientConn, clientSession);
@@ -525,6 +529,7 @@
public void testCreateTopicSessionWithCachedProducers() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(false, true, true, 1)).andReturn(clientSession);
replay(clientConn, clientSession);
@@ -541,6 +546,7 @@
public void testCreateSession() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(false, true, true, 1)).andReturn(clientSession);
replay(clientConn, clientSession);
@@ -557,6 +563,7 @@
public void testCreateSessionWithCachedProducers() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(false, true, true, 1)).andReturn(clientSession);
replay(clientConn, clientSession);
@@ -573,6 +580,7 @@
public void testCreateXASession() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(true,false, false, -1, false, false)).andReturn(clientSession);
replay(clientConn, clientSession);
@@ -589,6 +597,7 @@
public void testCreateXASessionWithCachedProducers() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(true,false, false, -1, false, true)).andReturn(clientSession);
replay(clientConn, clientSession);
@@ -605,6 +614,7 @@
public void testCreateXAQueueSession() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(true,false, false, -1, false, false)).andReturn(clientSession);
replay(clientConn, clientSession);
@@ -621,6 +631,7 @@
public void testCreateXAQueueSessionWithCachedProducers() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(true,false, false, -1, false, true)).andReturn(clientSession);
replay(clientConn, clientSession);
@@ -637,6 +648,7 @@
public void testCreateXATopicSession() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(true,false, false, -1, false, false)).andReturn(clientSession);
replay(clientConn, clientSession);
@@ -653,6 +665,7 @@
public void testCreateXATopicSessionWithCachedProducers() throws Exception
{
ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ clientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
ClientSession clientSession = createStrictMock(ClientSession.class);
expect(clientConn.createClientSession(true,false, false, -1, false, true)).andReturn(clientSession);
replay(clientConn, clientSession);
@@ -665,6 +678,22 @@
verify(clientConn, clientSession);
}
+
+ public void testResourcesCleanedUp() throws Exception
+ {
+ ClientConnection clientConn = createStrictMock(ClientConnection.class);
+ FailureListenerMatcher failureListenerMatcher = new FailureListenerMatcher();
+ EasyMock.reportMatcher(failureListenerMatcher);
+ clientConn.setRemotingSessionListener(null);
+ clientConn.cleanUp();
+ replay(clientConn);
+
+ JBossConnection connection = new JBossConnection(clientConn,
+ JBossConnection.TYPE_QUEUE_CONNECTION, null, -1);
+ failureListenerMatcher.listener.sessionDestroyed(0, new MessagingException());
+
+ verify(clientConn);
+ }
// Package protected ---------------------------------------------
// Protected -----------------------------------------------------
@@ -672,4 +701,18 @@
// Private -------------------------------------------------------
// Inner classes -------------------------------------------------
+ class FailureListenerMatcher implements IArgumentMatcher
+ {
+ RemotingSessionListener listener = null;
+ public boolean matches(Object o)
+ {
+ listener = (RemotingSessionListener) o;
+ return true;
+ }
+
+ public void appendTo(StringBuffer stringBuffer)
+ {
+ //we dont need this
+ }
+ }
}
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/jms/client/JBossSessionTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/jms/client/JBossSessionTest.java 2008-06-17 09:45:11 UTC (rev 4498)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/jms/client/JBossSessionTest.java 2008-06-17 11:18:59 UTC (rev 4499)
@@ -6,66 +6,26 @@
*/
package org.jboss.messaging.tests.unit.jms.client;
-import static org.easymock.EasyMock.createStrictMock;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.isA;
-import static org.easymock.EasyMock.isNull;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-import static org.jboss.messaging.tests.util.RandomUtil.randomSimpleString;
-import static org.jboss.messaging.tests.util.RandomUtil.randomString;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.jms.BytesMessage;
-import javax.jms.Destination;
-import javax.jms.IllegalStateException;
-import javax.jms.InvalidClientIDException;
-import javax.jms.InvalidDestinationException;
-import javax.jms.JMSException;
-import javax.jms.MapMessage;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageListener;
-import javax.jms.MessageProducer;
-import javax.jms.ObjectMessage;
-import javax.jms.Queue;
-import javax.jms.QueueBrowser;
-import javax.jms.QueueSender;
-import javax.jms.QueueSession;
-import javax.jms.Session;
-import javax.jms.StreamMessage;
-import javax.jms.TemporaryQueue;
-import javax.jms.TemporaryTopic;
-import javax.jms.TextMessage;
-import javax.jms.Topic;
-import javax.jms.TopicPublisher;
-import javax.jms.TopicSession;
-import javax.jms.TransactionInProgressException;
-import javax.transaction.xa.XAResource;
-
import junit.framework.TestCase;
-
-import org.jboss.messaging.core.client.ClientBrowser;
-import org.jboss.messaging.core.client.ClientConnection;
-import org.jboss.messaging.core.client.ClientConsumer;
-import org.jboss.messaging.core.client.ClientProducer;
-import org.jboss.messaging.core.client.ClientSession;
+import org.easymock.EasyMock;
+import static org.easymock.EasyMock.*;
+import org.jboss.messaging.core.client.*;
import org.jboss.messaging.core.exception.MessagingException;
import org.jboss.messaging.core.remoting.impl.wireformat.SessionBindingQueryResponseMessage;
import org.jboss.messaging.core.remoting.impl.wireformat.SessionQueueQueryResponseMessage;
-import org.jboss.messaging.jms.JBossDestination;
-import org.jboss.messaging.jms.JBossQueue;
-import org.jboss.messaging.jms.JBossTemporaryQueue;
-import org.jboss.messaging.jms.JBossTemporaryTopic;
-import org.jboss.messaging.jms.JBossTopic;
+import org.jboss.messaging.jms.*;
import org.jboss.messaging.jms.client.JBossConnection;
import org.jboss.messaging.jms.client.JBossSession;
+import static org.jboss.messaging.tests.util.RandomUtil.randomSimpleString;
+import static org.jboss.messaging.tests.util.RandomUtil.randomString;
import org.jboss.messaging.util.SimpleString;
+import javax.jms.*;
+import javax.jms.IllegalStateException;
+import javax.transaction.xa.XAResource;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
*
@@ -93,6 +53,7 @@
super.setUp();
mockClientConn = createStrictMock(ClientConnection.class);
+ mockClientConn.setRemotingSessionListener((RemotingSessionListener) EasyMock.anyObject());
mockClientSession = createStrictMock(ClientSession.class);
}
More information about the jboss-cvs-commits
mailing list