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]

Reply via email to