You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ed...@apache.org on 2005/08/11 19:51:41 UTC

svn commit: r231491 - in /incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain: ./ src/java/org/apache/jmeter/functions/ src/java/org/apache/jmeter/protocol/java/sampler/

Author: edgarpoce
Date: Thu Aug 11 10:51:16 2005
New Revision: 231491

URL: http://svn.apache.org/viewcvs?rev=231491&view=rev
Log:
- Modified. the jmeter thread context is passed to the commands as the Chain Context.
- Added. Jmeter Jexl Function.

Added:
    incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/functions/
    incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/functions/Jexl.java   (with props)
    incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/JMeterContextAdapter.java   (with props)
Removed:
    incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/NOTICE.txt
Modified:
    incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/README.txt
    incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/project.xml
    incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/ChainSampler.java

Modified: incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/README.txt
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/README.txt?rev=231491&r1=231490&r2=231491&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/README.txt (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/README.txt Thu Aug 11 10:51:16 2005
@@ -1,16 +1,21 @@
 Overview
 -----------------
-JMeter plugin for running Commons Chain commands.
-It includes the following classes:
- - org.apache.jmeter.protocol.java.config.gui.ChainConfigGui
- - org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui
- - org.apache.jmeter.protocol.java.sampler.ChainSampler
- - org.apache.jmeter.protocol.java.test.SleepChainTest
+
+This project contains:
+
+1. JMeter plugin for running Commons Chain commands.
+2. JMeter function backed by Commons Jexl. See javadocs. 
 
 Dependencies not included in JMeter
 -----------------
+Add the following libraries to /lib
+
 - commons-chain 
 - commons-beanutils
+- commons-jexl
+- commons-collections. Jackrabbit uses a newer version of commons Collections.
+  Replace the jar included in JMeter with collections 3.1
+
  
 Installation
 -----------------

Modified: incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/project.xml
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/project.xml?rev=231491&r1=231490&r2=231491&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/project.xml (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/project.xml Thu Aug 11 10:51:16 2005
@@ -68,6 +68,12 @@
       <type>jar</type>
       <url>http://avalon.apache.org</url>
     </dependency>
+    <dependency>
+      <groupId>commons-jexl</groupId>
+      <artifactId>commons-jexl</artifactId>
+      <version>1.0</version>
+      <type>jar</type>
+    </dependency>
   </dependencies>
   <build>
     <sourceDirectory>src/java</sourceDirectory>

Added: incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/functions/Jexl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/functions/Jexl.java?rev=231491&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/functions/Jexl.java (added)
+++ incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/functions/Jexl.java Thu Aug 11 10:51:16 2005
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ *                     as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jmeter.functions;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.commons.jexl.Expression;
+import org.apache.commons.jexl.ExpressionFactory;
+import org.apache.commons.jexl.JexlContext;
+import org.apache.commons.jexl.JexlHelper;
+import org.apache.jmeter.engine.util.CompoundVariable;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.jmeter.samplers.Sampler;
+import org.apache.jorphan.logging.LoggingManager;
+import org.apache.log.Logger;
+
+/**
+ * A function which understands Commons JEXL. <br>
+ * 
+ * The following variables are set before the script is executed: <br>
+ * <ul>
+ * <li>ctx - the current JMeter context variable</li>
+ * <li>vars - the current JMeter variables</li>
+ * <li>threadName - the threadName</li>
+ * <li>sampler - the current Sampler, if any</li>
+ * <li>sampleResult - the current SampleResult, if any</li>
+ * </ul>
+ */
+public class Jexl extends AbstractFunction implements Serializable
+{
+    /**
+     * <code>serialVersionUID</code>
+     */
+    private static final long serialVersionUID = 3546359539474968625L;
+
+    private static Logger log = LoggingManager.getLoggerForClass();
+
+    private static final String KEY = "__jexl";
+
+    private static final List desc = new LinkedList();
+
+    static
+    {
+        desc.add("expression");
+    }
+
+    private Object[] values;
+
+    public String execute(SampleResult result, Sampler sampler)
+            throws InvalidVariableException
+    {
+        String str = "";
+
+        CompoundVariable var = (CompoundVariable) values[0];
+        String exp = var.getRawParameters();
+
+        try
+        {
+            Expression e = ExpressionFactory.createExpression(exp);
+            JexlContext jc = JexlHelper.createContext();
+            jc.getVars().put("ctx", sampler.getThreadContext());
+            jc.getVars().put("vars", getVariables());
+            jc.getVars().put("threadName", sampler.getThreadName());
+            jc.getVars().put("sampler", sampler);
+            jc.getVars().put("sampleResult", result);
+
+            // Now evaluate the expression, getting the result
+            Object o = e.evaluate(jc);
+            if (o != null)
+            {
+                str = o.toString();
+            }
+        } catch (Exception e)
+        {
+            log.error("An error occurred while evaluating the expression \""
+                    + exp + "\"");
+        }
+        return str;
+    }
+
+    public List getArgumentDesc()
+    {
+        return desc;
+    }
+
+    public String getReferenceKey()
+    {
+        return KEY;
+    }
+
+    public void setParameters(Collection parameters)
+            throws InvalidVariableException
+    {
+        values = parameters.toArray();
+        if (values.length != 1)
+        {
+            throw new InvalidVariableException("it only accepts one parameter");
+        }
+    }
+
+}

Propchange: incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/functions/Jexl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/ChainSampler.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/ChainSampler.java?rev=231491&r1=231490&r2=231491&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/ChainSampler.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/ChainSampler.java Thu Aug 11 10:51:16 2005
@@ -24,7 +24,6 @@
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.chain.Command;
 import org.apache.commons.chain.Context;
-import org.apache.commons.chain.impl.ContextBase;
 import org.apache.jmeter.config.Arguments;
 import org.apache.jmeter.engine.event.LoopIterationEvent;
 import org.apache.jmeter.samplers.AbstractSampler;
@@ -136,7 +135,7 @@
      * Performs a test sample.
      * 
      * The <code>sample()</code> method retrieves the reference to the command
-     * and calls its <code>runTest()</code> method.
+     * and calls its <code>execute()</code> method.
      * 
      * @param entry
      *            the Entry for this sample
@@ -151,13 +150,13 @@
             {
                 log.debug(whoAmI() + "Creating Command");
                 createCommand();
-            } 
-            
-            updateCommand() ;
-            results.setSampleLabel("Chain Test = "
-                    + command.getClass().getName());
+            }
+
+            updateCommand();
+            results.setSampleLabel(this.getName());
+            Context ctx = new JMeterContextAdapter(getThreadContext());
             results.sampleStart();
-            command.execute(getContext());
+            command.execute(ctx);
             results.sampleEnd();
             results.setSuccessful(true);
         } catch (Exception e)
