You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2006/05/18 23:59:24 UTC
svn commit: r407643 -
/jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/control/IncludeController.java
Author: sebb
Date: Thu May 18 14:59:24 2006
New Revision: 407643
URL: http://svn.apache.org/viewvc?rev=407643&view=rev
Log:
Bug 39599 - ConcurrentModificationException
Remove disabled items from loaded tree before returning it
Modified:
jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/control/IncludeController.java
Modified: jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/control/IncludeController.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/control/IncludeController.java?rev=407643&r1=407642&r2=407643&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/control/IncludeController.java (original)
+++ jakarta/jmeter/branches/rel-2-1/src/components/org/apache/jmeter/control/IncludeController.java Thu May 18 14:59:24 2006
@@ -19,15 +19,16 @@
import java.io.FileInputStream;
import java.io.FileNotFoundException;
-import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
+import java.util.LinkedList;
import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.collections.HashTree;
import org.apache.jorphan.logging.LoggingManager;
+import org.apache.jorphan.util.JOrphanUtils;
import org.apache.log.Logger;
/**
@@ -39,12 +40,13 @@
public class IncludeController extends GenericController implements ReplaceableController {
private static final Logger log = LoggingManager.getLoggerForClass();
- public static final String INCLUDE_PATH = "IncludeController.includepath";
+ private static final String INCLUDE_PATH = "IncludeController.includepath"; //$NON-NLS-1$
- private static final String prefix;
- static {
- prefix=JMeterUtils.getPropDefault("includecontroller.prefix", "");
- }
+ private static final String prefix =
+ JMeterUtils.getPropDefault(
+ "includecontroller.prefix", //$NON-NLS-1$
+ ""); //$NON-NLS-1$
+
private HashTree SUBTREE = null;
private TestElement SUB = null;
@@ -58,7 +60,9 @@
}
public Object clone() {
- this.loadIncludedElements();
+ // TODO - fix so that this is only called once per test, instead of at every clone
+ // Perhaps save previous filename, and only load if it has changed?
+ this.SUBTREE = this.loadIncludedElements();
IncludeController clone = (IncludeController) super.clone();
clone.setIncludePath(this.getIncludePath());
if (this.SUBTREE != null) {
@@ -107,13 +111,15 @@
// only try to load the JMX test plan if there is one
final String includePath = getIncludePath();
InputStream reader = null;
+ HashTree tree = null;
if (includePath != null && includePath.length() > 0) {
try {
String file=prefix+includePath;
log.info("loadIncludedElements -- try to load included module: "+file);
reader = new FileInputStream(file);
- this.SUBTREE = SaveService.loadTree(reader);
- return this.SUBTREE;
+ tree = SaveService.loadTree(reader);
+ removeDisabledItems(tree);
+ return tree;
} catch (NoClassDefFoundError ex) // Allow for missing optional jars
{
String msg = ex.getMessage();
@@ -135,15 +141,24 @@
log.warn("Unexpected error", ex);
}
finally{
- if (reader!=null){
- try {
- reader.close();
- } catch (IOException e) {
- }
- }
+ JOrphanUtils.closeQuietly(reader);
+ }
+ }
+ return tree;
+ }
+
+ private void removeDisabledItems(HashTree tree) {
+ Iterator iter = new LinkedList(tree.list()).iterator();
+ while (iter.hasNext()) {
+ TestElement item = (TestElement) iter.next();
+ if (!item.isEnabled()) {
+ //log.info("Removing "+item.toString());
+ tree.remove(item);
+ } else {
+ //log.info("Keeping "+item.toString());
+ removeDisabledItems(tree.getTree(item));// Recursive call
}
}
- return this.SUBTREE;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org