mstover1 2003/01/31 10:25:10
Modified: src/core/org/apache/jmeter/gui MainFrame.java
src/functions/org/apache/jmeter/functions RegexFunction.java
src/protocol/http/org/apache/jmeter/protocol/http/parser
HtmlParser.java
src/protocol/http/org/apache/jmeter/protocol/http/proxy
ProxyControl.java
src/protocol/http/org/apache/jmeter/protocol/http/proxy/gui
ProxyControlGui.java
Log:
Making HTMLParser and RegexFunction thread safe in their use of ORO's regular
expression classes
Revision Changes Path
1.8 +10 -5 jakarta-jmeter/src/core/org/apache/jmeter/gui/MainFrame.java
Index: MainFrame.java
===================================================================
RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/MainFrame.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- MainFrame.java 31 Dec 2002 18:05:54 -0000 1.7
+++ MainFrame.java 31 Jan 2003 18:25:09 -0000 1.8
@@ -98,6 +98,8 @@
import org.apache.jmeter.testelement.TestListener;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.gui.ComponentUtil;
+import org.apache.log.Hierarchy;
+import org.apache.log.Logger;
/****************************************
* Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
*
@@ -108,6 +110,8 @@
public class MainFrame extends JFrame implements TestListener,Remoteable
{
+ transient private static Logger log =
+ Hierarchy.getDefaultHierarchy().getLoggerFor("jmeter.gui");
JPanel all, mainPanel;
Box toolPanel;
JScrollPane treePanel;
@@ -143,7 +147,7 @@
this.treeModel = treeModel;
GuiPackage.getInstance().setMainFrame(this);
init();
- this.setDefaultCloseOperation(this.DO_NOTHING_ON_CLOSE);
+ this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
}
public MainFrame()
@@ -455,4 +459,5 @@
this, event.getID(), "exit"));
}
}
+
}
1.9 +9 -1
jakarta-jmeter/src/functions/org/apache/jmeter/functions/RegexFunction.java
Index: RegexFunction.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/functions/org/apache/jmeter/functions/RegexFunction.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- RegexFunction.java 29 Jan 2003 16:02:28 -0000 1.8
+++ RegexFunction.java 31 Jan 2003 18:25:10 -0000 1.9
@@ -48,6 +48,14 @@
transient PatternCompiler compiler = new Perl5Compiler();
Pattern templatePattern;
private String name;
+ private static ThreadLocal localMatcher =
+ new ThreadLocal()
+ {
+ protected Object initialValue()
+ {
+ return new Perl5Matcher();
+ }
+ };
static
{
@@ -81,7 +89,7 @@
}
List collectAllMatches = new ArrayList();
try {
- PatternMatcher matcher = new Perl5Matcher();
+ PatternMatcher matcher = (PatternMatcher)localMatcher.get();
String responseText = new
String(previousResult.getResponseData());
PatternMatcherInput input = new
PatternMatcherInput(responseText);
while(matcher.contains(input,searchPattern))
1.5 +26 -11
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/parser/HtmlParser.java
Index: HtmlParser.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/parser/HtmlParser.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- HtmlParser.java 29 Aug 2002 18:17:41 -0000 1.4
+++ HtmlParser.java 31 Jan 2003 18:25:10 -0000 1.5
@@ -69,6 +69,7 @@
import org.apache.jmeter.protocol.http.sampler.HTTPSampler;
import org.apache.log.Hierarchy;
import org.apache.log.Logger;
+import org.apache.oro.text.PatternCacheLRU;
import org.apache.oro.text.regex.MalformedPatternException;
import org.apache.oro.text.regex.Perl5Compiler;
import org.apache.oro.text.regex.Perl5Matcher;
@@ -103,9 +104,18 @@
private int compilerOptions = Perl5Compiler.CASE_INSENSITIVE_MASK |
Perl5Compiler.MULTILINE_MASK | Perl5Compiler.READ_ONLY_MASK;
- private static transient Perl5Compiler compiler = new Perl5Compiler();
+ private static PatternCacheLRU patternCache =
+ new PatternCacheLRU(1000, new Perl5Compiler());
+
+ private static ThreadLocal localMatcher =
+ new ThreadLocal()
+ {
+ protected Object initialValue()
+ {
+ return new Perl5Matcher();
+ }
+ };
- private static transient Perl5Matcher matcher = new Perl5Matcher();
/****************************************
* Constructor for the HtmlParser object
@@ -127,7 +137,7 @@
HTTPSampler config) throws MalformedPatternException
{
boolean ok = true;
-
+ Perl5Matcher matcher = (Perl5Matcher)localMatcher.get();
Iterator iter = config.getArguments().iterator();
// In JDK1.2, URLDecoder.decode has Exception in its throws clause.
However, it
@@ -151,7 +161,8 @@
Argument item = (Argument)iter.next();
if(query.indexOf(item.getName()+"=") == -1)
{
- if(!(ok = ok && matcher.contains(query,
compiler.compile(item.getName()))))
+ if(!(ok = ok && matcher.contains(query,
+
patternCache.getPattern(item.getName(), Perl5Compiler.READ_ONLY_MASK))))
{
return false;
}
@@ -162,15 +173,16 @@
!newLink.getDomain().equals(config.getDomain()))
{
if(!(ok = ok && matcher.matches(newLink.getDomain(),
- compiler.compile(config.getDomain()))))
+ patternCache.getPattern(config.getDomain(),
Perl5Compiler.READ_ONLY_MASK))))
return false;
}
if(!newLink.getPath().equals(config.getPath()) &&
!matcher.matches(newLink.getPath(),
- compiler.compile("[/]*" + config.getPath())))
+ patternCache.getPattern("[/]*" + config.getPath(),
Perl5Compiler.READ_ONLY_MASK)))
return false;
- if(!(ok = ok && matcher.matches(newLink.getProtocol(),
compiler.compile(config.getProtocol()))))
+ if(!(ok = ok && matcher.matches(newLink.getProtocol(),
+ patternCache.getPattern(config.getProtocol(),
Perl5Compiler.READ_ONLY_MASK))))
return false;
return ok;
@@ -186,10 +198,13 @@
***************************************/
public static synchronized boolean isArgumentMatched(Argument arg, Argument
patternArg) throws MalformedPatternException
{
+ Perl5Matcher matcher = (Perl5Matcher)localMatcher.get();
return (arg.getName().equals(patternArg.getName()) ||
- matcher.matches(arg.getName(),
compiler.compile(patternArg.getName()))) &&
+ matcher.matches(arg.getName(),
patternCache.getPattern(patternArg.getName(),
+ Perl5Compiler.READ_ONLY_MASK))) &&
(arg.getValue().equals(patternArg.getValue()) ||
- matcher.matches((String)arg.getValue(),
compiler.compile((String)patternArg.getValue())));
+ matcher.matches((String)arg.getValue(),
patternCache.getPattern((String)patternArg.getValue(),
+ Perl5Compiler.READ_ONLY_MASK)));
}
/****************************************
1.10 +2 -12
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
Index: ProxyControl.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ProxyControl.java 30 Jan 2003 13:56:21 -0000 1.9
+++ ProxyControl.java 31 Jan 2003 18:25:10 -0000 1.10
@@ -171,17 +171,7 @@
{
return org.apache.jmeter.protocol.http.proxy.gui.ProxyControlGui.class;
}
- /************************************************************
- * !ToDo (Method description)
- *
- *@return !ToDo (Return description)
- ***********************************************************/
- public Object clone()
- {
- ProxyControl clone = new ProxyControl();
- configureClone(clone);
- return clone;
- }
+
/************************************************************
* !ToDo
*
1.5 +13 -3
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/gui/ProxyControlGui.java
Index: ProxyControlGui.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/gui/ProxyControlGui.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ProxyControlGui.java 31 Dec 2002 18:05:54 -0000 1.4
+++ ProxyControlGui.java 31 Jan 2003 18:25:10 -0000 1.5
@@ -158,12 +158,12 @@
return element;
}
- private void setIncludeListInProxyControl(ProxyControl element) {
+ protected void setIncludeListInProxyControl(ProxyControl element) {
List includeList = getDataList(includeModel,INCLUDE_COL);
element.setIncludeList(includeList);
}
- private void setExcludeListInProxyControl(ProxyControl element)
+ protected void setExcludeListInProxyControl(ProxyControl element)
{
List excludeList = getDataList(excludeModel,EXCLUDE_COL);
element.setExcludeList(excludeList);
@@ -509,4 +509,14 @@
{
namePanel.setNode(node);
}
+
+ /**
+ * Returns the portField.
+ * @return JTextField
+ */
+ protected JTextField getPortField()
+ {
+ return portField;
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]