sebb 2004/05/29 17:30:52 Modified: src/functions/org/apache/jmeter/functions Tag: rel-2_0 RegexFunction.java Log: Bug 29202: synchronized execute(); made most instance fields into method fields Revision Changes Path No revision No revision 1.20.2.2 +23 -28 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.20.2.1 retrieving revision 1.20.2.2 diff -u -r1.20.2.1 -r1.20.2.2 --- RegexFunction.java 20 May 2004 12:56:26 -0000 1.20.2.1 +++ RegexFunction.java 30 May 2004 00:30:51 -0000 1.20.2.2 @@ -42,9 +42,6 @@ import org.apache.oro.text.regex.Perl5Matcher; import org.apache.oro.text.regex.Util; -/** - * @author mstover - */ public class RegexFunction extends AbstractFunction implements Serializable { transient private static Logger log = LoggingManager.getLoggerForClass(); @@ -52,16 +49,14 @@ public static final String RAND = "RAND"; public static final String KEY = "__regexFunction"; - Object[] values; + private Object[] values;//Parameters are stored here + private static Random rand = new Random(); - private static List desc = new LinkedList(); - Pattern searchPattern; - Object[] template; - String valueIndex, defaultValue, between; + private static final List desc = new LinkedList(); + private static PatternCacheLRU patternCache = new PatternCacheLRU(1000, new Perl5Compiler()); - Pattern templatePattern; - private String name; + private Pattern templatePattern;// initialised to the regex \$(\d+)\$ private static ThreadLocal localMatcher = new ThreadLocal() { @@ -82,18 +77,21 @@ public RegexFunction() { - valueIndex = between = name = ""; templatePattern = patternCache.getPattern("\\$(\\d+)\\$", Perl5Compiler.READ_ONLY_MASK); } - public String execute(SampleResult previousResult, Sampler currentSampler) + public synchronized String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException { + String valueIndex="", defaultValue="", between=""; + String name=""; + Pattern searchPattern; + Object [] tmplt; try { searchPattern = patternCache.getPattern(((CompoundVariable) values[0]).execute(), Perl5Compiler.READ_ONLY_MASK); - generateTemplate(((CompoundVariable) values[1]).execute()); + tmplt = generateTemplate(((CompoundVariable) values[1]).execute()); if (values.length > 2) { @@ -181,7 +179,7 @@ { first = false; } - value.append(generateResult((MatchResult) it.next())); + value.append(generateResult((MatchResult) it.next(),name, tmplt)); } return value.toString(); } @@ -190,7 +188,7 @@ MatchResult result = (MatchResult) collectAllMatches.get( rand.nextInt(collectAllMatches.size())); - return generateResult(result); + return generateResult(result,name, tmplt); } else { @@ -198,7 +196,7 @@ { int index = Integer.parseInt(valueIndex) - 1; MatchResult result = (MatchResult) collectAllMatches.get(index); - return generateResult(result); + return generateResult(result,name, tmplt); } catch (NumberFormatException e) { @@ -206,7 +204,7 @@ MatchResult result = (MatchResult) collectAllMatches.get( (int) (collectAllMatches.size() * ratio + .5) - 1); - return generateResult(result); + return generateResult(result,name, tmplt); } catch (IndexOutOfBoundsException e) { @@ -216,14 +214,14 @@ } - private void saveGroups(MatchResult result) + private void saveGroups(MatchResult result, String namep) { if (result != null) { JMeterVariables vars = getVariables(); for (int x = 0; x < result.groups(); x++) { - vars.put(name + "_g" + x, result.group(x)); + vars.put(namep + "_g" + x, result.group(x)); } } } @@ -233,9 +231,9 @@ return desc; } - private String generateResult(MatchResult match) + private String generateResult(MatchResult match, String namep, Object[] template) { - saveGroups(match); + saveGroups(match, namep); StringBuffer result = new StringBuffer(); for (int a = 0; a < template.length; a++) { @@ -249,7 +247,7 @@ } } JMeterVariables vars = getVariables(); - vars.put(name, result.toString()); + vars.put(namep, result.toString()); return result.toString(); } @@ -266,12 +264,9 @@ { throw new InvalidVariableException(); } - - // defaultValue = URLDecoder.decode(parameters); - defaultValue = ""; } - private void generateTemplate(String rawTemplate) + private Object[] generateTemplate(String rawTemplate) { List pieces = new ArrayList(); List combined = new LinkedList(); @@ -304,7 +299,7 @@ { combined.add(new Integer(matcher.getMatch().group(1))); } - template = combined.toArray(); + return combined.toArray(); } private boolean isFirstElementGroup(String rawData)
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]