@@ -168,18 +167,6 @@
         return results;
     }
 
-    private Context getContext()
-    {
-        Context ctx = (Context) getThreadContext().getVariables().getObject(
-            CHAINS_CONTEXT);
-        if (ctx == null)
-        {
-            ctx = new ContextBase();
-            getThreadContext().getVariables().putObject(CHAINS_CONTEXT, ctx);
-        }
-        return ctx;
-    }
-
     /**
      * Returns reference to <code>Command</code>.
      * 
@@ -200,12 +187,14 @@
 
         return command;
     }
-    
+
     /**
-     * Updates the command attributes 
+     * Updates the command attributes
+     * 
      * @throws Exception
      */
-    private void updateCommand() throws Exception {
+    private void updateCommand() throws Exception
+    {
         Map descrip = BeanUtils.describe(command);
         Iterator iter = descrip.keySet().iterator();
         while (iter.hasNext())
@@ -258,10 +247,10 @@
 
     /**
      * Method called at the end of the test. This is called only on one instance
-     * of ChainSampler. This method will loop through all of the other
-     * samplers which have been registered (automatically in the
-     * constructor) and notify them that the test has ended, allowing the
-     * ChainSamplerClients to cleanup.
+     * of ChainSampler. This method will loop through all of the other samplers
+     * which have been registered (automatically in the constructor) and notify
+     * them that the test has ended, allowing the ChainSamplerClients to
+     * cleanup.
      */
     public void testEnded()
     {
@@ -288,5 +277,4 @@
     public void testIterationStart(LoopIterationEvent event)
     {
     }
-
 }

Added: incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/JMeterContextAdapter.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/JMeterContextAdapter.java?rev=231491&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/JMeterContextAdapter.java (added)
+++ incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/JMeterContextAdapter.java Thu Aug 11 10:51:16 2005
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ *                     as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jmeter.protocol.java.sampler;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.chain.Context;
+import org.apache.jmeter.threads.JMeterContext;
+
+/**
+ * <code>JMeterContext</code> to commons chain <code>Context</code> adapter
+ */
+class JMeterContextAdapter implements Context
+{
+    private JMeterContext ctx;
+
+    /**
+     * private constructor
+     */
+    private JMeterContextAdapter()
+    {
+        super();
+    }
+
+    /**
+     * private constructor
+     */
+    public JMeterContextAdapter(JMeterContext ctx)
+    {
+        super();
+        this.ctx = ctx;
+    }
+
+    public void clear()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    public boolean containsKey(Object key)
+    {
+        return get(key) != null;
+    }
+
+    public boolean containsValue(Object value)
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    public Set entrySet()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    public Object get(Object key)
+    {
+        if (key == null || !(key instanceof String))
+        {
+            throw new IllegalArgumentException("Only String keys are supported");
+        }
+        return ctx.getVariables().getObject((String) key);
+    }
+
+    public boolean isEmpty()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    public Set keySet()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    public Object put(Object key, Object value)
+    {
+        if (key == null || !(key instanceof String))
+        {
+            throw new IllegalArgumentException("Only String keys are supported");
+        }
+        Object stale = ctx.getVariables().getObject((String) key);
+        ctx.getVariables().putObject((String) key, value);
+        return stale;
+    }
+
+    public void putAll(Map t)
+    {
+        ctx.getVariables().putAll(t);
+    }
+
+    public Object remove(Object key)
+    {
+        if (key == null || !(key instanceof String))
+        {
+            throw new IllegalArgumentException("Only String keys are supported");
+        }
+        Object stale = ctx.getVariables().getObject((String) key);
+        ctx.getVariables().remove((String) key);
+        return stale;
+    }
+
+    public int size()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    public Collection values()
+    {
+        throw new UnsupportedOperationException();
+    }
+}

Propchange: incubator/jackrabbit/trunk/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/JMeterContextAdapter.java
------------------------------------------------------------------------------
    svn:eol-style = native