Author: chirino
Date: Wed Feb  8 12:23:08 2006
New Revision: 376047

URL: http://svn.apache.org/viewcvs?rev=376047&view=rev
Log:
Added better proxy connector cleanup code.

Modified:
    
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/proxy/ProxyConnector.java

Modified: 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/proxy/ProxyConnector.java
URL: 
http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/proxy/ProxyConnector.java?rev=376047&r1=376046&r2=376047&view=diff
==============================================================================
--- 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/proxy/ProxyConnector.java
 (original)
+++ 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/proxy/ProxyConnector.java
 Wed Feb  8 12:23:08 2006
@@ -19,16 +19,21 @@
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.Iterator;
 
 import org.apache.activemq.Service;
 import org.apache.activemq.transport.CompositeTransport;
 import org.apache.activemq.transport.Transport;
 import org.apache.activemq.transport.TransportAcceptListener;
 import org.apache.activemq.transport.TransportFactory;
+import org.apache.activemq.transport.TransportFilter;
 import org.apache.activemq.transport.TransportServer;
+import org.apache.activemq.util.ServiceStopper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArrayList;
+
 /**
  * @org.xbean.XBean
  * 
@@ -41,6 +46,8 @@
     private URI bind;
     private URI remote;
     private URI localUri;
+    
+    CopyOnWriteArrayList connections = new CopyOnWriteArrayList();
        
     public void start() throws Exception {
         
@@ -49,7 +56,8 @@
                 try {
                     Transport remoteTransport = createRemoteTransport();
                     ProxyConnection connection = new 
ProxyConnection(localTransport, remoteTransport);
-                    connection.start();
+                    connections.add(connection);
+                    connection.start();                    
                 }
                 catch (Exception e) {
                     onAcceptError(e);
@@ -65,9 +73,15 @@
     }
 
     public void stop() throws Exception {
+       ServiceStopper ss = new ServiceStopper();
         if( this.server!=null ) {
-            this.server.stop();
+            ss.stop(this.server);
         }
+        for (Iterator iter = connections.iterator(); iter.hasNext();) {
+          System.out.println("Connector stopped: Stopping proxy.");
+                  ss.stop((Service) iter.next());
+               }
+        ss.throwFirstException();
     }
     
     // Properties
@@ -121,6 +135,15 @@
         if( ct !=null && localUri!=null ) {
             ct.add(new URI[]{localUri});
         }
+        
+        // Add a transport filter so that can track the transport life cycle
+        transport = new TransportFilter(transport) {
+               public void stop() throws Exception {
+                       System.out.println("Stopping proxy.");
+                       super.stop();
+                       connections.remove(this);
+               }
+        };
         return transport;
     }
 


Reply via email to