Author: sebb
Date: Wed Sep 14 13:55:18 2011
New Revision: 1170627

URL: http://svn.apache.org/viewvc?rev=1170627&view=rev
Log:
Bug 39219 - HTTP Server: You can't stop it after File->Open

Added:
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/Stoppable.java   (with 
props)
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/StopStoppables.java  
 (with props)
Modified:
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/GuiPackage.java
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/ActionNames.java
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Close.java
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Load.java
    
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HttpMirrorControl.java
    
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HttpMirrorServer.java
    
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Daemon.java
    
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
    jakarta/jmeter/trunk/xdocs/changes.xml

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/GuiPackage.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/GuiPackage.java?rev=1170627&r1=1170626&r2=1170627&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/GuiPackage.java 
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/GuiPackage.java Wed Sep 
14 13:55:18 2011
@@ -22,7 +22,11 @@ import java.awt.Component;
 import java.awt.event.MouseEvent;
 import java.beans.Introspector;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 
 import javax.swing.JOptionPane;
@@ -113,7 +117,7 @@ public final class GuiPackage implements
     /**
      * Retrieve the singleton GuiPackage instance.
      *
-     * @return the GuiPackage instance
+     * @return the GuiPackage instance (may be null, e.g in non-Gui mode)
      */
     public static GuiPackage getInstance() {
         return guiPack;
@@ -579,6 +583,8 @@ public final class GuiPackage implements
 
     private String testPlanFile;
 
+    private final List<Stoppable> stoppables = 
Collections.synchronizedList(new ArrayList<Stoppable>());
+
     /**
      * Sets the filepath of the current test plan. It's shown in the main frame
      * title and used on saving.
@@ -646,4 +652,36 @@ public final class GuiPackage implements
         });
 
     }
+
+    /**
+     * Unregister stoppable
+     * @param stoppable Stoppable
+     */
+    public void unregister(Stoppable stoppable) {
+        for (Iterator<Stoppable> iterator = stoppables .iterator(); 
iterator.hasNext();) {
+            Stoppable stopable = iterator.next();
+            if(stopable == stoppable)
+            {
+                iterator.remove();
+            }
+        }
+    }
+    
+    /**
+     * Register process to stop on reload
+     * @param stoppable
+     */
+    public void register(Stoppable stoppable) {
+        stoppables.add(stoppable);
+    }
+
+    /**
+     * 
+     * @return List<IStoppable> Copy of IStoppable
+     */
+    public List<Stoppable> getStoppables() {
+        ArrayList<Stoppable> list = new ArrayList<Stoppable>();
+        list.addAll(stoppables);
+        return list;
+    }
 }
\ No newline at end of file

