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]