[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