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 js...@apache.org on 2004/02/09 19:25:07 UTC
cvs commit: jakarta-jmeter/src/functions/org/apache/jmeter/functions RegexFunction.java
jsalvata 2004/02/09 10:25:07
Modified: src/functions/org/apache/jmeter/functions RegexFunction.java
Log:
* Making thread-safe by using READ_ONLY_MASK when compiling regexps.
* Using a pattern cache for better performance.
Revision Changes Path
1.19 +7 -27 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.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- RegexFunction.java 23 Jan 2004 00:10:05 -0000 1.18
+++ RegexFunction.java 9 Feb 2004 18:25:07 -0000 1.19
@@ -15,10 +15,9 @@
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;
-import org.apache.oro.text.regex.MalformedPatternException;
+import org.apache.oro.text.PatternCacheLRU;
import org.apache.oro.text.regex.MatchResult;
import org.apache.oro.text.regex.Pattern;
-import org.apache.oro.text.regex.PatternCompiler;
import org.apache.oro.text.regex.PatternMatcher;
import org.apache.oro.text.regex.PatternMatcherInput;
import org.apache.oro.text.regex.Perl5Compiler;
@@ -41,7 +40,8 @@
Pattern searchPattern;
Object[] template;
String valueIndex, defaultValue, between;
- transient PatternCompiler compiler = new Perl5Compiler();
+ private static PatternCacheLRU patternCache =
+ new PatternCacheLRU(1000, new Perl5Compiler());
Pattern templatePattern;
private String name;
@@ -65,14 +65,7 @@
public RegexFunction()
{
valueIndex = between = name = "";
- try
- {
- templatePattern = compiler.compile("\\$(\\d+)\\$", Perl5Compiler.READ_ONLY_MASK);
- }
- catch (MalformedPatternException e)
- {
- log.error("", e);
- }
+ templatePattern = patternCache.getPattern("\\$(\\d+)\\$", Perl5Compiler.READ_ONLY_MASK);
}
public String execute(SampleResult previousResult, Sampler currentSampler)
@@ -81,7 +74,7 @@
try
{
searchPattern =
- compiler.compile(((CompoundVariable) values[0]).execute());
+ patternCache.getPattern(((CompoundVariable) values[0]).execute(), Perl5Compiler.READ_ONLY_MASK);
generateTemplate(((CompoundVariable) values[1]).execute());
if (values.length > 2)
@@ -112,11 +105,6 @@
name = ((CompoundVariable) values[values.length - 1]).execute();
}
}
- catch (MalformedPatternException e)
- {
- log.error("", e);
- throw new InvalidVariableException("Bad regex pattern");
- }
catch (Exception e)
{
throw new InvalidVariableException(e.getMessage());
@@ -298,16 +286,8 @@
private boolean isFirstElementGroup(String rawData)
{
- try
- {
- Pattern pattern = compiler.compile("^\\$\\d+\\$");
- return new Perl5Matcher().contains(rawData, pattern);
- }
- catch (MalformedPatternException e)
- {
- log.error("", e);
- return false;
- }
+ Pattern pattern = patternCache.getPattern("^\\$\\d+\\$", Perl5Compiler.READ_ONLY_MASK);
+ return new Perl5Matcher().contains(rawData, pattern);
}
/*
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org