Added: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/Stoppable.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/Stoppable.java?rev=1170627&view=auto
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/Stoppable.java (added)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/Stoppable.java Wed Sep 
14 13:55:18 2011
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.jmeter.gui;
+
+/**
+ * Interface that identifies processes to stop on close or load of new project 
files
+ */
+public interface Stoppable {
+
+    /**
+     * Stop server
+     */
+    public void stopServer();
+}

Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/Stoppable.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/Stoppable.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/ActionNames.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/ActionNames.java?rev=1170627&r1=1170626&r2=1170627&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/ActionNames.java 
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/ActionNames.java 
Wed Sep 14 13:55:18 2011
@@ -81,6 +81,7 @@ public class ActionNames {
     public static final String SUB_TREE_MERGED  = "sub_tree_merged"; // 
$NON-NLS-1$
     public static final String SUB_TREE_SAVED   = "sub_tree_saved"; // 
$NON-NLS-1$
     public static final String WHAT_CLASS       = "what_class"; // $NON-NLS-1$
+    public static final String STOP_THREAD       = "stop_thread"; // 
$NON-NLS-1$
 
     // Prevent instantiation
     private ActionNames(){

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Close.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Close.java?rev=1170627&r1=1170626&r2=1170627&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Close.java 
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Close.java Wed 
Sep 14 13:55:18 2011
@@ -87,7 +87,7 @@ public class Close implements Command {
                 return false; // Don't clear the plan
             }
         }
-
+        ActionRouter.getInstance().doActionNow(new ActionEvent(e.getSource(), 
e.getID(), ActionNames.STOP_THREAD));
         closeProject(e);
         return true;
     }

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Load.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Load.java?rev=1170627&r1=1170626&r2=1170627&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Load.java 
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Load.java Wed 
Sep 14 13:55:18 2011
@@ -91,6 +91,8 @@ public class Load implements Command {
     }
 
     static void loadProjectFile(ActionEvent e, File f, boolean merging) {
+        ActionRouter.getInstance().doActionNow(new ActionEvent(e.getSource(), 
e.getID(), ActionNames.STOP_THREAD));
+
         GuiPackage guiPackage = GuiPackage.getInstance();
         InputStream reader = null;
         try {

Added: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/StopStoppables.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/StopStoppables.java?rev=1170627&view=auto
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/StopStoppables.java 
(added)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/StopStoppables.java 
Wed Sep 14 13:55:18 2011
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.jmeter.gui.action;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.jmeter.gui.GuiPackage;
+import org.apache.jmeter.gui.Stoppable;
+
+/**
+ * Stops stopables (Proxy, Mirror)
+ * @since 2.5.1
+ */
+public class StopStoppables extends AbstractAction implements ActionListener {
+    private static final Set<String> commands = new HashSet<String>();
+
+    static {
+        commands.add(ActionNames.STOP_THREAD);
+    }
+    
+    /**
+     * 
+     */
+    public StopStoppables() {
+        super();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jmeter.gui.action.AbstractAction#getActionNames()
+     */
+    @Override
+    public Set<String> getActionNames() {
+        return commands;
+    }
+
+    /* (non-Javadoc)
+     * @see 
java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+     */
+    public void actionPerformed(ActionEvent e) {
+        
+    }
+
+    /* (non-Javadoc)
+     * @see 
org.apache.jmeter.gui.action.AbstractAction#doAction(java.awt.event.ActionEvent)
+     */
+    @Override
+    public void doAction(ActionEvent e) {
+        GuiPackage instance = GuiPackage.getInstance();
+        List<Stoppable> stopables = instance.getStoppables();
+        for (Stoppable element : stopables) {
+            instance.unregister(element);
+            element.stopServer();
+        }
+    }
+}

Propchange: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/StopStoppables.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/StopStoppables.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HttpMirrorControl.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HttpMirrorControl.java?rev=1170627&r1=1170626&r2=1170627&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HttpMirrorControl.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HttpMirrorControl.java
 Wed Sep 14 13:55:18 2011
@@ -18,6 +18,7 @@
 
 package org.apache.jmeter.protocol.http.control;
 
+import org.apache.jmeter.gui.GuiPackage;
 import org.apache.jmeter.testelement.AbstractTestElement;
 import org.apache.jmeter.testelement.property.IntegerProperty;
 
@@ -75,11 +76,19 @@ public class HttpMirrorControl extends A
     public void startHttpMirror() {
         server = new HttpMirrorServer(getPort());
         server.start();
+        GuiPackage instance = GuiPackage.getInstance();
+        if (instance != null) {
+            instance.register(server);
+        }
     }
 
     public void stopHttpMirror() {
         if (server != null) {
             server.stopServer();
+            GuiPackage instance = GuiPackage.getInstance();
+            if (instance != null) {
+                instance.unregister(server);
+            }
             try {
                 server.join(1000); // wait for server to stop
             } catch (InterruptedException e) {

Modified: 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HttpMirrorServer.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HttpMirrorServer.java?rev=1170627&r1=1170626&r2=1170627&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HttpMirrorServer.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/HttpMirrorServer.java
 Wed Sep 14 13:55:18 2011
@@ -22,6 +22,7 @@ import java.io.InterruptedIOException;
 import java.net.ServerSocket;
 import java.net.Socket;
 
+import org.apache.jmeter.gui.Stoppable;
 import org.apache.jorphan.logging.LoggingManager;
 import org.apache.jorphan.util.JOrphanUtils;
 import org.apache.log.Logger;
@@ -32,7 +33,7 @@ import org.apache.log.Logger;
  * For each client request, creates a thread to handle the request.
  *
  */
-public class HttpMirrorServer extends Thread {
+public class HttpMirrorServer extends Thread implements Stoppable {
     private static final Logger log = LoggingManager.getLoggerForClass();
 
     /**

Modified: 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Daemon.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Daemon.java?rev=1170627&r1=1170626&r2=1170627&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Daemon.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Daemon.java
 Wed Sep 14 13:55:18 2011
@@ -26,6 +26,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.jmeter.gui.Stoppable;
 import org.apache.jorphan.logging.LoggingManager;
 import org.apache.jorphan.util.JOrphanUtils;
 import org.apache.log.Logger;
@@ -36,7 +37,7 @@ import org.apache.log.Logger;
  * request.
  *
  */
-public class Daemon extends Thread {
+public class Daemon extends Thread implements Stoppable {
 
     private static final Logger log = LoggingManager.getLoggerForClass();
 

Modified: 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java?rev=1170627&r1=1170626&r2=1170627&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
 (original)
+++ 
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
 Wed Sep 14 13:55:18 2011
@@ -340,6 +340,7 @@ public class ProxyControl extends Generi
         try {
             server = new Daemon(getPort(), this);
             server.start();
+            GuiPackage.getInstance().register(server);
         } catch (IOException e) {
             log.error("Could not create Proxy daemon", e);
             throw e;
@@ -420,6 +421,7 @@ public class ProxyControl extends Generi
     public void stopProxy() {
         if (server != null) {
             server.stopServer();
+            GuiPackage.getInstance().unregister(server);
             try {
                 server.join(1000); // wait for server to stop
             } catch (InterruptedException e) {

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1170627&r1=1170626&r2=1170627&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Wed Sep 14 13:55:18 2011
@@ -73,6 +73,7 @@ This can be overridden by setting the JM
 <li>Bug 51750 - Retrieve all embedded resources doesn't follow IFRAME</li>
 <li>Change the default so the HttpClient 4 sampler does not retry</li>
 <li>Bug 51752 - HTTP Cache is broken when using "Retrieve all embedded 
resources" with concurrent pool</li>
+<li>Bug 39219 - HTTP Server: You can't stop it after File->Open</li>
 </ul>
 
 <h3>Other Samplers</h3>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to